1. 这个项目到底在做什么:三个关键词串起一条流水线
先说结论:Antigravity + Blender MCP 这条组合,核心是把"AI代理"接到"3D建模软件"上,让 AI 不只是陪你聊天,而是真的动手在 Blender 里把模型建出来。我这次用它做的是一个智慧仓储数字孪生的初版场景——有仓库建筑、货架阵列、托盘和 AGV 路径,全程用自然语言驱动,基本没手动捏模型。
先拆一下标题里的三个词,搞清楚它们各管哪一段。
MCP 是 Model Context Protocol,中文一般叫模型上下文协议。它解决的问题很直白:AI 模型默认只能看文字,碰不到你的软件、文件、数据库。MCP 就是给 AI 开了一堆"接口",让它能调用外部工具。你可以把它理解成 AI 世界的 USB-C 接口——以前每个外设都要专属线,现在统一成一个标准口,插上就能用。Blender MCP 就是社区里有人写的、专门让 AI 控制 Blender 的 MCP 服务端,AI 通过它能新建物体、改材质、摆位置、加曲线,几乎覆盖建模常用操作。
Antigravity 是一个 AI Agent 平台,也就是能执行长任务的智能代理。它跟普通聊天机器人最大的区别是:你给它一个目标,它能自己拆步骤、调工具、跑代码、检查结果,出错还能自己改。Blender MCP 是它的工具之一,你可以把它理解成 AI 的"手"。
那数字孪生在这一套里是什么?数字孪生说白了就是在数字世界里做一个物理对象的镜像副本,仓库的数字孪生就是把真实的库房布局、货架、设备、作业动线在三维场景里还原出来,用于展示、仿真、调度验证。以前做这套东西,建模是最大瓶颈——一个像样的仓储场景,用传统建模方式要按天算,而且大多数业务人员根本不会 Blender。用了 AI + MCP 之后,门槛被压到很低:你只要能把需求说清楚,AI 就能把场景搭出来。
所以这个项目真正解决的是"从自然语言到三维场景"的效率问题。适合谁?三类人:一是做数字孪生项目但建模人手不够的工程师,二是想用 AI 提升 3D 工作流的设计师,三是刚接触 MCP 想找一个完整体验场景的开发者。这篇是上篇,重心放在环境搭建、链路打通和仓储核心场景建模上,交互和前端展示留到下篇。
2. 环境准备与首次连接:让 Antigravity 能指挥 Blender
2.1 先装 Blender 并确认 MCP 服务端能跑起来
不管 MCP 协议多热闹,最终落点还是在 Blender 上。我用的是 Blender 4.x LTS 版本,插件兼容性最稳。安装没什么好说的,官网下对应系统版本,装完打开,进 Preferences -> Plugins 看一眼,确认 Blender MCP 的插件已经启用。
这里有个大多数教程不会细说的关键点:Blender MCP 是分两端的,一端是 Blender 里的插件(负责接收指令并执行),另一端是 MCP Server(负责把 AI 的请求翻译成 Blender 能懂的操作)。你在 Antigravity 里配的是 MCP Server 的地址,但 Blender 本身必须打开且插件处于启用状态,这条链路才通。
我推荐用 uvx 方式启动 MCP Server,命令很简单:
uvx run blender-mcp如果你机器上还没装 uv,先装 uv 再执行上面这行。启动后终端会显示类似MCP server listening on http://127.0.0.1:8000的日志,这个地址就是后面要填给 Antigravity 的。注意,如果你用源码方式启动,要留意启动目录,别让 bpy 模块找不到,这也是新手最常卡住的地方。
窗口管理器上,我建议 Blender 窗口和终端窗口各占屏幕一半,启动 MCP Server 后切回 Blender,看一眼右上角插件面板是否有端口监听提示。没有提示也不用慌,只要终端没报错、端口能访问,链路就是通的。
2.2 在 Antigravity 里添加 MCP Server
Antigravity 的项目工作区里有 MCP 配置入口,一般在设置或者 Agent 相关的面板里能找到 "Add MCP Server" 按钮。选远程服务器类型,填刚刚启动日志里的地址,保存即可。
填地址时注意三点:一是协议前缀,本地是 http,千万不要手误填成 https;二是端口要一致,默认端口一般是 8000,但你本地如果多个服务在跑,端口可能被占用,MCP Server 启动日志会显示实际端口,以日志为准;三是地址用 127.0.0.1 还是 localhost,建议统一用 127.0.0.1,有些环境下 localhost 会解析到 IPv6 导致连接失败。
这里我踩过一个挺隐蔽的坑:Antigravity 里配置 MCP Server 后,不是立刻生效的。你要么开一个新的 Agent 会话,要么在会话里手动执行一次重新加载工具的操作,否则 AI 还是看不到新工具。我一开始配完直接继续聊天,AI 一直说"我没有这个工具",排查半天才发现是会话缓存问题。
2.3 首次连通性验证:说一句话,建一个立方体
链路通了没,别急着搞复杂场景,先做连通性验证。给 AI 下一句最简单的话:"在 Blender 中新建一个默认立方体,并把它移动到坐标 (0, 0, 1)。"
如果一切正常,你会看到 Blender 视口里真的出现了一个立方体,而且位置变了。这时候打开 Blender Outliner,能确认物体名称和坐标都符合预期。这一步至关重要,它证明了三件事:Antigravity 的 Agent 调用 MCP 正常、MCP Server 能驱动 Blender 插件、插件能执行建模操作。三板斧缺一不可,哪一环断了,后面全白搭。
我强烈建议你在这步多试几个基础指令,比如改材质颜色、旋转 45 度、复制一个物体。目的不只是验证,更是让 AI 在上下文里积累"它控制的是哪个 Blender 实例"的感知。多轮对话后,AI 对场景的把握会明显更精准。
2.4 连接参数速查表
把这次配置涉及的关键参数整理成一张表,方便你复现时对照检查。
| 参数 | 推荐值 | 说明 |
|---|---|---|
| Blender 版本 | 4.x LTS | 3.x 也可以但插件兼容性差一些 |
| MCP Server 类型 | remote (SSE) | 本地服务走 SSE 协议 |
| Server 地址 | http://127.0.0.1:8000 | 以实际启动日志为准 |
| Antigravity 会话 | 新开会话 | 配置 MCP 后需重开会话生效 |
| 验证指令 | 新建立方体并移动 | 用最简指令做链路验证 |
这些参数回头排查问题都要用到,建议你实际操作时顺手记一下终端日志里显示的端口,免得下次忘了。
3. 仓储数字孪生的核心建模实操
3.1 先用文本把仓库布局"说"出来
连通之后,第一件正事是搭仓库主体。传统做法是拉方块、挤面、倒角,一套流程下来小半天没了。MCP 模式下,你只需要把需求描述得足够具体,AI 会用 Blender Python API 把模型建出来。
我给的指令是这样分层写的:
请在 Blender 中创建一个智慧仓库建筑模型:长 60 米,宽 30 米,高 8 米。用立方体创建建筑主体,命名为 warehouse_main;在正面开一门一窗,门宽 4 米高 5 米,窗宽 2 米高 1.5 米;添加地面平面并赋予浅灰色材质。
这里有个关键:不是一句话,而是按"主体 -> 开口 -> 细节"拆分。AI Agent 执行长指令时,步骤拆得越清晰,出错的概率越低。它拿到指令后会先计算立方体的坐标范围,然后通过布尔运算做门洞窗洞,再设置材质。整个过程在 Blender 里会一步步呈现,你能实时看到建筑从无到有。
为什么建议尺寸给整数?因为 AI Agent 用的还是代码逻辑,整数可以避免坐标系里的浮点误差导致的面重叠、破面等问题。60x30x8 这个规格也不是拍脑袋,它是比较标准的单层仓库尺寸,货架区 40 米、通道 8 米、办公区 12 米,后面摆放货架时比例容易协调。
做完主体后,别忘了让 AI 设置单位:公制,米。Blender 默认单位有的版本是米、有的兼容设置比较混乱,单位不统一会直接导致后面生成货架尺寸错乱——你想要的货架高 5 米,结果建出来 5 个 Blender Unit,比例全歪了。
3.2 生成货架阵列:理解 AI 建模的"参数化思维"
仓储场景里货架是绝对主角。手动摆货架最痛苦的不是建一个,而是建一百个还要整齐。MCP 方案下,AI 本质是写了个循环代码来完成阵列。
我的指令:
在仓库内创建双深位货架阵列:共 5 排,每排 20 组货架。货架尺寸:长 1.2 米,深 1.1 米,高 5 米,每组货架 5 层隔板。排间距 3 米,组间距 0.1 米。货架主体用灰蓝色金属材质,隔板用深灰色。每个货架组命名规则:rack_row_col。
这里能明显感受到 AI 建模和手动建模的差异:你描述的是"参数",它生成的是"实例"。AI 会先创建一个货架组(Group),然后写一个嵌套循环,外层排、内层列,把每个实例放到对应坐标,再按命名规则改名。
我建议你特意要求 AI 把货架做成 Group 而不是散落的独立物体,原因有二:一是后面你要整体移动货架区或做碰撞检测,一个 Group 方便得多;二是 Antigravity 执行中如果需要微调,比如"把第 3 排整体向右移 0.5 米",对 Group 操作远比对散件操作可靠。
这个阶段最容易出的问题方向是朝向。仓库货架的开口方向是有讲究的,双深位货架,通道两侧的货架应该面对面。如果你的指令没提朝向,AI 默认全朝一个方向,后面加 AGV 路径时会发现叉车"没法作业"。保险做法是在指令里写明:"偶数排货架旋转 180 度,与相邻排形成对向布局。"
3.3 托盘与物资:小物件批量生成技巧
货架建好了,不能空着,得有托盘和物资箱子,否则数字孪生没有"内容"。
托盘我建议用标准尺寸:长 1.2 米,宽 1 米,高 0.15 米。这个尺寸是物流行业最通用的 ISO 托盘标准,数字孪生场景里贴近真实,后续接仿真数据时尺寸对得上。
直接复制货架的逻辑,让 AI 生成托盘阵列:
在每个货架的每个隔板上放置 1 个托盘,托盘尺寸 1.2 x 1 x 0.15 米。托盘用棕色木质材质。如果隔板长度放不下,自动居中放置。命名为 pallet_row_col_level。
这里有个细节值得展开:当物品种类多、数量大时,AI 的 token 消耗和计算能力会吃紧,一次全生成容易超时或卡死。我实际测试下来,100 个以上的实例拆分两批生成更稳。另外,"自动居中放置"这句话很值得加——AI 在编写生成逻辑时,如果不加这个约束,它可能直接按隔板左下角坐标放置托盘,看起来就是歪的。这个约束其实是在提醒 AI 把重心对齐到隔板中心。
物资箱子可以按场景需要做几种规格:标准周转箱 0.6 x 0.4 x 0.3 米,大号料箱 1 x 0.8 x 0.6 米。给箱子做三种颜色区分品类:蓝色半成品、绿色成品、黄色待检。这一步不光是好看,数字孪生里颜色是信息分层的手段,后面接业务数据时,颜色可以直接映射库存状态。
3.4 AGV 路径与动线:让场景"活"起来
静态模型堆完,仓库看起来是个死场景。数字孪生的核心在于"动",AGV 路径是首先要铺的。
Blender 里做路径最合适的是 Curve(曲线)。指令可以这样下:
在仓库地面上创建一条 AGV 行驶路径:用贝塞尔曲线,起点在收货区坐标(-25, -10, 0.02),沿着主通道延伸,经过货架区两侧,终点在发货区(25, 10, 0.02)。路径宽度 2 米,添加黄色材质。
这里给坐标时,我建议你先让 AI 打印当前货架区的包围盒坐标,再基于这个坐标去设计路径。否则你凭感觉给坐标,路径很可能从货架中间穿过去。打印包围盒可以这样说:"请计算仓库内所有货架的最小和最大坐标,并在终端输出。"
实体路径做出来后,下篇你可以直接用 Blender 的烘焙动画或者 MCP 的帧控制命令,让一个简化的 AGV 小车沿路径运动。但要注意,贝塞尔曲线的方向决定了 AGV 的朝向,如果小车跑起来是倒着走的,说明曲线的起始端点反了,这是 Blender 曲线最经典的坑。
另外,路径的 z 轴坐标我特意写了 0.02,这个也是经验之谈:如果路径和地面平面完全同高(z=0),渲染时容易出现 z-fighting 闪烁,路径线条会被地面"吃掉"。抬高 0.02 米视觉上看不出来,但能避免大量渲染问题。
3.5 导出与复用:Blender 如何导出 JSON 给前端
仓储数字孪生最终大概率要上 Web 展示。Blender 里建完场景,导出问题必须提前想。
首选方案是 glTF(.glb 格式),这是目前 three.js 支持最好的格式,PBR 材质、动画、骨骼都能保留。操作指令:
将当前场景导出为 glb 格式,保存到项目目录,文件名 warehouse.glb。导出时选择仅选中项,开启"应用修改器"和"保留层级关系"。
第二个问题就是热词里有人搜的"Blender 如何导出 JSON"。这个得分清两种情况:如果你要的是模型几何数据,glb 本身就是最好的容器,不用硬导 JSON;如果你要的是业务数据——哪个货架叫什么、在哪个坐标、放了多少托盘——这才是 JSON 的用武之地。我推荐让 AI 写一段 Python 脚本,遍历场景中所有以 rack 或 pallet 开头的物体,把名称、坐标、尺寸和自定义属性抽出来,输出成 JSON:
import bpy, json data = [] for obj in bpy.data.objects: if obj.name.startswith("rack") or obj.name.startswith("pallet"): data.append({ "name": obj.name, "type": "rack" if obj.name.startswith("rack") else "pallet", "location": [round(v, 3) for v in obj.location[:]], "dimensions": [round(v, 3) for v in obj.dimensions[:]] }) with open("warehouse_data.json", "w") as f: json.dump(data, f, indent=2, ensure_ascii=False) print("exported", len(data), "objects")这段脚本你可以让 AI 直接执行,也可以自己手动跑。配合 glb 模型文件,前端 three.js 加载 glb 拿到几何,加载 JSON 拿到业务数据,两者通过物体名称关联,数字孪生的"体"和"用"就分开了。
顺带提一句热词里有人搜"threejs 3D 好写吗"。如果你已经熟练 Blender 建模,three.js 的学习曲线主要卡在坐标系和材质系统上,但配合 glb 这种成熟格式,Web 展示的门槛比想象中低。下篇我会专门写前端加载和数据联动,这里先不展开。
4. 常见问题与排查技巧实录
4.1 高频报错速查表
这半个月我反复配置和调试,遇到的典型问题基本都集中在下面这张表里。你按表排查,大概率能省两个小时。
| 报错/现象 | 常见原因 | 处理方式 |
|---|---|---|
| connect timeout | MCP Server 没启动或端口错误 | 确认终端日志里的端口,检查地址前缀 http |
| tool not found | Antigravity 会话未重新加载 | 开新会话,或手动刷新 MCP 工具列表 |
| bpy module not found | Blender 插件环境异常 | 确认插件已启用,重启 Blender 后再启动 Server |
| eligibility check failed | Antigravity 账号资格受限 | 检查账号状态,关注官方资格政策更新 |
| agent execution terminated due to error | 单次指令过于复杂 | 拆小任务,一次只做一件事 |
| 路径线条闪烁或被地面遮挡 | z 轴共面 | 路径抬升 0.02 米 |
| 货架朝向不统一 | 指令未说明朝向 | 补一条旋转指令,按规则统一旋转 |
| 模型比例不协调 | Blender 单位未设公制 | 统一单位为米,重新生成 |
热词里有人遇到 Antigravity 403 或者更新出错,这类问题通常不是代码问题,而是账号和环境层面的限制。我的建议是先确认最新版本和官方公告,如果账号资格检查过不去,大概率跟地区支持列表有关,这个只能看官方后续开放节奏,技术侧没什么能绕过的讨巧办法。
4.2 让 AI 稳定输出的三条对话技巧
很多人用 MCP 建模失败,不是技术不行,是"不会跟 AI 说话"。我总结三条实测有效的对话原则。
第一,一次指令只做一件事。别让 AI"建一个仓库,里面放满货架,然后加路径,再导出模型"。正确做法是按上面第三节的节奏,一个阶段一个指令。AI Agent 执行链越长,中间一步出错后面全崩的概率越大。
第二,关键参数必须显式说明。尺寸、数量、间距、朝向、材质,这些参数宁可啰嗦也要写全。你写"放一些货架",AI 真的可能放 3 个;你写"5 排 20 列、双深位、排间距 3 米",它才能建出可用的货架区。这里的原则是:把你脑子里的验收标准翻译成 AI 的约束条件。
第三,允许 AI 补充方案而不是直接执行。遇到复杂操作,比如"在货架两侧加安全围栏并预留维修通道",你可以先问 AI:"你打算怎么实现?列个步骤再执行。"这一步能提前发现 AI 的理解偏差,比执行后再返工省事得多。这算是 Agent 工作流里一个很好用的习惯。
4.3 性能和工程化建议
最后说点工程上的体会。用 MCP 建大场景,性能是绕不开的。
Antigravity 的 Agent 在执行 Blender 操作时,本质是发送 Python 脚本到 Blender 并执行。如果生成的物体数量特别大,比如几百个托盘的循环代码,Blender 会因为单帧执行大量操作而卡顿。我实际测下来,单次指令生成的物体数控制在 150 个以内,执行时间和稳定性都比较理想。多一些的话,拆成多次指令,每次指定范围。
另外,给物体规范命名不是洁癖,是工程需要。托盘这个例子很典型:如果 AI 生成的物体名是"Pallet.001""Pallet.002"这种自动序号,后面导出 JSON 做数据关联时,你根本分不清哪个托盘在哪个货架哪一层。按 rack_row_col 规则命名,数据联动就非常顺。
还有一个容易被忽略的点:Blender 场景里如果用 Cycles 渲染器,材质节点越多,渲染越慢。数字孪生场景通常不需要照片级渲染,建议用 Eevee 实时渲染器,材质简单一点,整个场景的响应速度会好很多,尤其是后续要做动画调试时。
最后分享一点心得
这套组合我用了大概两周,最大的感受是:Antigravity + Blender MCP 真正的价值不是帮你省掉建模的时间,而是把"想法到三维场景"的反馈回路压缩到了分钟级。以前你有个仓储布局的想法,要打开 Blender 手动拉半天才能验证;现在你只需要说几句指令,AI 就帮你把草稿打出来了,你省下的精力可以全部花在方案推敲和细节优化上。
我的习惯是先跟 AI 用文字把场景方案过一遍,再让它动手执行,这样返工率低很多。另外,数字孪生场景别一上来就追求大而全,先做一个小范围但有完整闭环的区域,比如 10 组货架加一台 AGV 跑通流程,再往里堆内容。这个项目目前只是上篇,仓库场景和资产已经建好,下篇我会把精力放在 AGV 动画、数据联动和 three.js 前端展示上,到时候继续分享踩坑记录。