最近在折腾 3D 智慧仓储数字孪生,选型时直接把目标锁定在“Antigravity + Blender MCP”这套组合上。先说结论:这套方案很适合做数字孪生原型和中小型可视化项目,因为 Antigravity 负责“理解需求、生成代码”,Blender MCP 负责“把 AI 的想法变成真实的 3D 实体”,一个管脑子,一个管手,中间通过 MCP 协议桥接,整条链路跑通之后,你只需要用自然语言描述场景,AI 就能在 Blender 里帮你把货架、AGV、传感器点位全部搭出来。
我写这篇文章是给两类人看的:一类是正在做数字孪生、智慧园区、仓储物流可视化项目的开发者,另一类是已经接触过 Blender 或 AI 编程工具、想尝试把 MCP 接入 3D 工作流的朋友。文章按下、中、上三篇准备,这一篇先把整体思路、环境搭建和第一个可用场景跑通,不让新手一开始就掉进各种插件和协议的坑里。
1. 项目整体定位与思路拆解
1.1 智慧仓储数字孪生到底要解决什么问题
很多人一提数字孪生,第一反应就是“做个好看的 3D 模型”,这是最大的误区。智慧仓储数字孪生的核心不是“看起来像”,而是“动起来一致”。你需要在三维空间里同时还原几何结构、业务逻辑和数据流转三件事:货架长什么样是几何层,AGV 怎么走、货物怎么入库出库是业务层,真实仓库里的库存数据、传感器读数怎么映射到模型上是数据层。
这三层缺一个,项目就只是个“3D 展厅”,而不是“数字孪生体”。在实际做项目的时候,最花时间的往往不是建模,而是把数据接到模型上、把动作逻辑跑通。传统做法是建模工程师先在 Blender 里手动摆场景,导出 glTF/OBJ,再交给前端工程师用 Three.js 或 Unity 做交互和数据绑定,中间还要反复沟通尺寸、坐标、命名规范,一个场景改三五轮很正常。
用 Antigravity + Blender MCP 这套流程,最直接的改变是:场景构建从“手动操作”变成“自然语言驱动”。我可以直接说“在 X=10, Y=5 的位置放一个长 12 米、宽 1 米、高 4 米的货架,颜色用深灰色,复制 8 排,排间距 3 米”,Antigravity 会通过 MCP 调用 Blender 的 Python API 完成这一系列操作,相当于把过去建模师一上午的体力活压缩成几分钟的智能体任务。
1.2 为什么选中 Antigravity 作为“大脑”
Antigravity 这个平台我用过一段时间,它对标的其实是 Claude Code、Cursor 这类 AI Agent 类 IDE,但有一个很关键的区别:Antigravity 不只是帮你补全代码,它是一个可以自主规划、执行、检查结果的智能体运行环境。说白了,它不是一个编辑器,而是一个能自己打开终端跑脚本、看报错、改代码再重跑的“AI 实习生”。
在数字孪生项目里,这种能力太有用了。因为场景构建不是一个“一次性生成 JSON”的问题,而是反复试错的过程:货架尺寸不对、AGV 路径碰撞、光照太暗、导出格式不兼容,这些都是意料之中的问题。用传统方式,你得自己对着报错信息一行一行改;用 Antigravity,我可以直接把报错扔回去,让它自己修。配合 MCP 之后,它还能直接操作 Blender 里的场景,这就把“思路”和“落地”的鸿沟填平了。
我在选型时也对比过直接用 Blender 内置的 Python 控制台,或者自己写插件来和 GPT API 对接。前者完全手动,后者要自己处理 API 调用、上下文管理、错误恢复,工作量不小。Antigravity 的价值在于它把“Agent 运行时”这件事做好了,我可以把精力集中在仓储场景本身。
1.3 项目的三层架构思路
搭建这个项目,我习惯把它分成三层来思考,这样后续扩展和维护都清晰:
- 场景层:Blender 负责承载所有的 3D 实体,包括货架、AGV、托盘、货物、传感器点位、路径线等。这一层的核心是“命名规范”和“坐标规范”,因为后续数据绑定全靠这两个。
- 桥接层:Blender MCP 负责把 Blender 的 Python API 暴露给 AI 智能体。AI 不需要知道 Blender 的面板在哪儿,只需要调用 create_cube、set_material、set_location 这类函数。
- 智能层:Antigravity 负责理解需求、拆解步骤、生成脚本、执行脚本、处理异常。它是整个流程的控制中枢,也是和业务逻辑对接的入口。
这套架构的好处是每一层都可以独立替换。比如场景层你不用 Blender 而是换 Unity,只需要改桥接层;智能层你不用 Antigravity 而是换其他支持 MCP 的客户端,场景层和桥接层都不用动。这种解耦在项目后期非常重要,因为客户很可能突然说“我们用 Three.js 做前端展示”,你不需要推翻重来,只需要把 Blender 里的 JSON 数据结构约定好,前端做一层解析就行。
2. 核心选型解析:Blender MCP 与 MCP 协议的理解
2.1 为什么是 Blender 而不是 Three.js 或 Unity
这个选择我纠结了很久,最后用一张对比表说服了自己。Three.js 是纯代码渲染,适合做最终 Web 展示层,但你在浏览器里修改一个场景结构非常麻烦,调试几何体需要不停刷新页面;Unity 是完整游戏引擎,功能强大,但工程体量大,而且 AI 对 Unity 的 MCP 支持成熟度远不如 Blender;Blender 则刚好卡在中间——它可以做精细建模,支持 Python 脚本全控制,又能导出多种格式给前端,最关键的是它有开箱即用的 MCP 生态。
| 方案 | 建模能力 | AI 控制便利度 | 导出生态 | 项目体量 |
|---|---|---|---|---|
| Blender + MCP | 强,全功能建模工具 | 高,有现成 MCP Server | 非常好,glTF/OBJ/FBX | 中 |
| Three.js 手写 | 弱,全靠代码 | 低,需要自己写 AI 工具 | 依赖加载器 | 轻 |
| Unity + 自研 | 中强 | 中,需要自己开发桥接 | 一般 | 重 |
特别要提的是 Blender 的“Python 全控制”能力。Blender 几乎所有操作都有对应的 bpy API,包括创建物体、修改材质、设置关键帧、切换渲染引擎。这意味着 AI 通过 MCP 拿到的不是一个黑盒,而是完整的操作权限。对于数字孪生这种需要精确控制位置、尺寸、材质的场景,这一点是决定性的。
2.2 MCP 协议到底是怎么工作的
MCP 全称 Model Context Protocol,是 Anthropic 推出的“模型上下文协议”,你可以把它理解成给 AI 插上 USB 口——AI 不需要知道设备内部怎么工作,只需要用标准的方式读写数据就能使用这个设备。在数字孪生场景里,AI 就是“大脑”,Blender 就是“手”,MCP 就是连接两者的神经线。
具体到 Blender MCP,它其实是一个本地服务器,启动后监听一个端口(默认通常是 9876 或者走 stdio),接收 MCP 客户端(也就是 Antigravity)发来的 JSON-RPC 请求,转换成 Blender Python API 调用,再把执行结果返回给客户端。比如你在 Antigravity 里对 AI 说“创建一个长宽高为 2x1x3 的立方体”,AI 会把这个意图翻译成一个 MCP 工具调用,比如:
tool_call: create_cube arguments: { "name": "AGV_01", "location": [10, 5, 0], "scale": [2, 1, 3] }Blender MCP 服务器收到这个调用后,在 Blender 内部执行bpy.ops.mesh.primitive_cube_add(size=1),然后设置位置和缩放,最后返回一个“执行成功”的结果。整个过程用户无感,就像 AI 自己长了一双能操作 Blender 的手。
这种机制的意义在于:你不需要为 AI 专门训练一个 Blender 模型,也不需要在代码里写死每一个场景步骤,MCP 让 AI 能够在运行时动态地操作工具。今天你让它建货架,明天让它建传送带,后天让它把 AGV 路径改一下,都不需要改代码,只需要改自然语言指令。
2.3 Antigravity 在 MCP 生态里的位置
Antigravity 是一个支持 MCP 客户端的 Agent 平台,你在它的设置里可以添加多个 MCP Server,启动之后它就能调用这些 Server 暴露的工具。和你在 Chrome DevTools、Playwright、BurpSuite 里配置 MCP 是同一个逻辑:Antigravity 是客户端,Blender MCP 是服务端,方向相反。
我在实际操作中强烈建议:不要把 Antigravity 只当成一个“聊天框”,它真正的价值是任务编排。你可以给它一个完整的 prompt,比如“按照仓储布局 JSON 文件里的配置,在 Blender 中创建所有货架和 AGV,并设置好材质和名称”,它会自动拆解成多个步骤:读取 JSON、循环创建货架、设置材质、创建 AGV、最后返回汇总结果。这种编排能力就是它和普通 ChatGPT 网页版的本质区别。
3. 环境搭建与核心配置实录
3.1 Blender 与 Blender MCP 插件的安装
先说版本,我实测下来 Blender 4.0 和 3.6 LTS 都可以稳定运行,推荐用 4.0 以上。在 Blender 编辑偏好设置(Edit -> Preferences -> Plugins)里安装 Blender MCP 插件,这一步的关键是你要找到官方或者活跃维护的仓库,而不是随便搜一个“blender-mcp”就装,社区里有几个旧版项目已经不太适配新版 Blender。
插件安装好之后,在 Blender 的右侧 N 面板会多出一个 MCP 标签页,里面有一个“启动 MCP 服务器”的按钮,点击后插件会在本机启动一个 MCP Server,默认监听端口是 9876,同时在界面上会显示当前连接状态。
提示:启动插件前建议先把 Blender 场景清空(All + A 全选再 Delete),因为后续 AI 创建物体时会以当前场景为基准,场景太杂容易干扰判断。
3.2 在 Antigravity 里配置 MCP Server
打开 Antigravity 的设置,找到 MCP Servers 配置项,添加一个新的服务器,类型选择 Streamable HTTP(如果你的 Blender MCP 插件用的是 HTTP 模式),URL 填http://127.0.0.1:9876。如果你是自编译的 MCP 服务器,也可以选择 stdio 模式,命令填启动脚本,比如:
npx @blender-mcp/server我这里要重点强调一个坑:MCP 客户端和服务器的协议必须匹配。有些 MCP Server 只支持 stdio,有些只支持 HTTP,Antigravity 两种都支持,但是你必须选对。Blender MCP 通常走 HTTP,因为它需要一个独立运行的常驻端口;而像文件系统 MCP、Git MCP 这类本地工具通常走 stdio。选错了的表现是很迷惑的:配置看起来没问题,但就是连不上,或者明明连上了但工具列表是空的。
配置完成后,在 Antigravity 的 MCP 工具面板里应该能看到 Blender MCP 暴露出来的工具函数,通常包括 create_object、set_transform、set_material、create_text、execute_code 等。看到工具列表,就说明握手成功了。
3.3 链路验证:从“你好”到“在原点生成一个立方体”
第一次连通后别急着写复杂场景,先做一个最简单的验证:在 Antigravity 的对话窗口里输入“请在 Blender 原点位置创建一个 1 米见方的立方体,命名为 test_cube”。
如果一切正常,Blender 视口里会立刻出现一个立方体,左下角的 Python 控制台也会显示对应指令。这一步跑通了,说明 Antigravity 的意图解析、MCP 调用、Blender 执行整条链路都是通的。
如果没反应,按这个顺序排查:先看 Blender MCP 插件界面的连接状态是不是 “connected/已连接”,再看 Antigravity 的工具面板是否加载了 MCP 工具,最后看 Antigravity 日志里有没有 timeout 或 connection refused 字样。这三个节点任何一个卡住,问题都出在这段链路上,不要盲目去改 prompt。
4. 实操:搭建一个可落地的仓储数字孪生场景
4.1 定义仓储布局:货架、通道与功能区
场景搭建的第一步是定义布局,我建议不要直接让 AI 自由发挥,先画一张草图或者写一段描述文字,明确几个关键参数:货架区在哪个坐标范围、通道宽度多少、AGV 作业区在哪、出入口在哪。这些参数后面会直接影响 AGV 的路径规划。
我在 Antigravity 里给它的指令是:“创建一个 80x60 米的仓储平面,南北方向排布 6 排货架,每排 12 组双面货架,货架长 12 米、高 4.5 米、深 1.2 米,货架间距 3 米,东西两侧预留 5 米主通道。”Antigravity 会通过 MCP 循环调用创建立方体的函数,把货架按规则排列出来。
要特别注意的是命名规范。我要求 AI 给每个货架命名时带上坐标信息,比如RACK_01_ROW_02,代表第 01 排第 02 组。这样做的原因很实际:后续你要做数据绑定时,库存系统的数据粒度可能就是“某排某组”,如果 Blender 里物体名和业务 ID 对不上,你就得在中间写一堆映射表,非常痛苦。这个习惯越早养成越好。
4.2 AGV 小车创建与动线路径模拟
仓储场景里最核心的动态元素就是 AGV。在 Blender 里创建一个简单的 AGV 模型不难:一个扁长方体做底盘,一个小长方体做顶升机构,再加几个圆筒做轮子。用 MCP 工具创建基础几何体拼装就行。难的是让 AGV 动起来,并且动线符合业务逻辑。
我常用的做法是用 Blender 的关键帧系统配合 Antigravity 生成移动脚本。具体来说,我会先定义一条路径:比如 AGV-01 从充电位出发,沿主通道走到 RACK_01_ROW_02 取货,再送到出库口。在 Blender 里可以用“添加空物体 + 贝塞尔曲线”的方式画路径,然后让 AGV 沿路径运动。Antigravity 在这里的作用是:我只需要描述“AGV-01 的路径经过这几个坐标点,速度每秒 2 米”,它就会帮我生成关键帧动画脚本,自动设置起始帧、结束帧和中间位置。
这个环节特别容易踩的坑是“坐标朝向”。AGV 在运动过程中不仅要位置正确,车头朝向也要沿着路径方向变化。如果你的 AGV 只是一个立方体,朝向错了看起来会很违和。解决方法是添加一个“朝向约束”(Track To Constraint),让车头始终指向路径方向。我在初版运行动画时就发现 AGV 横着走,后来加了约束才修正。
4.3 从静态模型到数字孪生:数据绑定与驱动
模型建好了、动画能跑了,这时候它还只是“数字模型”,离“数字孪生”还差最关键的一步——数据驱动。真正的孪生体必须具备这样的能力:当外部数据变化时,3D 场景里的物体状态跟着变化。比如仓库管理系统里 RACK_01 的库存从 80% 降到 60%,Blender 里对应货架上的托盘数量或颜色要能跟着变。
我在这篇(上)里的实现还是基于模拟数据:Antigravity 生成一个 JSON 数据源,里面包含货架编号、当前库存率、AGV 状态、任务队列,然后用 MCP 调用 Blender 的bpy.data.objects更新物体属性。你可以给每个货架物体添加自定义属性(Custom Properties),比如inventory_rate,Antigravity 可以通过 MCP 脚本读取外部 JSON 并批量更新这些属性。
{ "rack_id": "RACK_01_ROW_02", "inventory_rate": 0.65, "status": "active", "last_updated": "2025-06-10 14:30:22" }同时,你可以做一个简单的数据可视化映射:库存率高于 70% 的货架显示绿色,40%-70% 显示黄色,低于 40% 显示红色。通过 MCP 批量给材质槽位设置不同的基础色即可。这一步做完,你的场景才算真正迈入“孪生”的门槛,因为它开始有“状态”了。
4.4 材质、光照与人视点的视觉优化
数字孪生项目经常要给客户做汇报演示,视觉效果不能太拉胯。我建议至少做三件事:统一材质、补灯光、设置自由相机。
统一材质直接用 MCP 执行批量操作,给所有货架设置一个基础金属材质,给 AGV 设置亮色警示漆,给地面设置一个粗糙度较高的材质。地面如果太光滑,在 Eevee 渲染器下会出现很假的反射,建议粗糙度设到 0.7 以上。光源方面,用面光在场景上方 8 米处布置两盏主光,再在角落放一盏暖色补光。Blender 的灯光默认单位为瓦特,习惯了就好。
最后设置一台“自由相机”,绑定到 AGV-01 上,这样在演示时可以直接切换视角到 AGV 的第一人称画面,效果瞬间提升一个档次。这个操作在 MCP 里也没有难度,创建相机 + 添加约束,两条指令的事。
5. 常见问题与排查技巧实录
5.1 Antigravity 侧的高频报错怎么处理
我最常遇到的是两类报错。第一类是eligibility check failed,这个报错看起来像网络问题,但其实多半是账号权限或者会话状态失效。我遇到过好几次都是因为长时间挂着会话,重新登录,然后新建一个会话就好。第二类是agent execution terminated due to error,这个报错信息非常笼统,百分之八十的真正原因不在 Antigravity 本身,而是它调用 MCP 工具时,Blender 那边执行失败,比如函数名拼错、参数类型不对、bpy 接口在某些版本下行为不一致。解决办法是去看 Antigravity 的详细执行日志,里面有异常堆栈,顺着堆栈定位到 Blender 的 Python 脚本才能看到真实原因。
另外,更新 Antigravity 时偶尔会遇到更新失败,多半是国内网络环境导致下载不完整,多试几次或者换个时间段,不要强行中断正在运行的任务。
5.2 Blender MCP 连上了但 AI 操作无响应
这个问题我踩过两三次。插件显示已连接,工具列表也能拉出来,但 AI 发了指令后 Blender 就是不动。排查方向有两个:
第一,检查 Blender 主窗口是否被最小化。此问题听起来很无语,但某些 Blender 版本在后台运行时会暂停 Python 脚本的视口刷新,AI 的操作实际已经执行了,只是画面上没更新。把窗口还原到普通状态再看。
第二,检查blender_api.py文件是否和当前 Blender 版本兼容。Blender 版本升级后,有些 API 已经改名或废弃,而 MCP 插件还没跟上。升级 Blender 之前一定要先确认你的 MCP 插件版本是否兼容,这是我踩过一次比较大的坑。当时换到 Blender 4.1,插件还是旧版,AI 创建物体时调用的bpy.ops.object.select_all行为变化,导致所有物体堆在原点,排查了一个下午。
5.3 Blender 如何导出 JSON 给前端
很多数字孪生项目的最终展示层是 Web,因此需要把 Blender 场景导出成 JSON。这里要注意,Blender 没有内置的“导出场景为 JSON”菜单,你需要通过脚本导出。MCP 可以帮你执行一个自定义导出脚本,遍历场景里所有物体,提取name、location、rotation_euler、dimensions和自定义属性,生成结构化 JSON。这就是前端加载和渲染时需要的数据。
导出时命名规范和坐标基准一定要统一。我建议用 Blender 的世界原点作为坐标基准,前端 Three.js 的场景原点也对齐到世界原点,这样导出后直接加载,不需要额外偏移。如果场景里有大量物体,建议在导出时剔除辅助物体(比如路径曲线、相机、灯光),只保留业务实体,这样 JSON 体积能减少一半以上。
5.4 MCP 到底是软件协议还是硬件协议
我在配置 MCP 时常常想起来一个问题:MCP 是软件协议还是硬件协议?答案是软件协议,而且是应用层协议。它和 USB、蓝牙这类硬件接口协议完全不是一个层级。如果做一个类比,MCP 更像是“软件世界的 USB-C 口”——它定义了一套标准化的工具调用和数据交互方式,让 AI 应用能够在不同工具之间即插即用。
想清楚这一点,你配置 MCP 的心态会不一样。你不是在“接硬件”,而是在“对接一套 API 规范”。所以遇到 MCP 连接不上的问题时,不要想着去查网线、驱动,而应该去查进程、端口、数据格式、工具定义,排查思路会立刻清楚很多。
写在最后的个人经验
整个流程走下来,我最直观的感受是:Antigravity + Blender MCP 的组合,真正改变的并不是你“建模型”的速度,而是你“试错”的成本。过去我要手动调整一个货架的位置、一个 AGV 的路径,需要在 Blender 界面里找半天菜单;现在只需要打一句话,AI 就帮你把活办了。就算它第一次做错了,你也可以直接告诉它“往右偏 0.5 米”,它自己会去改,这种交互方式做数字孪生场景特别舒服。
上一篇到这里就收尾了,“上篇”我们只跑通了场景构建、基础动画和模拟数据绑定。下一篇我会继续往深做,把真实业务数据接进来,比如通过 MQTT 接收仓库传感器上报的库位占用信息,联动更新货架颜色和 AGV 任务,同时把 Blender 场景导出到 Three.js,做一个浏览器端可访问的数字孪生前端页面。到那一步,项目就具备真正的业务闭环价值了,而不只是一个好看的 3D 模型堆砌。