1. 这个项目到底在做什么
先说结论:Antigravity + Blender MCP 这套组合,干的是"让 AI 直接动手操作 Blender 帮你建模"这件事,而把它落到智慧仓储数字孪生这个场景里,就是让 AI 根据你的描述,自动生成一个包含货架、巷道、货物、AGV 小车的三维仓储场景,然后把这个场景导出到网页端,做成一个能看、能点、能联动数据的数字孪生页面。
说直白点,传统的 Blender 建模流程是"人操作软件",再高级一点是"人写 Python 脚本操作 Blender"。而 MCP(Model Context Protocol)把 Blender 变成了一个 AI 可以直接调用的"工具服务",Antigravity 作为 AI 代理(Agent),通过 MCP 协议向 Blender 发送指令,比如"创建一个长 12 米、高 8 米的立体货架""把货物按 5 排 3 列摆放"——Blender 收到指令后真的会去执行,建模过程就变成了"人跟 AI 对话,AI 操作软件"。
这个项目我断断续续做了两周,期间踩了不少坑,也验证了一条非常实用的工作流。这篇是"上篇",先把整体思路、环境搭建、建模实操和导出链路的完整过程写清楚;"下篇"会专门展开数据联动和前端交互的部分。如果你正在做数字孪生相关的项目,或者好奇"AI Agent 到底能怎么跟 Blender 这类重型软件配合",这篇应该能给你省下不少查资料的功夫。
2. 环境准备:把工具链搭起来
2.1 Antigravity 侧需要准备什么
Antigravity 是 Google 推出的 AI IDE/代理工具,界面长得像 VS Code 的强化版,但核心差异在于它内置了 Agent 执行环境——你可以在一个"代理会话"里让它读代码、跑命令、调用外部工具,甚至操作浏览器。这个项目里,Antigravity 扮演的是"大脑 + 调度器"的角色:它负责理解你的建模需求,规划步骤,然后通过 MCP 协议把指令发给 Blender。
安装这块没什么好说的,官方下载对应平台版本即可。装完以后有两件事必须做:
第一,在扩展设置里开启"MCP 连接"相关的开关。Antigravity 的 MCP 配置入口是逐步完善的,新版一般直接在设置面板里有 MCP Servers 的管理界面;如果找不到,按Ctrl+Shift+P搜 "MCP" 也能调出来。开启之后,才能添加远程 MCP Server。
第二,准备好 Blender MCP 服务的地址和令牌。我用的是社区比较活跃的blender-mcp项目,它提供两种连接方式:本地 HTTP 模式和远程 WSS 模式。本地模式适合你自己电脑上调试,远程模式适合团队协作或者把 Blender 跑在专用机器上。WSS 地址长这样:wss://api.xxx/mcp/?token=...,把服务商给你的完整地址原样填进 Antigravity 的 MCP Server 配置里,协议类型选 WebSocket 就行。
注意:令牌就是你的访问凭证,相当于钥匙。填错了连不上,泄露了别人能直接操控你的 Blender。别把它贴到公开仓库或者群里。
2.2 Blender 与 MCP 插件的安装
Blender 侧相对简单,但有个版本兼容的坑要先讲:Blender MCP 插件对 Blender 版本要求比较"挑",我实测在 Blender 4.0 和 4.2 上表现稳定,4.3 部分版本会有 API 变更导致的报错。建议直接装 LTS 或者当前官方推荐的稳定版,别追求最新。
安装插件的步骤:
- 从插件仓库下载
blender-mcp的代码包,解压后是一个包含__init__.py的目录。 - 打开 Blender,进入
编辑 > 偏好设置 > 插件,点击右上角"安装",选择解压出来的__init__.py所在目录。 - 勾选启用插件,然后在侧边栏的 MCP 面板里启动 Server。
插件启动后,Blender 会监听本地端口(默认是 9876,不同实现可能不同)。你可以先测一下服务是否正常:在本地用 WebSocket 客户端连一下,或者直接用插件面板自带的 "Test Connection" 按钮。我记得我第一次启动时界面一直显示 "Server not running",后来发现是 Blender 的网络模块没正确初始化,重启 Blender 再启动插件就好了。
2.3 MCP 配置与连接验证
MCP 协议本身不复杂,你可以把它理解成"AI 世界的 USB 接口":以前每个工具都要为 AI 单独开发一套对接方式,现在大家统一按照 MCP 的规范暴露工具接口,AI 通过标准协议发现工具、调用工具、获取结果。Blender MCP 就是暴露了一组工具集,比如create_mesh、set_location、apply_material,每个工具都有参数说明,AI 代理可以自动理解并调用。
在 Antigravity 里配置好 MCP Server 后,最好先做一个"最小连接验证"——在代理会话里输入一句非常简单的指令:
使用 MCP 工具在 Blender 中创建一个立方体如果 Antigravity 正确识别出了blender-mcp的工具,并且 Blender 视图里真的出现了一个立方体,说明整条链路是通的。这一步验证通过,后面的事情就有底了。
我实际配置时的链路是:
| 组件 | 作用 | 我的版本/选项 |
|---|---|---|
| Antigravity | AI 代理,负责任务规划与工具调用 | 最新稳定版,开启 MCP 扩展 |
| Blender | 三维场景编辑器,模型生成与导出的执行端 | 4.2 LTS |
| blender-mcp 插件 | 把 Blender 封装成 MCP 服务 | 社区主分支版本 |
| MCP 传输协议 | 承载 AI 与 Blender 的指令通信 | WSS 远程模式 |
整条链路验证通过后,我建议你花十分钟做一件事:在 Antigravity 的 MCP 管理面板里看一下blender-mcp到底暴露了哪些工具。这一步非常关键,因为你只有知道了工具的能力边界,后面设计 Prompt 时才不会"想当然"。比如我用的这个实现里,工具包括创建基本几何体、设置变换、复制对象、应用材质、修改器操作等,但并没有"一键生成货架"这种高级工具——所以"生成货架"这个需求,需要 AI 拆解成"创建长方体 + 复制数组 + 对齐排列"等一系列基础动作。理解了这一点,你才能写出有效指令。
3. 用自然语言驱动 Blender 建模
3.1 仓储数字孪生的场景拆解
很多人拿到"智慧仓储数字孪生"这个需求会懵,因为听起来太大了。我的习惯是先拆解:一个仓储场景,视觉上无非就几类元素——
- 货架系统:双深货架、驶入式货架等,但基础模型就是"立柱 + 横梁 + 层板"的组合。
- 货物单元:货箱或者托盘,通常是标准尺寸,比如 1200mm × 1000mm 的托盘。
- 巷道与地面:货架之间的通道,AGV 行驶区域,地面标识线。
- 设备对象:AGV 小车、机械臂、提升机,这些是"会动"的元素,数字孪生场景里通常需要单独建模并预留动画/数据接口。
- 建筑围护:墙体、大门、柱网,决定了整个场景的边界感。
拆解完之后,"用 Blender 建一个仓储数字孪生场景"就被翻译成了几个明确的子任务。这是整个项目里最值钱的一步——AI 建模不是玄学,本质上是把你的场景需求拆成 AI 能执行的原子操作序列。
3.2 Prompt 设计:从"画一个货架"到"排布整个库区"
跟 AI 协作建模,最大的心得是:指令粒度要刚刚好。粒度太粗,AI 不知道你要什么;粒度太细,你等于自己在写代码,失去意义。
举几个我实测过的例子。
低效指令(太笼统):
帮我建一个智慧仓库这条指令的问题在于"智慧仓库"是个复合概念,AI 可能会尝试创建一堆乱七八糟的对象,最后场景完全没有可用性。我实测的结果是它创建了一个空旷的空间加几个随机立方体,毫无结构。
高效指令(拆解到工具能力范围内):
在 Blender 场景原点处创建一个长方体,尺寸为长 12 米、宽 1 米、高 8 米,作为第一排货架的主体框架。这种指令 AI 一下就能对应到create_mesh(primitive=box, scale=[12,1,8])之类的工具调用上,执行又快又准。
但是每条指令都这么写,人会被累死。所以要引入"结构化描述 + 关键参数"的写法。我后来总结出一个模板:
请在 Blender 中创建一个立体货架: - 货架尺寸:长 12m、宽 1m、高 8m - 层数:4 层 - 每层间隔:2m - 材质:金属灰色 - 创建完成后,在 X 轴方向复制 6 排,排间距 3m这段描述里包含了对象类型、几何参数、布局参数、材质要求,AI 完全可以据此规划出一系列工具调用。我把这种 Prompt 称为"结构骨架 + 参数填充",是目前用下来效率最高的协作方式。
3.3 实操:AI 建模的完整过程记录
下面记录一次比较完整的建模会话,给大家一个直观感受。
第一步:初始化场景。我在 Antigravity 会话里输入:
清空 Blender 当前场景中的默认对象,保留场景本身,然后创建一个地面平面,尺寸为 60m × 40m,材质设为浅灰色。AI 很快通过 MCP 调用执行了清空和创建操作。这一步很重要——Blender 默认场景里有立方体、灯光和摄像机,如果不先清空,后面建模会跟默认对象纠缠在一起,坐标对齐时会出各种诡异问题。
第二步:生成货架主体。我输入:
在坐标 (0, 0, 0) 处创建货架: 尺寸长 12m、深 1m、高 8m,分为 4 层,层板厚度 0.1m。 两侧立柱和每层横梁用深灰色金属材质,层板用浅灰色。 创建后选中货架的所有对象。AI 的处理方式是:先创建立柱(细长方体)、横梁(细长方体)、层板(薄长方体),然后把它们按坐标摆到正确的相对位置。我盯着 Blender 的视口,能看到对象一个接一个出现,整个过程不到一分钟。当然,AI 建的模型不会一开始就完美——比如层板可能没对齐,或者立柱高度算错。这时候不要着急改,先把整体结构看一遍,再用"修正指令"批量调整。我常用的一句是:
选中货架的所有子对象,检查 Y 轴方向的中心对齐情况,把有偏移的对象自动对齐到 Y=0 平面。这种"检查 + 对齐"指令,AI 能通过遍历对象、读取坐标、计算差值、调用set_location来执行。基本上两三轮对话就能把结构修正到位。
第三步:阵列排布库区。单个货架建好后,直接在指令里说明排布规则:
以第一个货架为基准,沿 X 轴方向复制 5 排,间距 3m;沿 Z 轴方向留出 5m 宽巷道。AI 会调用复制工具,再统一设置位置偏移。这里有个小技巧:让 AI 用"基于基准对象坐标"的方式计算新位置,而不是用绝对坐标——因为绝对坐标一旦前面建模型时坐标有偏差,后面整排都会跟着歪。我踩过一次这种坑,三排货架呈一条斜线排出去,排查了半天。
第四步:给场景加上细节。AGV 小车我用了简化的"扁长方体 + 四个小圆柱轮子"组合;货物托盘用"长方体 + 内嵌小箱体"表示;巷道地面我让 AI 用不同颜色的平面铺出行驶区域。这些细节不需要一次对话完成,分批来,每批只做一类对象,保证场景条理清晰。
整个建模会话下来,我大概跟 AI 交互了 10 到 15 轮,得到一个包含 20 多个对象的仓储场景。这个数量级的场景,如果在 Blender 里手动建模,怎么也得半天;用 MCP 这套流程,一个多小时能出初版。效率提升是实打实的。
4. 从场景到页面:导出与前端渲染
4.1 Blender 导出 glTF/JSON
模型建好了,数字孪生最终是要在网页上跑的,所以必须把 Blender 场景导出成 Web 能加载的格式。目前主流的选择是两个:
- glTF(.glb / .gltf):3D 场景的"标准交换格式",Three.js、Babylon.js 都原生支持,带材质、贴图、节点层级,适合复杂场景。
- JSON:如果场景比较简单,或者你需要跟业务数据做深度绑定,也可以直接导出对象清单、位置、尺寸等结构化 JSON,前端根据 JSON 动态重建场景。
Blender 导出 glTF 是内置功能,文件 > 导出 > glTF 2.0,注意几个设置:应用修改器、保留层级关系、材质嵌入。我建议导出.glb单文件格式,省得管理一堆外部资源。
如果要用 JSON 方案,可以直接在 Blender 里用 Python 脚本遍历场景对象,输出每个对象的名称、类型、位置、旋转、缩放。这一步也可以让 Antigravity 帮你写脚本——你只需要告诉它"导出一份包含所有对象名称和坐标的 JSON"。对,AI 建模的闭环最后又落到了 AI 写脚本上,工作流闭环了。
4.2 前端数字孪生页面怎么接
拿到模型文件之后,前端部分我用的是 Three.js,原因很简单:生态成熟、文档多、上手成本低。"3D 网页渲染"听起来吓人,但加载一个现成模型其实就几行核心代码:
import * as THREE from 'three'; import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'; const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000); const renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); const loader = new GLTFLoader(); loader.load('/models/warehouse.glb', (gltf) => { scene.add(gltf.scene); // 根据数据初始化相机位置,对准货架区域 }); function animate() { requestAnimationFrame(animate); renderer.render(scene, camera); } animate();这段代码做的事情很直白:创建场景、加载模型、启动渲染循环。真正复杂的是后面对接业务数据的部分,我会在"下篇"详细展开,这里只提醒一个关键点:模型对象的命名规范。你在 Blender 里给对象起名时,就要想好"前端要通过名字找到它"——比如rack_01_shelf_03这种风格。因为数字孪生页面上,你要点击某个货架弹出库存信息,前端代码必须能通过某种标识把 3D 对象和业务数据对应起来。如果你在 Blender 里起名随意,到前端就会变成一场灾难。
4.3 数据联动:让模型"活"起来
所谓"活",就是让场景跟真实业务数据产生关联。常见的数据联动维度有:
- 货位状态:某个货位有货、空置、锁定,通过颜色映射到模型对象上——有货显示绿色,空置显示灰色,锁定显示红色。
- 设备状态:AGV 的位置、速度、电量,实时驱动模型运动。
- 告警信息:温湿度超标、设备故障,在对应区域高亮闪烁。
实现思路也不复杂:前端拿到后端推送的数据,根据对象 ID 找到 Three.js 里的对应 Mesh,然后修改它的材质颜色、位置或旋转。比如:
function updateRackStatus(rackId, status) { const mesh = scene.getObjectByName(rackId); if (!mesh) return; if (status === 'occupied') { mesh.material.color.set(0x00ff00); } else if (status === 'empty') { mesh.material.color.set(0x999999); } }整个数字孪生系统的价值,恰恰体现在这里——三维模型只是"皮",数据联动才是"骨"。建模阶段做得足够规范,前端联动就会轻松很多。
5. 踩坑实录与排查手册
这两周里踩过的坑,我整理了比较典型的几个,按"现象—原因—解法"列出来。
5.1 Antigravity 代理执行中止/超时
现象:建模过程中,Antigravity 会话突然提示agent execution terminated due to error,或者某个长任务执行到一半就停了。
原因:最常见的有两种。一是建模指令涉及大量对象创建,MCP 调用次数多、耗时长,超过了代理单次任务执行的上限;二是 Blender 端因为某个未处理的异常崩溃或无响应,MCP 服务卡死,代理收不到返回结果。
解法:把大任务拆成小任务。比如"生成 10 排货架"拆成"先生成 1 排,验证通过,再复制到 10 排"。另外,在 Blender 端打开系统控制台(窗口 > 切换系统控制台)观察有没有报错,一旦脚本报错能第一时间看到。我后来基本养成了"每完成一个小步骤,就让 AI 输出一句完成状态"的习惯,方便定位卡在哪一步。
5.2 MCP 连接失败与令牌问题
现象:Antigravity 提示无法连接 MCP Server,或者偶尔连上了但调用工具失灵。
原因:令牌过期、地址填错、Blender 插件没启动,都有可能。还有一次是因为 WSS 地址里的 token 在网络传输时被某些中间环节拦截,连接被重置。这个问题在远程协作场景下尤其容易出。
解法:检查顺序是:Blender 插件是否在运行 → 打开的端口/地址是否有效 → Antigravity 里的 MCP Server 配置是否跟服务端一致 → 令牌是否有效。建议把 MCP Server 的配置集中管理,用一个环境变量维护地址和令牌,换环境时只改一处。另外,连接出了问题先重启 Blender 插件再试,比反复改配置省时间。
5.3 Blender 侧的典型问题
坐标对齐:AI 建模时偶尔会出现对象"歪"了——因为 AI 计算坐标时可能把小数精度丢掉,或者参考基准选错。我的办法是在关键步骤后加一句"检查所有对象是否对齐到网格",利用 Blender 的网格吸附功能。
材质不生效:AI 有时会创建材质但没应用到对象上,或者应用了材质但渲染看不到。别慌,检查 Blender 的渲染引擎是否切到了 Cycles/EEVEE,以及材质节点的连接是否正确。大多数情况是 AI 创建了材质但忘了赋给活动对象。
场景单位:Blender 默认单位是米,但 AI 偶尔会搞混尺寸单位。我遇到过把 12 米货架建成 12 个 Blender 单位(相当于 12 米)但把托盘建成了 1.2 米高的"巨箱"。解法很朴素:在 Prompt 里每次都明确写出单位,甚至写"所有尺寸以米为单位"。
5.4 快速排查速查表
| 症状 | 优先排查点 | 解法 |
|---|---|---|
| Antigravity 找不到 MCP 工具 | MCP Server 列表是否为空 / 配置是否加载 | 检查 Antigravity 扩展设置中的 MCP 连接开关 |
| Blender 插件启用了但连不上 | 端口被占用 / 插件未真正启动 | 重启 Blender,重置插件;检查防火墙 |
| 建出来的模型位置全乱 | 坐标基准不一致 / 没清空默认场景 | 先清空场景再建模,用相对坐标描述布局 |
| 渲染出来没有材质颜色 | 材质未赋给对象 | 选择对象,在材质属性里确认材质槽 |
| 代理执行报错终止 | 任务步骤过多、耗时过长 | 拆步执行,每步确认结果后再继续 |
6. 说点实在的:项目复盘的几个关键体会
项目做完回头看,这套 Antigravity + Blender MCP 的工作流,本质上改变的不是"建模"这个动作本身,而是人跟三维软件之间的协作方式。以前建仓储场景,人得亲手去拉每一个立方体;现在人只需要描述需求、审核结果,动手的是 AI。
但我必须说几句泼冷水的话。第一,AI 建模的质量上限,目前还达不到"精雕细琢"的水平。复杂曲面、精细贴图、动画绑定这些,直接让 AI 做成功率不高,需要人介入很深。所以我推荐的定位是"AI 负责搭框架、出初版、做重复性排布,人负责定规范、审模型、补细节"。这跟写代码是一样的——AI 写 CRUD 很快,但架构设计还是得人来。
第二,命名规范是这件事的隐形咽喉。如果你打算做数据联动的数字孪生,从建模第一天开始就要定一套对象命名规范。货架叫rack_01,托盘叫pallet_01,AGV 叫agv_01,层级关系用前缀表达。别觉得这是小事,我见过太多项目到最后前端联动时,因为模型对象名乱成一团而返工。
第三,Prompt 模板要沉淀。不要把好东西留在会话历史里,把常用的指令模板整理成 Markdown 文档,下次直接复用。我现在的习惯是在项目仓库里维护一个prompts/warehouse_modeling.md,记录各种已验证的指令写法。这个文件本身也是可以让 Antigravity 读取的,相当于把自己的经验喂给了 AI。
最后,关于这套工作流还能往哪走,我目前正在试的方向是:把仓储场景跟实时业务数据打通,让 Antigravity 根据最新库存数据"按需改模型"——比如某个货位的货物卖完了,AI 自动在数字孪生场景里把对应托盘隐藏并更新货位状态。这件事在传统工作流里需要写不少代码,但在 AI + MCP 的架构下,可能只是一段描述的距离。等我把这块跑通了,再来填"下篇"的坑。