Antigravity + Blender MCP:AI驱动数字孪生仓储建模实战
最近在折腾3D智慧仓储数字孪生的可视化方案试了一圈工具之后最后把工作流定在了Antigravity Blender MCP这套组合上。简单说Antigravity 是目前很受关注的 AI 原生 IDEMCPModel Context Protocol是让大模型连接外部工具/数据的开放协议Blender 则是老牌开源 3D 建模软件。这三样东西串起来之后体验完全变了你不是在 IDE 里写代码让模型生成而是直接在对话里说“建一个 50 米长、30 米宽的仓库里面排 6 列货架”AI 会自己去调用 Blender 把场景真的建出来而且每一步都是可查看、可回退、可修改的。这篇文章是系列的上篇目标很明确先把“人 → Antigravity Agent → MCP Server → Blender 插件 → 3D 场景”这条链路彻底打通并且用一个智慧仓储的静态场景作为实战练手。适合对数字孪生、3D 可视化、AI Agent 编程感兴趣的开发者尤其是前端工程师和工业软件方向的从业者。如果你手里正好有一个数字孪生园区、智慧工厂或者仓储可视化项目这套流程可以直接搬过去用不用从零开始学建模。1. 方案选型为什么偏偏是 Antigravity Blender MCP1.1 先搞清楚数字孪生项目真正要什么数字孪生这个词这几年被喊得很多落到智慧仓储场景说白了就是做一件事把物理世界的仓库在虚拟空间里建一个“镜像”。这个镜像不能只是一个好看的三维模型它还得能挂上实时数据——比如哪个货架剩多少库存、AGV 当前在什么位置、哪个门正在装卸货。真正干活的时候这个三维镜像就是给人看的“可视化大脑”同时也是后端数据的一个空间容器。所以一套完整的智慧仓储数字孪生一般拆成四大块静态场景仓库建筑、地面、墙体、货架、输送线、出入口这些不常变化的几何体。动态实体AGV、叉车、托盘、货物位置和状态会不断变化。数据层WMS 库存数据、传感器数据、设备心跳数据通过接口/消息队列实时推送。展示层浏览器里的 3D 场景Three.js、Babylon.js 这类 WebGL 引擎以及大屏上的 2D 驾驶舱。这次“上篇”只做第一块静态场景。但怎么建静态场景恰恰是很多团队一开始就走弯路的地方——有人一上来就让美术用 Blender 手工建模模型漂亮是漂亮但改一个货架间距要改半天有人干脆用 Three.js 写代码生成倒是可控了但复杂场景的代码量会膨胀到难以维护。而我这次选 Antigravity Blender MCP 的核心逻辑就是想让 AI 替我做“代码生成 建模操作”这两件重复劳动我只需要描述意图、审查结果。1.2 MCP 到底是什么为什么对 3D 流程这么重要MCP 是 Model Context Protocol 的缩写也就是模型上下文协议。它的目标非常朴素让大模型用统一的方式去调用外部工具和数据源就像给 AI 装了一堆“插头”。你可以把它理解成一个 USB-C 接口标准——以前每个设备都要各自的充电线现在大家都按同一个规范做接口一个插头通吃。放在我们的场景里MCP 带来一个质的改变AI 不再是只能输出代码文本的“嘴炮选手”而是能直接操作软件工具的“手”。在传统工作流里你让 AI 生成一段 Blender Python 脚本还得自己复制到 Blender 里执行如果脚本报错又要复制错误信息回去继续问来回折腾好几轮。而通过 MCPAntigravity 里的 AI Agent 可以直接调用 Blender 里暴露出来的 MCP 工具创建一个立方体、移动一个物体、改一个材质过程就像人在操作 Blender 一样。这个过程是实时的AI 每执行一步Blender 视口里就会立刻多一个物体。MCP 的架构也不复杂一共三层Host承载 AI 的宿主程序这里是 Antigravity。ClientHost 内嵌的 MCP 客户端负责和 Server 通信。Server本地或远程的一个服务进程对外开放一批工具。Blender MCP 插件扮演这个角色。通信方式有 stdio标准输入输出和 Streamable HTTP/WebSocket 两种。本地开发我建议用 stdio 方式拉一个 Python 进程简单稳定如果你的 Blender 跑在另一台机器上才需要考虑网络方式。这次全部用本地方案少引入一个变量出问题也好排查。1.3 对比其他方案我踩过的坑和最终取舍在定稿之前我把市面上的主流路线都试过一遍这里直接说结论省得你们再走一轮。第一类方案是纯 Three.js 代码生成。优点是前端能直接消费实时性好缺点很明显——复杂几何体比如货架、输送线、机械臂用代码拼非常痛苦一个货架要十几个 Box 组合还得手动算坐标改一次布局调半天。适合 Demo 演示不适合正经项目。第二类方案是传统 Blender 建模 手工导出。美术或工程师建好模型导出 glTF/GLB前端加载。这路线优点是可交互原型好看但问题在于模型和业务数据是割裂的每个物件都要单独命名、整理层级结构甚至要在前端做二次坐标映射。更关键的是迭代慢需求一变模型要重新导出。第三类就是我现在用的 Antigravity Blender MCP。AI 既写逻辑又能直接操作 Blender建出来的场景天然就是“结构化”的——每个物体有名字、有坐标、有父子关系导出的时候这些元数据都保留着前端拿到直接就能用。而且 Blender 本身就是开源生态里建模能力最强、Python API 最完整的工具之一以后要加动态机械臂、复杂曲面它都扛得住。所以说到底这套方案解决的不只是“谁来建模”的问题它顺便把“模型如何跟业务数据关联”的坑也填了一部分。2. 环境搭建Antigravity、Blender 和 MCP 插件的一次性配置2.1 版本选择不要图新稳定优先先说 Blender。我建议直接装Blender 4.2 LTS不要追最新版。原因很实在MCP 这类社区插件更新速度往往跟不上 Blender 的发版节奏LTS 版本的 Python API 更稳定插件兼容性讨论也更多遇到问题搜得到答案。Blender 官方安装包自带 Python 运行环境所以大多数情况下不需要单独装 Python这一点对小白特别友好。Antigravity 这边更简单它就是桌面应用去官网下载对应操作系统的安装包装完登录账号即可。这里有个细节Antigravity 目前更新比较勤如果你装了旧版本遇到 Agent 行为异常或者 MCP 面板不显示先别急着怀疑配置把 IDE 更新到最新版往往就好了。我遇到过不止一次“MCP 连不上更新完就正常”的情况。2.2 Blender MCP 插件安装与启动这一步是整个流程的地基。社区里流传的“Blender MCP”插件是开源项目核心思路是在 Blender 里跑一个 WebSocket 服务MCP Server 通过这个 WebSocket 往 Blender 发指令。安装路径大致如下打开 Blender进入“偏好设置”Edit → Preferences。切到“插件”Add-ons标签页点右上角“安装”Install。选中下载好的插件 zip 包启用它。启用后到 Blender 的 Scripting 工作区会看到插件的启动入口运行一次即可。插件会在后台启动 WebSocket 服务。插件启动后注意看 Blender 的系统控制台或者插件面板上打印的端口信息。这个端口很关键MCP Server 默认就用这个端口连 Blender。一般默认值就是插件的固定端口我的习惯是每次启动后扫一眼控制台输出确认 WebSocket 已经成功 listen 再继续下一步。注意插件启动 WebSocket 服务时Windows 系统的防火墙可能会弹窗询问是否允许 Python 监听端口一定要点允许否则后面连不上别怪我没提醒。MacOS 如果需要授权也一并放行。2.3 Antigravity 侧接入 MCP ServerBlender 那边就绪之后轮到 Antigravity 这边。打开 Antigravity 的 MCP 配置入口添加一个新的本地 MCP Server通常填两项启动命令和参数。因为我们用的是本地 Python 脚本方式所以command指向你的 Python 解释器args指向 Blender MCP 提供的 MCP Server 脚本路径。不同系统的 Python 路径不一样Windows 下可能是C:/Users/xxx/AppData/.../python.exeMac/Linux 下往往是/usr/bin/python3或者虚拟环境路径。如果你不确定直接在终端里执行which python/where python查一下。配置完保存让 Antigravity 重启一下 MCP 客户端。正常情况下 MCP 面板里会看到 Blender MCP 显示“已连接”并列出插件暴露出来的工具列表。看到工具列表就说明链路已经通了——AI 已经具备操作 Blender 的能力。提示如果 Antigravity 的 MCP 面板里看不到工具最常用的排查动作是“重启 Antigravity 再新建一个对话”。MCP 工具列表是在对话上下文创建时快照的旧对话不会自动同步新工具。另外提一句有些 MCP Server 支持通过 URL 连接远程服务配置面板里会有“URL”选项。但本地开发完全没必要用远程走 stdio 本地进程方式响应快、好排查而且不会受网络波动影响。3. MCP 链路解剖一条指令从对话到 Blender 的完整旅程3.1 理解透 Host、Client、Server 三层的关系很多人在 MCP 配置上栽跟头根源是没有把三层角色搞清楚。我再打个比方Antigravity 像一个“指挥官办公室”AI 是里面的指挥官MCP Client 是办公室里的“接线员”MCP Server 是各业务部门的“办事员”Blender 插件则是车间里的“操作工”。你给 AI 说“在原点建一个立方体”指挥官的思考结果是需要调用某个“创建物体”的工具。这时候接线员Client就把这个请求按 MCP 协议打包传给办事员Server。办事员接到需求翻译成 Blender 里的 Python API 调用再通过 WebSocket 下达给操作工Blender 插件。操作工干活返回结果“立方体已创建位置(0,0,0)”。这条结果再原路返回到 AI 那里。理解这个链路对排查问题特别有帮助。比如 AI 说了“我调用了创建工具”但 Blender 里什么也没出现那问题多半出在后半段——MCP Server 和 Blender 之间的 WebSocket 断了。再比如 AI 直接说“我没法调用工具”那问题多半出在前半段——Antigravity 和 MCP Server 之间的 stdio 通道有问题。3.2 Blender MCP 暴露的核心工具清单每个 Blender MCP 插件暴露的工具略有差异我这里以本地装的那版为例说几个高频工具基本能覆盖 90% 的场景搭建需求工具名作用关键参数create_object创建基础几何体type立方体/球体/圆柱/平面等、name、locationtranslate_object平移物体object、x/y/z 坐标rotate_object旋转物体object、x/y/z 旋转角scale_object缩放物体object、x/y/z 缩放比例select_object选中物体object namedelete_object删除物体object nameset_material设置材质object、颜色/金属度/粗糙度apply_modifier添加修改器object、modifier 类型、参数duplicate_object复制物体object、数量、偏移get_object_info查询物体信息object nameexport_scene_json导出场景 JSON输出路径我的实测感受是create_object、translate_object、set_material这三件套用得最频繁一个仓库场景几乎就是这三样堆出来的。apply_modifier里的阵列修改器Array Modifier也非常香生成一排货架、一列托盘就靠它AI 只需要指定数量和间距剩下的重复劳动全部交给修改器。3.3 AI 工具调用背后的“思维链”实际用下来AI 通过 MCP 操作 Blender 的节奏不像人那么“自由”它更像一个谨小慎微的实习生——每次只做一件事做完就汇报。比如你要建一个长 50 米、宽 30 米的仓库地面它不会一步到位而是先创建一个平面再通过缩放工具设置尺寸或者创建时直接带参数。每一步都会打印一句日志“已完成创建平面尺寸 50x30”。这个特征对使用者来说其实是好事因为它让你有机会在困境中干预。AI 建错了一个柱子位置你不用撤销重置重来直接跟它说“把那个柱子往右挪 2 米”它就会调用translate_object去微调。这种“对话纠偏”的能力才是这套工作流比起传统建模最顺手的地方。不过也要提醒一句AI 对几何尺寸的理解有时候会“想当然”你说“5 米高的货架”它可能在 Blender 里给你设置成 5 个单位而 Blender 默认一个单位等于 1 米所以这里没问题但它对“货架层板厚度 0.1 米”这类小尺寸经常忽略需要你盯着结果发现比例不对就及时提出来修正。4. 实战从空场景到智慧仓储静态模型4.1 第一步用自然语言生成仓库主体环境全部打通之后就是重头戏了。打开 Antigravity新建一个对话我第一句指令是这样下的“在原点创建一个 50m x 30m 的平面作为仓库地面颜色设为浅灰色然后在四周建一圈围墙高度 5m厚度 0.3m颜色浅蓝色。”稍微等几秒就能看到 Blender 视口里刷刷刷地出现了地面和四面墙。这里有个小技巧指令里带上尺寸单位AI 会更容易正确换算 Blender 的世界单位。如果你只说“大一点”它就会随便给你拉一个大平面最后还得返工。我实测下来的体会是尽量一次只让 AI 做 3~5 个操作节点太多容易中途卡住或者理解偏差。地面和围墙这种属于“低风险操作”可以一次性给但到了货架、AGV 路线这种复杂环节最好一个指令一个指令来每步确认。4.2 第二步货架阵列与托盘布局仓库主体出来之后继续下指令“沿着 Z 轴正方向在仓库内部生成 4 列货架每列 8 组每组货架长 2.4m、宽 1.2m、高 2.8m货架间距 3m货架颜色设为深蓝色。”这句话里包含了货架的几何尺寸、排布数量、间距和颜色。AI 会调用create_object创建一组货架再用apply_modifier做阵列。这里我建议你观察一下它用的是“阵列修改器”还是“循环复制”两种做法最终效果接近但修改器的方式占用内存更小模型也更好调整。如果 AI 用了复制你可以提示它“改用 Array Modifier”它对这类修正指令一般都能理解。托盘和货物的生成也很简单“在每个货架底层放一个托盘托盘尺寸 1.2m x 1m x 0.15m棕色托盘上放两个白色货物箱尺寸 0.5m x 0.4m x 0.4m。”这一步会让场景瞬间变得丰满起来。这里引出一个关键习惯给每个物体规范命名。虽然 AI 会自动生成名字比如 “Cube.001”“Cube.002”但这种名字对后期数据绑定是灾难。我在生成后就追加了一条指令“把所有货架物体重命名为 Shelf_列号_组号所有托盘重命名为 Pallet_列号_组号所有货物箱重命名为 Box_列号_组号_层号。”有了这个命名规范后面做数字孪生数据绑定时前端就能用Shelf_1_3这种 ID 直接关联后端的货架库存数据省掉一大坨映射逻辑。这一步强烈建议不要跳过它决定了模型能不能当“业务容器”用。4.3 第三步AGV 模型与路径示意仓储场景没有 AGV 总觉得缺了灵魂。让 AI 生成一辆简模 AGV“创建一个 AGV 简模底盘是 0.8m x 0.6m x 0.2m 的深灰色立方体四个轮子用半径 0.1m 的圆柱体顶部加一个 0.5m x 0.4m x 0.1m 的银色托盘。”这几步会让 AI 创建一堆零件并摆好位置。简模就行数字孪生项目里最重要的不是单个设备的细节精度而是它的位置、方向和运动逻辑。真正的设备外观后期可以替换高模但简模阶段必须把“占位尺寸”和“运动关系”定义准确。AGV 路径也是可以用 MCP 生成的。我让 AI “用曲线工具画一条折线从仓库门口到三号货架作为 AGV 路径”。AI 会在场景里创建一条 Curve 路径我们再用一个细圆柱体沿路径生成就能看出路线。虽然这个示意非常简单但已经可以支撑后续做 AGV 巡线动画——只要让前端读取这条路径的点位坐标把 AGV 模型沿着轨迹移动即可。4.2 节和 4.3 节做完整个仓储场景的骨架就活了。我在这里强烈建议你时不时让 AI 执行一次export_scene_json或者你直接问 AI“现在场景里一共有多少物体列出来”。这样做有两个作用一是确认场景规模防止 AI 复制出过量物体导致卡顿二是把导出的 JSON 存个历史版本后面改崩了可以直接回滚场景。4.4 第四步导出 JSON 与前端衔接准备Blender MCP 插件一般都提供导出 JSON 或 glTF 的能力。我们的最终目标是在浏览器里渲染所以导出两个东西场景 glTF/GLB用来在 Three.js 里直接加载渲染保留材质和层级。结构化 JSON记录每个物体的名称、类型、世界坐标、尺寸、父节点关系给前端做业务逻辑关联用。这里我说一下 JSON 导出的经验。默认导出结果通常是一个大数组里面每个物体都有基础属性但格式未必刚好满足前端需求。我一般是保存导出文件后再让 AI 写一个小脚本做格式转换“把导出的 JSON 转成我需要的格式按楼层分组每个物体输出 id、name、position、rotation、scale、type、parent 字段存成 scene_data.json。”这一步相当于给数字孪生项目做了一套数据层约定。前端 Three.js 加载这个 JSON 后可以根据type字段自动把不同颜色的材质映射到 Mesh 上也可以根据name字段里的Shelf_1_3去监听后端数据更新。前端这块我多说一句Three.js 加载 Blender 导出的模型最容易踩的坑就是坐标系。Blender 默认是 Z 轴向上Three.js 默认也是 Y 轴向上不对Three.js 是 Y 轴向上所以导出的 glTF 会由官方转换器自动处理通常没什么问题。但如果你直接用 JSON 里的坐标去摆物体就要注意是否要做轴系转换Blender 的 Z 要映射到 Three.js 的 Y。这一步如果你不处理好场景在浏览器里大概率是横躺或者翻转的。5. 常见问题与排查技巧实录5.1 Antigravity 登录和运行时报错这套流程里Antigravity 本身也可能出幺蛾子。最常见的是两类报错一类是登录态丢失表现是访问 MCP 配置页或者启动 Agent 时提示 403。这种情况大概率是登录凭据过期或者 IDE 版本太旧。我的处理方式是退出账号、更新到最新版、重新登录基本都能解决。更新完如果还出现缓存导致的诡异行为在设置里清除一下缓存数据再重启。另一类是 Agent 执行中断报错信息类似 “agent execution terminated due to error”。这个报错看着吓人但其实九成是 MCP 工具调用超时比如 AI 调用了 Blender 插件操作一个巨复杂的阵列Blender 卡顿了一下没及时返回。处理方式是先简化指令减少阵列数量、降低细分面再重试如果反复出现就把 Blender 场景保存后关掉重开把内存释放掉。5.2 MCP 连接上了但 AI 就是不动手有一种离奇的场景Antigravity 的 MCP 面板里工具列表都能看到但 AI 死活不调用工具只给一堆文字建议。这多半是对话上下文已经“污染”了——早前某次工具调用失败留下的错误日志让 AI 犹豫要不要再试。我把这种状态叫做“AI 手软症”。我的处理办法很粗暴新建一个对话重新描述需求。反正场景已经有一部分了新对话里直接说“在现有场景基础上继续”不需要重头开始。如果新建对话还不行重启 Antigravity 并确认 Blender 的 WebSocket 保证在监听状态基本就能治好。5.3 Blender 插件里的 WebSocket 断连在长时间操作后最容易出的问题是 WebSocket 连接断开表现是 AI 那边说“调用完成”但 Blender 里毫无反应且重新调用几次都无效。这个时候不要盲目重复指令去 Blender 控制台看一眼是不是报Connection closed或者 WebSocket 端口没了。我的习惯是启动 Blender 插件后就不要再去动 Scripting 面板更不要把那个脚本重跑一遍。重跑会导致端口被重复绑定反而可能触发冲突。正确操作是切到 General 工作区正常建模聊天如果断了就回到 Scripting 面板看错误信息必要时重启插件进程。5.4 模型命名与中文乱码陷阱Blender 的物体名支持中文但导出到 Web 端处理时很容易出现编码问题尤其当 JSON 是 UTF-8 之外编码时前端再解析一遍就可能变乱码。我建议场景里所有物体、材质、集合都坚持用英文命名业务中文含义放在 name 的注释字段里。这个习惯在数字孪生项目里极其重要——你总不希望关键资产标识在浏览器里显示成“Shelf 1”变成“æ¶åˆŠç‰© 1”这种鬼东西。5.5 排查速查表现象可能原因优先操作Antigravity 提示 403登录过期/版本过旧更新 IDE 并重新登录Agent 中途执行失败MCP 调用超时/场景过大简化指令重启 Blender 释放内存MCP 工具不显示配置后未重启会话重启 Antigravity新建对话AI 不调用工具上下文错误/“手软”新建对话继续现有场景Blender 无反应WebSocket 断连/端口变化到 Blender 控制台确认服务状态导出 JSON 中文乱码编码不一致统一使用英文命名浏览器里场景倾斜轴系未转换检查 glTF 导出选项/手动轴映射6. 我的实战心得与下篇方向这几周把 Antigravity Blender MCP 的工作流跑下来最直接的体会是AI 建模并不是要取代建模师而是把“重复搭建”这件事的边际成本打到了几乎为零。我搭建这个仓储场景真正花在“和 AI 沟通”上的时间大概是一个下午而同样的场景用传统建模怎么也要一两天还得在 Blender 和代码之间来回切换。但我也必须说这套方案目前还不是什么都能干。Blender MCP 对基础几何体的控制很顺手对材质、灯光、UV 这类偏美术向的操作AI 的掌控力就弱一些。想做照片级渲染场景还是得人工介入精修。另外长对话里 AI 对“当前场景已有的物体状态”的记忆会变淡所以我习惯每隔一段时间就让它get_object_info总结一次当前场景或者直接导出 JSON 快照保持上下文同步。还有一个小技巧分享给各位每次工作前先让 AI 把目标场景拆成一个任务清单。比如“我这个仓库要建地面、墙、货架、托盘、AGV、路径”它会把你说的粗糙需求细化成步骤然后你逐条让它执行。这比一股脑把所有需求塞给一个大指令要可靠得多因为 AI 一条指令塞太多需求经常会在中途把某个细节忘掉。下篇我会继续做完整套智慧仓储数字孪生的动态部分把导出的 JSON 接入浏览器端的 Three.js 渲染打通实时数据推送——包括库存数量变化时货架颜色渐变、AGV 沿路径运动、设备异常时闪烁告警。到时候才算真正把“数字孪生”这四个字落到实处。上篇先把地基打好模型在 Blender 里能快速改、快速导出、快速对前端交付这一层如果做扎实了后面的动态数据联动就是水到渠成的事。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →