ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

Antigravity+Blender MCP:自然语言驱动的3D数字孪生场景搭建实战

Antigravity+Blender MCP:自然语言驱动的3D数字孪生场景搭建实战 最近两周我一直在折腾一套工作流用 Antigravity 作为云端 AI 开发环境通过 Blender MCP 把自然语言直接翻译成 Blender 里的建模动作。目标很明确就是用这套组合快速搭建一个 3D 智慧仓储数字孪生场景而不是手动一点点拉方块、摆货架。这篇文章是系列的上篇先把静态场景搭建和 MCP 链路讲透数据接入部分留到下篇。适合正在做数字孪生、仓储可视化项目或者单纯想让 Blender 建模流程“长点脑子”的开发者。不需要你有多深的建模底子但最好知道一点 Python 和场景对象的基本概念后面理解数据绑定会轻松很多。1. 场景价值与需求拆解1.1 数字孪生不只是“长得像”很多项目把数字孪生做成了宣传片模型漂漂亮亮但库里存货量变了画面上一点反应都没有。这不是数字孪生这是 3D 效果图。真正的数字孪生核心是回答两个问题现在发生了什么接下来会发生什么。放在智慧仓储场景里货架不是摆设库位不是装饰AGV 小车更不是用来渲染转圈的。模型的尺寸、朝向、命名、层级都得能跟 WMS/WCS 系统的数据对接上。这就意味着你在建模阶段就要开始想数据的事不能等模型做完了再亡羊补牢。我之前吃过亏一开始把所有货架合并成一个整体 Mesh后期想单独高亮某个库位根本拆不回来只能返工。所以现在我做数字孪生场景第一条铁律就是“对象命名即字段设计”每个货架、每个库位、每条路径在建模阶段就必须有独立的身份。1.2 智慧仓储场景需要哪些要素一个可用的智慧仓储数字孪生场景一般分四层环境层地面、墙体、立柱、消防分区、出入口。这一层解决空间基准。存储层货架、料箱、库位、巷道。这是仓储的核心实体。设备层AGV、传送带、机械臂、充电桩、操作台。信息层库位状态、设备状态、路径规划线、告警区域。听起来要素很多但真正建模时大部分对象都是重复的——同样的货架重复几十排同样的库位重复几百个。这种重复工作正是 AI 建模最擅长的地方。手动做一遍再阵列复制也行但用自然语言告诉 AI“生成一个 10×4 的货架矩阵每个货架 5 层”它能直接给你写出带参数的函数想改层数就改层数这才是把建模效率提上来的关键。1.3 为什么选 Blender 而不是 Unity经常有人问做数字孪生为什么不直接用 Unity 或者 UE我的答案很简单看你的输出目标是什么。Unity 和 Unreal 的强项是实时交互应用适合做复杂的游戏逻辑、角色控制和客户端程序。但它们的建模能力很弱你想在编辑器里快速拉一排货架操作路径绕得人头疼。Blender 则完全相反它是个建模利器Python API 非常成熟几乎所有界面操作都能用脚本复现而且支持直接导出 glTF/GLB 给 Web 前端用。还有一点很重要Blender 的 MCP 生态越来越活跃已经有现成的社区方案能让 LLM 通过 MCP 协议直接驱动 Blender。这意味着 AI 不只是给你生成一段代码而是真的能把代码执行在 Blender 场景里你甚至能看着模型一点点长出来。这种“所见即所得”的反馈比让 AI 给你讲半天理论有用得多。所以我的选型思路很直白建模用 Blender数据展示部分根据项目需要再选 Three.js、Unity 或者自研引擎。Blender 是内容生产工具不是最终交互载体别让“引擎选型”绑架了建模环节的效率。2. 工具选型解析Antigravity 与 Blender MCP 各是什么2.1 Antigravity 到底是干什么的Antigravity 是一个面向 Agent 开发的云端 AI 编程环境。简单理解它就像一个长在云端的“IDE AI 助手”合体里面可以写代码、跑命令、开 Web 预览还能创建 Agent 任务让 AI 自己去读项目、改文件、执行操作。你不是在跟一个只会聊天的机器人对话而是在指挥一个能实际干活的远程开发者。我把它用在数字孪生项目里最大感受是“闭环”两个字。以前我在本地写 Blender Python 脚本写完还要手动打开 Blender 粘贴执行哪里报错还要来回切窗口。现在 Antigravity 的 Agent 能直接调用外部工具把命令发到 Blender执行结果再传回给我整个链路是通畅的。有一点要提醒Antigravity 的 Agent 模式很多新手容易搞混。做 Blender MCP 这类外部工具调用时一定要选中支持 MCP server 的 Agent不要用普通聊天模式否则它根本没有调用外部服务的能力你发指令它只会“教你如何操作”。2.2 Blender MCP 怎么把 AI 和 Blender 连起来MCP 全称是 Model Context Protocol是一套专门给 AI 模型做“工具调用”的标准化协议。打个比方MCP 是 AI 世界的 USB 接口设备厂家只要按这个接口标准实现服务任何支持 MCP 的 AI 客户端都能直接插上使用。Blender MCP 就是一个运行在 Blender 内部的插件服务。安装启用后它会在本地启动一个 MCP server向外暴露一组工具创建物体、编辑网格、添加材质、切换视角、执行 Python 脚本等等。你这边 AI 需要建一个立方体Agent 就调用 create cube 这个工具去执行Blender 场景里会立刻出现一个立方体。这个设计的厉害之处在于AI 不需要“预先学习”Blender 内部所有 API它只需要通过工具列表了解当前环境支持什么操作然后组合这些工具去完成复杂任务。你让它生成一排货架它会自动把“创建立方体”“设置尺寸”“复制变换”这些基础操作串起来最后跑出一个完整的建模流程。2.3 为什么这套组合能提升搭建效率手动建模一个标准仓储库区包括地面、货架、库位、路径熟练的建模师也得忙活半天。用 Antigravity 加 Blender MCP 呢大部分时间花在想清楚 prompt 怎么写以及微调 AI 生成的参数上。但我得说实话这套组合不是用来替代建模师的它是用来消灭“重复劳动”的。货架摆位、库位命名、按规则生成矩阵这些机械工作交给 AI 非常合适但场景的整体审美、材质氛围、特殊构型设计还是人的判断力更可靠。聪明的用法是你用自然语言描述意图让 AI 把 80% 的重复部分做出来然后你上手精修剩下 20% 的关键细节。另外一个隐藏好处是可追溯性。手动建模的操作记录不会留在任何日志里但 AI 生成的所有脚本都可以存档、回放、复用。这意味着你下次接一个新仓库项目不再是从零开始拉模型而是基于上次的 prompt 和脚本模板快速变形。这套积累下来效率提升是指数级的。3. 实操一环境准备与 MCP 链路打通3.1 安装清单与版本选择开始之前先确认你手上有这些东西Blender推荐 4.2 LTS 或更高版本。太老的版本对 MCP 插件支持不好。Antigravity 账号网页端登录即可MCP 配置在 Agent 的设置面板里。Blender MCP 插件从官网开源仓库下载 zip 包。可选本地 Python 3.10用于后期写数据转换脚本。版本问题上我有一次踩过坑当时图省事用了 Blender 3.6MCP 插件装是装上了但启动服务一直报错查了半天才发现插件要求 Blender 4.x 以上的 API。所以我的建议很直接直接用最新 LTS 版别在一棵老树上耽误工夫。3.2 安装 Blender MCP 插件并启动服务安装步骤不复杂照着做就行打开 Blender进入Edit → Preferences → Add-ons。点击右上角下拉菜单选择Install from Disk选中下载好的插件的 zip 包。安装完成后在搜索框输入“MCP”勾选启用 Blender MCP Server 插件。在 3D 视图按 N 键打开右侧面板找到 MCP 选项卡。点击Start Server插件会启动一个本地服务面板上会显示端口号通常类似8000或者3200以你实际看到的为准。这里有个细节很多人忽略启动服务后Blender 窗口不要一直最小化到系统托盘某些系统会把后台 Blender 的 Python 执行挂起导致 MCP 工具调用超时。我后来把 Blender 窗口固定在副屏的半屏位置让它在后台保持活动状态问题就消失了。3.3 在 Antigravity 中配置 MCP server接下来去 Antigravity 那边接上这个服务。路径一般是Settings → Agents → MCP Servers → Add Server。关键参数就两个Transport 选streamable-http这是 MCP 当前主流的 HTTP 传输方式。Endpoint 填http://127.0.0.1:8000/mcp端口替换为你插件面板上实际显示的数值。填完后点击链接。状态变成绿色就已经连通了。如果一直报连接失败优先检查三件事Blender 里的 MCP 服务是不是还在运行、端口是不是被防火墙拦了、Endpoint 末尾的/mcp路径有没有漏掉。3.4 连通性验证先生成一个立方体链路通没通不要急着建仓储先生成一个最基础的立方体验证。在 Antigravity 的 Agent 对话里输入请输入 MCP 工具在 Blender 中新建一个边长为 2 的立方体命名为 test_cube放在世界坐标 (0, 0, 1)。正常情况下Agent 会调用建网格工具Blender 场景里立刻出现一个立方体并且名字正确显示为 test_cube。这一步通过说明整条链路已经打通。如果没反应去 Blender 的 Info 面板和 Antigravity 的执行日志里看报错把报错贴回给 Agent让它修正即可。我遇到过一次比较诡异的情况工具调用执行成功但对象没出现后来发现是插件默认把新对象加到了隐藏的 collection 里在 Outliner 里勾选显示就出来了。4. 实操二用自然语言搭建智慧仓储孪生场景4.1 写 prompt 之前先做模型规划很多人在这一步直接输入“帮我建一个仓库”然后得到一堆乱七八糟的物体。问题不是 AI 能力不够而是你自己都没想清楚场景的规格。我习惯先列一个模型清单哪怕很粗略模块数量规格说明地面124m × 16m厚度 0.1m浅灰色货架20每排 10 组共 2 排每组 4 层层高 0.8m库位160每个货架层不对称命名按组号_层号_位号AGV 路径2主干道两条用曲线表示出入库操作台2放置在场景两端把这些数字想清楚prompt 里直接给出来AI 就不至于瞎猜。你也可以在 prompt 最后加一句“如果参数不合理请指出并给出建议”让 AI 帮你把把关。4.2 第一步地面与坐标系我给 Agent 的指令是这样的在 Blender 原点生成一个 24×16×0.1 的矩形平面作为仓库地面材质设为浅灰色法线朝上同时在场景中保留默认的坐标系参考线。AI 生成的脚本核心大概是下面这样import bpy bpy.ops.mesh.primitive_cube_add(size1) plane bpy.context.object plane.scale (24, 16, 0.1) plane.name floor_main # 设置材质浅灰色 mat bpy.data.materials.new(namefloor_mat) mat.diffuse_color (0.85, 0.84, 0.82, 1) plane.data.materials.append(mat)注意生成后要做一步“应用缩放”也就是按 CtrlA 应用变换。不然你后续在上面放货架导出的坐标全是带缩放的数据对不上。这个细节很多人忽略等接数据的时候才发现坐标全乱了。4.3 第二步批量生成货架与库位这是整个场景的核心环节。我不会让 AI 一个一个去建货架而是让它写一个参数化函数一次性生成全部货架矩阵。我给的提示词是请写一个名为 create_rack 的函数参数包括row_index、col_index、levels。货架宽度 2.4m、深度 1.2m、每层层高 0.8m立柱用扁立方体表示层板用水平薄板。生成时自动命名 rack_row_col_level并且把每一层的五个库位分别命名为 slot_row_col_level_01 到 _05。这个 prompt 一会儿AI 就会生成类似下面的脚本框架import bpy def create_rack(row_index, col_index, levels4): width, depth, level_h 2.4, 1.2, 0.8 # 创建立柱 for corner in [(0, 0), (width, 0), (0, depth), (width, depth)]: bpy.ops.mesh.primitive_cube_add(size1) post bpy.context.object post.scale (0.08, 0.08, level_h * levels) post.location (col_index * 3 corner[0], row_index * 2.5 corner[1], level_h * levels / 2) post.name fpost_rack_{row_index}_{col_index} # 创建层板 for level in range(levels): bpy.ops.mesh.primitive_cube_add(size1) board bpy.context.object board.scale (width, depth, 0.04) board.location (col_index * 3 width / 2, row_index * 2.5 depth / 2, level * level_h 0.6) board.name fboard_{row_index}_{col_index}_{level} for row in range(10): for col in range(2): create_rack(row, col, levels4)当然每个人的脚本细节会有差异关键是你要让 AI 把库位 slot 命名完整暴露出来因为这个就是后面数据绑定的连接点。如果脚本里没有生成 slot 对象就追加指令让它把每层每列的库位用极薄的半透明平面补上。这一步跑完Outliner 里会多出几百个对象这就是数字孪生场景的基本骨架。4.4 第三步AGV 路径与交通流示意AGV 路径不需要真的去建一台复杂的小车先用曲线把路径画出来后面做动画和轨迹回放时就有了骨架。我给 Agent 的指令是在仓库地面上方 0.05m 的位置沿 Y 轴方向画两条贯穿仓库的主路径曲线用贝塞尔曲线颜色用亮黄色在路径交叉口位置放置空物体命名为 cross_point_01、cross_point_02。AI 通常会用 curve API 直接生成然后设置材质和管线粗细。这个做法的好处是路径本身是可编辑的曲线后续想调整路线只需要改控制点不需要推翻重来。如果项目需要更精细的 AGV 模型可以在这一步只建一个示意小车用几个基本几何体拼出车头、车体、托盘。但记住数字孪生场景里模型复杂度要克制能表达状态就行过分追求视觉细节反而拖慢渲染和数据交互。4.5 从静态模型到数据接缝场景建完之后千万不要直接把文件扔给前端。你需要为数据接入留好“接缝”。我通常做三件事所有对象应用变换确保旋转、缩放归一化。建立层级结构把所有仓储元素放进一个名为 warehouse_root 的 collection 下地面、货架、库位、路径分四个子 collection 管理。导出 glTF/GLB 前把不需要传输的辅助对象坐标系参考线、临时平面删掉或隐藏。这些工作看起来很琐碎但它们是下篇数据接入的地基。一个命名规范、层级清晰的模型文件接数据时能省下 80% 的调试时间。否则你前端拿到的模型库位 ID 和图层的字段对不上那不叫对接那叫灾难。5. 常见问题与排查技巧实录5.1 高频问题速查表折腾这套环境的过程中我遇到过不少问题挑几个典型的整理成一张表问题现象可能原因解决办法Antigravity 连不上本地 MCP 服务服务没启动或端口不一致回 Blender 面板确认 Start Server 状态比对端口号MCP 工具调用成功但场景无变化对象被创建到隐藏 collection查看 Outliner取消隐藏并手动归档到目标 collectionAgent 生成的脚本执行报错API 版本不匹配把报错贴回给 Agent要求按当前 Blender 版本重写脚本批量创建对象时 Blender 卡死单次执行操作过多让 AI 分批次创建中间加延时或分多次 function call创建的库位无法选中对象太小或叠加在其他物体内部用 Outliner 过滤选中或让 AI 调整尺寸和位置偏移导出后前端看到的位置偏移对象有未应用的缩放全选物体 CtrlA 应用变换后再导出5.2 真正值得说的避坑技巧第一个坑是对象命名。Blender 里的名称允许中文但 glTF 导出、前端绑定、数据库关联的时候中文命名很容易出编码问题。我一直用英文加下划线的命名规范所有库位都是 slot_开头所有货架都是 rack_开头简单而且稳。第二个坑是让 AI “批量执行”删除操作。我试过让 AI 把场景里的几百个临时平面一次性删除结果 Blender 直接无响应因为单次操作因为 undo 栈太大把内存吃满了。后来我让 AI 先生成一张待删除对象列表给我确认再分组删除每次只删 50 个流程正常多了。第三个坑是关于 MCP 会话的稳定性。Blender 这边服务启动久了偶尔会出现连接超时。我现在的习惯是如果长时间不操作就把 MCP server 停掉用之前重新 start不要一直挂着不管。这跟维护 Web 服务是一个道理会话越干净问题越少。还有一个经验想单独说一说让 AI 生成脚本时可以要求它输出脚本中包含详细的注释和参数说明而不是直接执行。因为数字孪生场景是要长期迭代的你不可能每次都靠对话生成代码总有需要手工调整的时候。没有注释的参数化脚本回头看就像天书。写在最后这套 Antigravity Blender MCP 的工作流我最直观的感受是它把需求到模型之间那块硬骨头啃碎了一半。以前改一个货架排布要从建模师到工程师来回沟通现在直接在 Agent 对话里改两个参数就行其余交给脚本去跑。下一篇我会重点写库位状态可视化和 AGV 路径动态回放也就是把 WMS 的实时数据灌进这个场景让模型真正“活”起来。如果你在搭建过程中卡住了不要怀疑自己的动手能力先按第 3 章的链路顺序从头检查一遍端口、服务状态、MCP transport 配置几乎覆盖了 90% 的问题。这个流程我实测可以复现用一个晚上把它跑通后面你建模的速度会完全是另一个层次。
RELATED READING

延伸阅读

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