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 ServerAntigravity 这类 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以及一个服务端依赖。安装过程分成两步打开 Blender进入编辑 偏好设置 插件。点击从磁盘安装选中下载好的插件 zip 包。安装完成后在插件列表里搜索 mcp勾选启用。在 Blender 的侧边栏按 N 键呼出找到 MCP 面板点击启动 MCP 服务器。启动之后Blender 通常会在本机的 9876 端口开一个 WebSocket 服务。你可以打开浏览器访问http://127.0.0.1:9876或者在终端里用netstat -ano | findstr 9876检查一下端口是否在监听以此确认服务已经跑起来。2.2 在 Antigravity 里添加 MCP ServerAntigravity 这类 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.8AI 可以生成如下效果读取项目目录下的 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查过一次发现一个残留进程占着 9876Blender 启动时提示失败但 UI 没有明显报错。Antigravity 更新之后 MCP 配置丢失。我碰到过一次 Antigravity 客户端升级后之前添加的 MCP Server 全部失效需要重新配置。这不是 bug是很多本地工具链的常态更新后养成重建工具链的习惯就好。WebSocket URL 协议填错。某些版本要求ws://某些要求http://如果你填错客户端会显示连接超时。我用一个表格帮助大家快速定位现象可能原因处理方式连接超时插件未启动 server回到 Blender 面板点击启动连接被拒绝端口被占用释放 9876 端口后重启工具列表为空URL 协议错误从 ws:// 改为 http:// 或反向更新后失效客户端升级重置配置重新添加 MCP Server5.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完成了智慧仓储场景的搭建、材质灯光处理、业务数据属性绑定以及 glTFJSON 导出。这套流程跑通之后我再也不想回到手动建仓储场景的老路了尤其是批量导入库存数据并映射到货架属性原本至少两个小时的返工现在一句指令就能解决。但目前的产出还只是静态数字孪生。AGV 路径动画、库存实时刷新、IoT 传感器数据回传、以及和前端 Three.js 项目的联动这些还没有覆盖。下一步我会基于这份场景继续往下走重点做三件事一是把 Blender 里对象位置与业务坐标系统一让 AGV 可以根据真实轨迹运动二是通过 WebSocket 或轮询接口把实时数据灌进场景观察属性变化三是把 glTF 场景接入数字孪生前端框架做到用户视角下的 3D 浏览与交互。这些内容我计划放在下篇里写。如果你正在做相关项目也可以先把自己的场景文件备份好等数据同步机制做出来之后再回头看这套对话式建模方案的最大价值其实在于让 3D 场景的迭代速度跟得上业务变化的速度。