ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Antigravity+Blender MCP:用自然语言搭建智慧仓储数字孪生场景

Antigravity+Blender MCP:用自然语言搭建智慧仓储数字孪生场景

我前段时间在推进一个智慧仓储可视化项目,原本的计划是先在 Blender 里手动搭出一个仓库场景,再交给前端团队用 Three.js 加载。结果第一天我就遇到了一个尴尬的问题:建模太慢。货架要一个格子一个格子复制,AGV 小车要自己拼轮子和车身,光是调整布局就耗掉了我大半天。后来我试着把 Antigravity 和 Blender MCP 接在一起,让 AI 直接对 Blender 下指令建模型,整个流程瞬间就变成了"对话式建模"。这期先写"上篇",讲清楚怎么把环境搭起来、怎么让 AI 在 Blender 里帮你生成智慧仓储数字孪生的基础场景,以及这中间我踩掉的那些坑。

这套组合的核心价值其实只有一句话:用自然语言替代手工建模和重复劳动。如果你正在做数字孪生、智慧园区、物流仓储可视化,或者只是一个想用 Blender 但学不会复杂建模的人,这篇文章应该能给你一条非常新的路子。

1. 为什么是"Antigravity + Blender MCP"而不是传统建模流程

1.1 传统 3D 数字孪生搭建流程的痛点

过去我们做数字孪生场景,通常绕着三种方案转:

  • 方案 A:全员上 Blender 手工建模。这种方案的老大难问题是"周期不可控"。一个仓库场景,不算精细贴图,光是布局和摆放就能拖两三天。等你建完,需求又变了。
  • 方案 B:直接用 Three.js 写几何体。几何体全靠代码手撸,基本上是在用编程的方式做苦力活。写一个货架,要 BoxGeometry 组合几十次,属实折磨。
  • 方案 C:到模型平台找现成资源。能找到遮挡物和面板,但永远找不到和你仓库布局一致的货架,最终还得改模型。

说到底,痛点集中在三处:建模速度慢、场景还原度低、数据绑定麻烦。而 MCP 的介入,恰好把"建模速度"问题解决了一大半。

1.2 MCP 协议让 AI 长出了"手"

MCP 的全称是 Model Context Protocol,模型上下文协议。你可以把它理解成一个万能插座:AI 应用是电器,工具软件是电源,MCP 则是标准化的插头接口。过去 AI 想操作 Blender,只能通过"生成一段 Python 代码,你复制到 Blender 里运行"这种半自动方式;现在 Blender 侧装上 MCP Server,Antigravity 这类 AI 编程环境作为 MCP Client,双方握手之后,AI 就能直接调用 Blender 里的工具函数,比如 create_cube、add_material、set_location,全程不需要你手动复制运行脚本。

从体验上说,原来你是在"翻译":把自己的想法翻译成自然语言,AI 翻译成代码,你再手动把代码丢给 Blender。现在这一步"丢给 Blender"也被 AI 接管了,所以整个链路变成"你说,AI 做,Blender 实时更新"。

1.3 这套组合适合谁

我先说清楚适用人群,避免大家走弯路。

  • 做数字孪生项目的人:智慧仓储、智慧园区、智慧工厂这类场景特别吃"快速出 3D 预览"的能力,这套工作流能让你在几分钟内搭出粗模。
  • 不熟悉 Blender 的前端/后端开发者:你不需要背 Blender 快捷键,也不需要理解各种多边形拓扑,只要会用自然语言描述自己的需求。
  • 有一定 Blender 基础但受够了重复劳动的人:让 AI 批量生成货架、创建地砖、布置灯光,你只负责审美和最终调整。

当然,这套方案也有边界,我会在后面的踩坑章节详细讲。但至少在当前阶段,它已经足够让我抛弃"手动建模"这个惯性动作了。

2. 环境准备:从 Blender 插件到 Antigravity 的 MCP 客户端配置

2.1 把 Blender MCP 插件装进 Blender

这个环节最容易劝退人,因为社区里 blender-mcp 项目形态一直在变,装法不止一种。我按自己实测可行的路径来说。

目前社区里维护得比较好的 blender-mcp 项目,大多会提供一个可下载的插件包(zip),以及一个服务端依赖。安装过程分成两步:

  1. 打开 Blender,进入编辑 > 偏好设置 > 插件。
  2. 点击"从磁盘安装",选中下载好的插件 zip 包。
  3. 安装完成后,在插件列表里搜索 mcp,勾选启用。
  4. 在 Blender 的侧边栏(按 N 键呼出)找到 MCP 面板,点击启动 MCP 服务器。

启动之后,Blender 通常会在本机的 9876 端口开一个 WebSocket 服务。你可以打开浏览器访问http://127.0.0.1:9876或者在终端里用netstat -ano | findstr 9876检查一下端口是否在监听,以此确认服务已经跑起来。

2.2 在 Antigravity 里添加 MCP Server

Antigravity 这类 AI 原生开发环境,一般会在设置里提供 MCP 或 Tools 的配置入口。打开之后,点击添加本地 MCP Server,需要填写三个关键字段:

配置项填写内容说明
Nameblender-mcp给服务起个容易识别的名字
TransportWebSocket / http取决于你启动的服务类型
URL / Commandws://127.0.0.1:9876本地 WebSocket 服务地址

填完之后保存,Antigravity 会尝试连接。如果连接成功,你会在可用的工具列表里看到一系列 blender 相关的工具函数,比如blender.create_mesh、blender.add_material、blender.move_object等等。看到这些函数出现,说明 MCP 握手已经完成。

2.3 验证连通性:让 AI 先建一个立方体

配置完成之后,我建议先跑一个最小化验证,别急着建整个仓库。在 Antigravity 的对话窗口里输入:

连接到 Blender,在原点位置创建一个 2x2x2 米的立方体,命名为 test_cube,材质设置为红色。

正常情况下,你会看到 Antigravity 开始调用 MCP 工具,Blender 视口里同步出现一个红色立方体。如果这一步成功,说明整条链路是通的。如果失败,先回看两个地方:插件是否真的启动到了 MCP 服务状态,以及 Antigravity 里填的 URL 是否多打了空格。

这个最小验证特别重要,它把后面所有复杂指令的风险都提前暴露了。我们团队后来给新人做的第一条入门指令也是这个。

3. 用自然语言驱动 Blender:智慧仓储场景从零搭建

3.1 建模之前先对齐坐标系与单位

很多人第一次用 AI 建模就翻车,原因不是 AI 能力不行,而是你没讲清楚"尺寸"。Blender 的默认单位是米,但仓储方案里大家习惯讲"毫米"或"厘米"。你如果说"建一个高度为 130000 的货架",AI 大概率会把你当成报错处理,因为它不知道这个数字代表毫米还是米。

我的建议是:在对话的第一句话里就锁定单位制。比如明确说:

本场景单位使用米。货架尺寸:长 1.2 米、宽 0.4 米、高 2 米。AGV 尺寸:长 0.9 米、宽 0.6 米、高 0.3 米。后续所有指令都以米为单位。

这相当于给 AI 灌入了一个"场景 UOM(计量单位)"上下文。只要在同一个对话会话里,它后续生成的代码会持续遵守这个约定,不会中途跑偏。

另外,坐标系也要提前约定。仓储场景里我习惯把原点设为仓库西南角,X 轴正方向为从西到东,Y 轴正方向为从南到北。这样后续做数据绑定时,AGV 坐标可以直接对标地图坐标,省掉一堆换算。

3.2 先让 AI 生成仓库地面和边界

场景尺寸定了,就可以让 AI 生成第一层结构了。我用的指令是:

在 Blender 中创建一个长 60 米、宽 30 米的平面,命名为 ground,放在世界原点。然后沿着平面四边生成高度 0.15 米、宽度 0.2 米的边界线,用浅灰色材质,作为仓库边界。

这一步看起来简单,但它能验证 AI 对"布尔运算"和"多对象管理"的理解。正常执行后,Blender 里会出现一个铺满地面的大平面,四周有边界条。这里有一个小细节:地面不要用 Blender 默认的 Light 材质,否则后面打光时会显得特别塑料。我会让 AI 单独建一个"地面材质",把粗糙度调到 0.8 左右,基础色用偏灰的白色,这样后期调试灯光时才不容易过曝。

3.3 货架、库位、AGV、传送带:分步建模

接下来进入正题,构建核心装备。我建议不要一次性让 AI 生成全部资产,而是分模块来。

货架单元:我让 AI 生成一组由立柱、横梁和托盘组成的货架单元,指令长这样:

创建一套货架单元:4 根立柱,高度 2 米;每根立柱间距 1.2 米;配套 3 层横梁,每层间距 0.5 米;横梁上放置托盘,托盘尺寸为长 1.1 米、宽 0.4 米、高 0.1 米。整个货架命名为 rack_unit_01。

AI 通常会把这组结构拆分成立柱、横梁、托盘三个对象,并放到一个 Group 或 Collection 里。之后我只需要再复述一句"沿着 X 轴复制 20 个 rack_unit_01,间距 1.5 米",AI 就能基于第一个单元复制出整排货架。这一步做完,仓库的仓储主体就出来了。

AGV 小车:AGV 属于可移动设备,比货架复杂一点。我让 AI 生成车身、驱动轮、万向轮和传感器挡板,同时给车身做一层深蓝色材质,轮子用黑色橡胶材质。AI 在这里一般会生成一个完整 mesh,再在对象属性里标注is_agv = True,方便后面做数据驱动动画。

传送带:传送带的建模相对简单,主要是滚筒。我直接让 AI 生成一个长度 8 米、宽度 0.5 米的传送带,滚筒用圆柱体阵列完成,我会要求它"滚筒数量 20 个,直径 0.08 米"。

整个过程大约 20 分钟就能把粗模全部搭完。放在过去,这个量级至少需要一下午。

3.4 材质与灯光:让场景不"塑料"

粗模完成后,场景看起来肯定是灰蒙蒙的,这时候就该让 AI 处理材质和灯光了。

我一般会给 AI 几条明确的材质指令:

  • 地面:基础色 RGB(0.85, 0.85, 0.82),粗糙度 0.8。
  • 货架立柱:金属材质,金属度 0.7,粗糙度 0.3,基础色偏深灰。
  • 托盘:木质塑料质感,基础色 RGB(0.55, 0.4, 0.2)。
  • AGV 车身:哑光蓝色,金属度 0.2。
  • 传送带滚筒:金属度 0.9,给足高光。

灯光方面,建议不要问 AI"你觉得怎么打好",而是直接给方案:一个位于仓库上方的日光灯阵列,模拟工业照明;一个温暖的偏置灯,模拟装卸口的光线;关掉默认的世界光源,避免场景发灰。

给场景添加 3 个灯光:一个从上方照亮整个仓库的日光灯,色温 6500K;一个偏黄的点光源放在东北角,强度 500W;关闭世界光。

执行完之后,Blender 视口应该会有明显的光影层次了。如果你想更精准,还可以让 AI 在每排货架上方生成一组细长形的矩形灯,既当照明又当场景装饰。

4. 让 3D 场景"活"起来:把仓储数据映射成对象属性

4.1 为什么直接建几何体还不够

如果你只是要一个"看得过去"的静态展示图,到上一章就可以停了。但数字孪生和 3D 展示的区别在于,数字孪生需要把真实世界的业务数据绑定到 3D 对象上。仓库里每个库位的库存、每个 AGV 的实时位置、每条传送带的运行状态,都应该是"可查询"的,而不是一个固定死的模型。

在 Blender 里,这项工作靠的就是自定义属性(Custom Properties)。任何一个对象都可以挂上任意键值对,比如stock_id: "A-01-03"、stock_quantity: 42、temperature: 23.5。这些属性既能被 Blender 内的动画驱动,也能导出给外部前端加载。

4.2 让 AI 批量给货架绑定属性

手工给每个货架加属性太累了,但我只需要对 AI 说:

给所有 rack_unit 对象添加自定义属性,包括 rack_id(格式 A-01)、level_count(整数)、current_stock(初始值 0)。然后在靠近传送带的第 10 个货架上,把 current_stock 改为 35。

AI 会生成一段遍历场景对象的 Python 脚本,通过 MCP 执行在 Blender 里,一次性把所有货架属性挂好。这一步完成之后,你的场景就不再是"纯几何体"了,它变成了一份"带数据的 3D 数据库"。

4.3 用 CSV/JSON 批量更新对象状态

真实项目里,仓储数据通常来自 WMS(仓库管理系统)或 IoT 设备,数据格式一般是 CSV、JSON 或者 MQTT 推送。我目前的处理方式分成两步:

第一步,把数据文件放到项目目录里,然后在 Antigravity 对话中明确告诉它文件路径;第二步,让 AI 写一个导入脚本,把每条数据映射到对应对象属性上。

比如 CSV 长这样:

rack_id,stock_quantity,temperature A-01,42,23.5 A-02,18,24.1 A-03,67,22.8

AI 可以生成如下效果:

读取项目目录下的 stock_data.csv,根据 rack_id 找到 Blender 中的对应货架对象,更新 current_stock 和 temperature 属性。如果找不到对象,在脚本日志里输出告警。

比起"手动开 CSV、对着模型逐个改属性",这已经不是省时间的问题了,而是从源头上规避了人为漏改。

4.4 导出 glTF/JSON 交给前端

到这一步,你手里已经有一个带数据的 Blender 仓库场景了。要让前端也能用,我一般让 AI 把场景导出为 glTF 格式,同时单独导出一份 JSON,把对象的自定义属性和位置、旋转信息都存进去。

指令:

将当前场景导出为 warehouse.glb,位置在项目目录。同时导出一份 warehouse.json,记录所有货架和 AGV 对象的 name、rack_id、current_stock、position、rotation。

glTF 文件负责承载模型外观,JSON 负责承载业务数据。前端拿到这两份文件后,先用加载器渲染模型,再通过业务数据去更新柱状图表、热力图或者 AGV 动画坐标,整个数字孪生框架就有了第一版骨架。

5. 踩坑记录:连接失败、生成冲突、性能爆炸

5.1 MCP 连接失败最常见的几个原因

我在搭环境的第一天就遇到过连不上。如果你也遇到同样情况,按这个顺序排查:

  • 插件是否真的启动了 MCP Server。Blender 侧边栏里那个开关很容易被忽略,启动之后面板上通常会出现 "listening on 9876" 的字样。
  • 端口是否被占用。我用lsof -i :9876查过一次,发现一个残留进程占着 9876,Blender 启动时提示失败,但 UI 没有明显报错。
  • Antigravity 更新之后 MCP 配置丢失。我碰到过一次 Antigravity 客户端升级后,之前添加的 MCP Server 全部失效,需要重新配置。这不是 bug,是很多本地工具链的常态,更新后养成"重建工具链"的习惯就好。
  • WebSocket URL 协议填错。某些版本要求ws://,某些要求http://,如果你填错,客户端会显示连接超时。

我用一个表格帮助大家快速定位:

现象可能原因处理方式
连接超时插件未启动 server回到 Blender 面板点击启动
连接被拒绝端口被占用释放 9876 端口后重启
工具列表为空URL 协议错误从 ws:// 改为 http:// 或反向
更新后失效客户端升级重置配置重新添加 MCP Server

5.2 AI 生成的建模代码冲突与清理

AI 建模型时最容易出的问题是"命名冲突"。如果你连续发指令让 AI 建 20 个货架,它每一次生成的脚本可能都会先尝试创建rack_unit,如果场景里已有同名对象,脚本就会报错或者直接把旧对象覆盖掉。

解决办法是:每轮生成前,让 AI 先执行一次"清理同名对象"操作。比如:

在建模前,先删除场景中所有名称以 rack_unit 开头的对象,再重新生成。

我建议把这个指令放在每个建模模块的开头,作为固定套路。另外,不要在一个指令里让 AI 同时建 20 个货架然后移动它们,它经常会因为计算顺序问题把坐标搞乱。更稳的方式是:先生成第一个基准单元,确认位置和尺寸没问题,再复制阵列。分步走虽然对话多几轮,但几乎不会返工。

5.3 大场景性能优化:面数爆炸不可不防

把整个仓库建完,你会面临一个新问题:面数太多,Blender 视口卡成 PPT。尤其是你让 AI 生成"每层横梁 + 托盘 + 圆柱滚筒"这类高密度结构之后,面数直接起飞。

我给你三个亲测有效的优化策略:

  • 用实例化复制代替独立网格。货架复制时,让 AI 用 Collection Instance 或关联复制,而不是把每个托盘都单独创建网格。这样多次复用同一份网格数据,内存占用会低很多。
  • 减少不必要的高复杂度模型。传送带滚筒不需要每个都单独高精度,可以用简化圆柱体 + 阵列修改器,显示效果几乎一样。
  • 给场景加 LOD(多细节层次)。让 AI 在 Blender 里为每个对象生成低面代理版本,导出 glTF 时保留高模在主摄像机范围内,远距离自动切低模。

一开始我没有加任何实例化,仓库里几十个货架直接让 Blender 内存涨到了 4GB 以上。改成实例化复制之后,内存占用掉了近三分之二。这个经验值得你从一开始就带入建模流程。

5.4 安全方面:只允许 MCP 在本地工作

最后提一个很容易被忽略的点。MCP 的便利性背后也有风险,因为 Blender 一旦被 AI 控制,就相当于它有权限在你的电脑上执行代码。虽然主流实现都会在本地端口上运行,不会主动暴露到公网,但你自己要克制住"把端口映射到公网以便远程访问"的冲动。

我的建议是:MCP Server 只在本机运行,绑定127.0.0.1,不要绑定0.0.0.0;用完场景后及时关闭 MCP Server;如果要在团队协作中共享模型,宁可把 Blender 场景文件传给队友,也不要直接开放服务端口。

6. 下一步:把这份场景变成真正的数字孪生

写到这里,"上篇"的工作流已经基本打通了:Antigravity 通过 MCP 控制 Blender,完成了智慧仓储场景的搭建、材质灯光处理、业务数据属性绑定,以及 glTF+JSON 导出。这套流程跑通之后,我再也不想回到手动建仓储场景的老路了,尤其是批量导入库存数据并映射到货架属性,原本至少两个小时的返工,现在一句指令就能解决。

但目前的产出还只是"静态数字孪生"。AGV 路径动画、库存实时刷新、IoT 传感器数据回传、以及和前端 Three.js 项目的联动,这些还没有覆盖。下一步我会基于这份场景继续往下走,重点做三件事:一是把 Blender 里对象位置与业务坐标系统一,让 AGV 可以根据真实轨迹运动;二是通过 WebSocket 或轮询接口把实时数据灌进场景,观察属性变化;三是把 glTF 场景接入数字孪生前端框架,做到用户视角下的 3D 浏览与交互。

这些内容我计划放在"下篇"里写。如果你正在做相关项目,也可以先把自己的场景文件备份好,等数据同步机制做出来之后再回头看,这套"对话式建模"方案的最大价值,其实在于让 3D 场景的迭代速度跟得上业务变化的速度。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进