
1. 项目概述当 AI 代理开始操作 Blender1.1 这个项目到底在做什么我先说结论这个项目是用 Antigravity 作为 AI 编排层通过 MCP 协议把 Blender 变成 AI 可以直接控制的 3D 建模工具最终产出的是一个 3D 智慧仓储数字孪生场景。整套链路是“自然语言指令 → Antigravity Agent 理解意图 → 通过 MCP 调用 Blender Python API → 自动生成/修改仓储三维模型 → 导出场景数据 → 对接前端可视化”。听起来有点绕但拆开看其实很直白。传统做法是你打开 Blender 手动建模、摆货架、调材质再写代码导出数据。这套方案里你只需要告诉 AI“帮我建一个 8 排货架、3 条通道、每排 5 层层高 1.8 米的仓库”Antigravity 就会自动调用 Blender 生成对应场景。这就是 MCPModel Context Protocol模型上下文协议在起作用——它把 AI 和三维引擎之间的“对话”标准化了。我做这个项目的主要目的是想验证一条更高效的 3D 数字孪生生产路径。传统数字孪生项目最大痛点就是建模周期太长一个中等的仓储场景手工建模加调格式往少了说也要两个星期。而用 Agent MCP 的方式基础场景框架能在几小时内搭出来后续需求变更比如加一排货架、改通道宽度只需要改一句描述AI 会直接改模型。1.2 为什么是 Antigravity、Blender 和 MCP 这个组合先说 Antigravity。它本质上是一个带 Agent 能力的 AI 开发环境内置了大模型和代码执行沙箱。和普通对话式 AI 最大的区别是它能自主完成“理解需求 → 拆解任务 → 调用工具 → 验证结果”的完整闭环。我要它建仓库它不会只给我一段 Python 代码让我自己跑而是真的会去连接 Blender、执行脚本、截图给我看效果。这一点对非纯编程背景的同学特别重要你可以不关心 Blender 的 API 细节只要把意图说清楚。再说 Blender。选它而不是 Unity 或 Three.js核心原因是它具备完整的建模、修改、导出流程而且有 Python API 和命令行模式。MCP 服务器要控制三维工具必须有稳定的程序化接口。Blender 的bpy模块可以直接执行建模、材质、渲染、导出这能力是很多游戏引擎不具备的——它们更适合展示成品而不适合“无头”批量修改模型。最后是 MCP。它解决的是 AI 和工具之间的协议统一问题。没有 MCP 之前每个工具都要单独写一套适配有了 MCPBlender 只需要实现一个标准接口Antigravity 就能通过统一的协议读写状态、调用操作。打个比方MCP 像是 USB 接口Blender 是 U 盘Antigravity 是电脑。没有 USB 标准之前每个设备都得专门设计接口有了标准之后插上就能用。1.3 适合谁看能解决什么问题如果你是做数字孪生、智慧园区、仓储物流可视化相关工作的或者对 AI 辅助 3D 建模感兴趣这篇文章值得看完。我会把环境搭建、MCP 配置、Blender 建模、数据导出、问题排查这些环节全部铺开讲结合我实际踩过的坑。需要提前说明的是阅读这篇文章不需要你精通 Blender 或写过完整的 MCP 服务器但最好对 Python 有一点基础至少能看懂函数调用。我会尽量把每个步骤的操作理由讲清楚你遇到类似场景时可以照着做而不是死记命令。2. 核心概念与方案选型拆解2.1 数字孪生与 3D 智慧仓储需求侧分析数字孪生这个概念被滥用了很久但落到仓储场景它其实有非常具体的需求。我们做智慧仓储三维可视化最终要回答三个问题仓库里现在有什么东西、东西在哪、设备AGV、传送带、机械臂在干什么。对应到三维场景就是三个层次第一层是静态结构建模包括墙体、货架、通道、出入口这一层基本不变做完可以反复复用。第二层是动态设备建模包括 AGV、堆垛机、机械臂这些会动的东西它们需要带关节和动画逻辑。第三层是数据绑定就是把货架上每个库位和业务数据库关联起来模型上的任何一个格子都能查到对应的库存信息。这三个层次的工作量是递增的。第一层用刚才说的“AI 从零生成”就能搞定第二层需要手工定制或半自动生成第三层则是纯粹的代码工作要在前端或 Node 服务里做数据映射。我这次项目的主攻方向是第一层加第二层的框架部分第三层用到了导出 JSON 的方案后面细说。2.2 MCP 协议AI 与三维世界的握手协议MCP 不是什么全新的概念它的核心是一套 JSON-RPC 风格的通信协议规定了 Client比如 Antigravity和 Server比如 Blender MCP 服务之间的消息格式。简单说AI 想要 Blender 干活不是直接把自然语言扔给 Blender而是消息先经过 MCP Server 翻译成可执行的bpy命令。我从实际运行的角度理清一下消息流用户在 Antigravity 里输入指令“新建仓库宽 60 米深 40 米高 8 米内部 5 排货架。”Antigravity 的 Agent 把任务拆解识别出需要调用 Blender 的“新建场景”能力。Agent 通过 MCP Client 向 Blender MCP Server 发送create_warehouse(width60, depth40, height8, rack_rows5)。Blender MCP Server 收到后执行bpy脚本操作场景数据。结果成功/失败/截图路径通过同一通道返回给 Antigravity。这套流程的关键在于 MCP 的 Schema 定义——也就是给 AI 看的“工具说明书”。在 MCP Server 里每个工具都要声明参数、类型、返回值格式。AI 会根据这个 Schema 决定怎么调用所以 Schema 写得越清楚AI 的执行准确率越高。我后面有一节专门讲这个 Schema 怎么写。2.3 Antigravity 的角色AI 代理如何编排工作流Antigravity 在整个项目里像一个“包工头”。它不直接建模但负责拆解你的自然语言需求调度 MCP 工具检查每一步执行结果必要时纠正错误。我在项目中体验最深的一点是它的 Agent 循环能力。普通的 AI 辅助编程是“用户提问 → AI 回答 → 用户手动作”但 Antigravity 的 Agent 模式是“任务下发 → 自动执行 → 自动检查 → 发现问题自动重试”直到任务完成或失败退出。而且它可以记住之前执行过哪些操作比如已经创建过货架再让它加一层它不会重新建一个场景而是找到现有对象做修改。不过这种自主性也带来一个风险当 Blender MCP Server 返回错误信息时Agent 可能会凭“想象力”自行修改方案而不是真正读懂 Blender 报错。这时候如果你给的约束条件不清晰它会反复尝试造成整个任务执行时间拉长、甚至进入死循环。所以我建议在给 Antigravity 下达任务时尽量在指令中带上明确的数值范围和可选方案比如“如果货架放不下自动减少排数而不是改变通道宽度”。2.4 Blender 在数字孪生中的不可替代性有人会问既然最后展示是在前端为什么不在 Three.js 里直接建我的答案是建复杂场地模型这件事Blender 仍然是效率之王。Three.js 里建一个简单的盒子没问题但你要建货架阵列、通道标识、AGV 模型效率就很低了。而且 Three.js 没有针对“尺寸、材质、光照”的直观编辑界面一切靠代码改一个参数就要刷新浏览器看效果。Blender 则不同它有一个完整的 3D 视图你可以在里面旋转、缩放、看模型关系AI 操作时也可以截图反馈。数字孪生项目前期大量精力花在“把场景打磨到比例合理、材质正确、层级清晰”上Blender 的视窗系统提供了最好的调试体验。此外Blender 的.blend文件本身就是场景的数据库——它存储了物体的层级、变换矩阵、材质属性、动画曲线。MCP Server 可以在内存里对整个.blend文件做任何操作然后导出 glTF/JSON 给前端用。这种“建模和导出分离”的工作模式特别适合数字孪生建模在 Blender 里完成运行时数据在前端驱动。3. 环境准备与基础配置实操3.1 部署 Antigravity 并解决 403 问题Antigravity 的安装本身不复杂下载对应平台安装包注册账号登录。真正容易卡住的是 403 报错。我在第一次启动时就遇到antigravity 403界面直接无法进入。这个问题的原因比较多我从现象到解法逐个排查最常见的是账号验证未完成。Antigravity 会要求你验证邮箱或账号状态如果没验证完接口返回 403。页面会出现please verify your account to continue using antigravity提示。我当时的处理是把整个流程走完包括邮件点击确认链接、重新登录。另一种是时间不同步导致的 token 校验失败。如果你的系统时间和真实时间偏差太大请求签名验证会失败表现为 403。这种问题在虚拟机或长时间休眠的电脑上很常见校准时间后就好了。还有一种是访问网络不稳定导致登录态校验中途失败。此时可以等一段时间再重试不要反复刷新。如果你遇到antigravity update error也就是更新出错多数是增量包下载异常。我建议直接卸载重装最新版不要浪费时间修复增量包。3.2 通过 MCP 配置 Blender 服务端Antigravity 装好后下一步是连接 MCP Server。Blender MCP 服务的地址格式一般是wss://api.xxx.com/mcp/?token...本质上是通过 WebSocket 访问远程 MCP 服务。但在本地开发场景我更推荐用本地 MCP 服务也就是直接在本机跑一个stdio或sse模式的 MCP Server指向本机安装的 Blender。这里有个容易混淆的点MCP 协议有两种传输方式一种是本标准输入输出stdio适合本地进程另一种是 Streamable HTTP 或 WebSocket适合远程访问。我这次选的是本地 stdio 模式Antigravity 启动时会把它当作子进程唤起来。远程wss模式的好处是不用本地装 Blender但延迟更高而且你必须在远程环境里维护 Blender 的完整安装。除非是多人协作共享一个建模环境否则本地 stdio 模式体验更稳。在 Antigravity 的 MCP 配置里我加了一个 JSON 配置项类似这样{ mcpServers: { blender: { command: python, args: [-m, blender_mcp_server, --port, 9876], env: { BLENDER_PATH: /Applications/Blender.app/Contents/MacOS/Blender } } } }这里面有一个关键参数BLENDER_PATH要指向实际的 Blender 可执行文件。MCP Server 收到 AI 的建模块指令后会用--background模式启动 Blender 实例执行bpy脚本最后关闭。如果你没设置这个路径或者指向错版本后面调用会直接报找不到文件。3.3 Blender 环境准备与插件安装Blender 这边要做两件事一是确认 Python 环境可用二是安装必要的插件如果有的话。Blender 4.x 自带完整的 Python 解释器在脚本编辑里可以直接执行bpy。但你需要注意MCP Server 是通过外部 Python 进程调用 Blender 的不是在这个 Python 解释器里跑。也就是说你本机的 Python 环境里要装了blender-mcp-server这个包并且它能启动 Blender 的 Python API。我当时的做法是用pip安装 MCP 依赖包然后用命令行验证 Blender 能被外部进程调用blender --background --python-expr import bpy; print(bpy.app.version_string)能正常输出版本号说明 Blender 的命令行模式可用。这一步是整个链路通畅的基础如果输不出内容多半是BLENDER_PATH配错了或者 Blender 安装盘符路径里有空格导致解析问题。另外我建议打开 Blender 的“开发者模式”。在偏好设置 → 界面 → 勾选“开发者选项”。这样脚本执行时的错误信息会完整输出而不是被界面吞掉排查问题能少花一半时间。4. 核心实操用 Blender 搭建仓储数字孪生场景4.1 场景结构设计与坐标规范数字孪生场景最忌讳“怎么方便怎么建”后面数据对接时会乱成一锅粥。我开工之前先定了几个规范以 Blender 的世界原点为仓库中心点0,0,0地面放在 Y0 平面X 轴为仓库长度方向Y 轴为宽度方向Z 轴为高度方向。单位统一用米这是 Blender 的默认公制单位也是对接物理引擎和前端三维引擎最稳妥的方案。层级命名規范是我踩过坑之后才总结出来的。每个货架对象叫Rack_01、Rack_02库位叫Bin_R01_C02_L03排-列-层AGV 叫AGV_A、AGV_B。不要小看命名这件事后续通过 MCP 给 AI 下指令时比如“把 Rack_03 的高度改成 2.4 米”如果命名不清晰AI 根本定位不到对象。更麻烦的是MCP 返回的场景对象树也会因为命名混乱而变得不可读。我建议从第一个模型开始就强制自己按规范命名。4.2 货架、通道、AGV 的建模策略货架是仓储场景里数量最多、结构最重复的对象。手工一个个摆浪费时间让 AI 用循环阵列做是最优解。核心思路是先建一个“标准货架单元”然后用 Python 循环复制按间距排列。下面是我给 AI 下达的一段典型建模指令以及它触发的 Blender 脚本逻辑创建一个双深货架长 2.4 米宽 1.2 米高 1.8 米5 层横梁底部离地 0.1 米。AI 通过 MCP 调用了类似这样的函数def create_rack(location, length2.4, width1.2, height1.8, shelf_count5): # 建立柱 for i in range(2): x_offset -length / 2 if i 0 else length / 2 bpy.ops.mesh.primitive_cylinder_add( radius0.04, depthheight, location(location.x x_offset, location.y, location.z height / 2) ) # 建横梁和层板 for shelf in range(shelf_count 1): z_pos location.z 0.1 shelf * (height - 0.2) / shelf_count # 建横梁 cube 并拉伸 # 建背板/护栏等这个函数其实不复杂关键在两点一是把底座高度、层高、尺寸全参数化AI 可以根据你的需求生成任意规格货架二是把物体用集合Collection管理每个货架的所有部件都归入Rack_XX集合方便后续整体移动和导出。通道的建模更简单本质上就是地面上的标记线。但要注意贴图和 UV 展开如果你打算在浏览器里展示通道标线最好用独立的材质 ID这样前端可以通过材质属性控制透明度或变色。AGV 的建模就别走“AI 从零生成”路线了这种有轮子、有举升机构的模型AI 生成的几何结构通常比较粗糙。我的做法是从开源模型网站下载基础 AGV 模型再在 Blender 里调整尺寸比例。这并不违背项目目标——AI 负责搭框架模型资产靠人工精修两者结合才是实战状态。4.3 通过 MCP 让 AI 调用 Blender API这一段是整个项目的核心机制也是 MCP 体现价值的地方。MCP Server 里定义了若干工具我这里列出最常用的四个工具名功能参数示例create_warehouse_shell生成仓库外框架width, depth, height, wall_thicknesscreate_rack_layout按行列生成货架阵列rows, cols, row_gap, aisle_width, rack_heightset_material_by_name给对象设置材质object_name, material_name, color_hexexport_scene_json导出场景 JSONexport_path, include_metadataSchema 的意思是告诉 AI“这个工具接受什么参数、返回什么结果”。仓库外框架的例子{ name: create_warehouse_shell, description: 创建仓库的建筑外壳包括地面、四周墙壁和屋顶开口。, inputSchema: { type: object, properties: { width: {type: number, description: 仓库宽度米沿 X 轴}, depth: {type: number, description: 仓库深度米沿 Y 轴}, height: {type: number, description: 仓库高度米沿 Z 轴} }, required: [width, depth, height] } }我强烈建议你在描述字段里写清“米”这个单位并且说明坐标轴方向。因为 AI 模型对空间概念的理解不完全稳定万一它把 X 和 Y 搞反了出来的仓库就是扁的。同样的如果你希望 AI 优先响应某个工具可以把它放在 Server 的工具列表前部并增加一个高优先级的描述提示。4.4 导出 JSON 数据与前端联动Blender 模型最终要被前端网页使用所以导出格式要“轻”。我不推荐直接导出.blend让浏览器加载——格式太重兼容性也差。我这边走的是两条路一条是导出 glTF/GLB 作为三维模型资产另一条是导出 JSON 作为场景结构数据。.blend文件本身是场景的数据库glTF 是给前端渲染用的轻量格式JSON 则是给业务逻辑用的数据源。这三者的关系是glTF包含几何、材质、动画在 Three.js 里可以直接加载。JSON包含物体名称、世界坐标、长宽高、层级关系、库位编号、容量上限等元数据。业务系统根据 JSON 里的库位编号查询库存数据驱动前端改变对应模型的实时状态。MCP 的export_scene_json工具在导出时会把每个物体的 transform位置、旋转、缩放、bounding_box包围盒、custom_properties自定义属性全部扫出来。你只需要在 Blender 的物体属性面板里填好自定义属性比如SKU_CODE、MAX_WEIGHT导出时就会自动带上。这一步很关键我见过太多人做数字孪生依赖手工绑定数据位置模型一改绑定就全崩了。用自定义属性驱动导出可以保证“模型和数据永远同步”。前端联动这部分我用了一个简单的原则前端不直接分析模型的几何细节只读取 JSON 和 glTF。场景初始化时加载 glTF同时把 JSON 里每个物体的坐标映射到 Three.js 对象上后续要更新库位状态只需要用 JSON 里的 ID 查找三维对象即可。5. 常见问题与排查实录5.1 Antigravity 403 与账号验证问题这是整条链路第一道坎我遇到过不止一次。403 出现的场景大概有三类登录后立即出现、执行 Agent 任务中途出现、更新过后出现。登录后立即出现的 403基本可以判断是账号状态问题。按照提示完成verify your account to continue using antigravity验证流程一般能解决。执行中途出现的 403通常是会话过期重新登一次就好。更新过后出现的 403大概率是配置文件和当前版本不匹配——我建议把老版本的配置文件全部删掉让程序重新生成。这类问题有个通用排障思路先看是否有验证提示再看系统时间是否正确最后考虑重装。按这个顺序能覆盖九成的情况。不要再进去乱改网络配置那只会让问题更难排查。5.2 Agent 执行被终止的排查思路antigravity agent execution terminated due to error这个报错我在第一次自动生成货架阵列时遇到过。当时表现是AI 已经创建了几排货架突然报错终止。排查后发现原因是 MCP 工具返回的结果数据量太大——场景里有几百个物体每个物体的信息都返回给了 Agent超出了单次上下文窗口的限制。解决方法是调整 MCP Server 的返回策略不要在每次调用后全量返回场景信息只返回“操作结果摘要 新增对象的少量元数据 场景对象数量统计”。让 MCP Server 提供一个专门的summarize_scene工具AI 需要知道全局情况时再主动调用。这个改动把它从“一次性塞太多信息导致上下文爆炸”这个问题里拉出来了。还有一个容易忽略的问题Blender 某些操作需要 GUI 上下文比如bpy.ops.mesh.primitive_cylinder_add在--background模式下虽然通常没问题但如果你不小心切换了场景上下文例如没有先select_all(actionDESELECT)也会中断。这类问题要从两处入手一是在脚本里做好对象选择状态管理二是让 Agent 在处理复杂任务前先调用一个“重置场景到已知状态”的工具。5.3 MCP 连接失败的常见原因MCP 连接失败我的经验是把问题分成两端客户端配置问题和服务端环境问题。客户端最常见的问题是command指向的 Python 环境不对。Antigravity 自身可能带了一个 Python 解释器如果你在系统 Python 里装了 MCP 包但配置里用的是 Anaconda 的 Python就会找不到模块。一定要在启动 Antigravity 的同一个环境里安装 MCP 相关依赖或者用绝对路径指定 Python 可执行文件。服务端最常见的问题有两个。第一个是端口被占用尤其在做本地调试时上次异常退出后端口没有释放。第二个是 Blender 进程残留如果 MCP Server 创建 Blender 子进程失败要先手动把所有 Blender 进程杀掉再重试。这两个问题很好排查打开系统进程管理看有没有僵尸 Blender再看命令行netstat -ano | findstr 9876有没有端口占用。5.4 Blender 建模中的性能与规范问题仓储场景建模最大的性能杀手是物体数量。一个大型仓库可能有几百个货架、上千个库位如果每个库位都是一整个独立 MeshBlender 会卡到怀疑人生前端加载也大概率白屏闪退。解决办法是实例化。Blender 用collection_instance或关联复制可以大幅降低内存开销——底层数据只有一份上层只是“引用”。导出的 glTF 也支持实例化前端加载会非常快。但这里有个坑AI 通过 MCP 自动建网格时如果不注意它会把每个立方体都做成独立 Mesh。所以在给 AI 的指令里要明确“货架横梁和立柱用关联复制/实例化方式生成不要独立生成 Mesh”。另外精确建模时要注意 Blender 的容差问题。MCP 执行命令时如果你直接给浮点数坐标可能出现微小偏移导致边缘漏缝。我的习惯是全部用毫米级整数运算用round(x, 3)在模型层面上消除误差。6. 项目小结与我的几条经验这个项目做到目前阶段我最大的收获不是“AI 能建 3D 模型”而是“AI 加标准协议能重构 3D 建模的工作流”。以前改一个货架高度、加一排通道需要手动操作加代码修改现在只需一句话描述变化剩下的事交给 Agent。这种体验带来的效率提升只有实际跑通一次才知道有多大差距。要说最值得分享的经验我总结成三句话。第一MCP 工具的描述写得越具体AI 的完成度越高“米”和“轴”这种看似基础的单位说明一个都不能省。第二建模规范永远是第一位的命名、坐标、单位、自定义属性这些功夫花在前期后期能省下十倍时间。第三Agent 不是万能的它会在一个错误上反复横跳你要通过控制返回信息量和增加重置工具来约束它的自主性。这个系列的主题是“上”目前完成了场景框架和基础建模的流程。下一篇我会重点做动态部分给 AGV 添加路径动画、把 JSON 数据对接到前端 Three.js、并实现基于实时数据的货架亮色联动效果。等我把动态数据串起来再做一次完整的视频演示到时候会把这个项目的所有配置文件和 MCP 工具代码开源出来方便大家直接改造成自己的数字孪生底座。最后再分享一个小技巧调试 MCP 链路时不要一上来就用 AI 全流程。先在 Blender 里手动执行一次目标脚本确认效果再手动模拟一次 MCP 调用最后才让 Antigravity 自主跑。把问题分层隔离整个调试过程会很有时。这套“先本地、再协议、后 Agent”的三段式排查法我强烈建议每个做 AI 工具链的人都试一次。