
做仓储智能化项目久的人最头疼往往不是算法和数据库而是怎么在方案评审时让客户“眼睛一亮”。你跟客户讲“双深位货架能提升库容30%”他脑子里其实只有一个模糊的货架轮廓你贴一张平面布局图他还得自己脑补空间关系。直到我试着把 Antigravity 的 AI 编程能力、Blender MCP 协议接口和 3D 数字孪生 思路揉在一起用自然语言让 AI 在 Blender 里直接“盖”出一座智慧仓储场景整个方案汇报的画风才彻底变了。这篇先写“上”半部分从零把环境和链路跑通把一座自动化立体仓库的 3D 场景模型生成出来。适合正在做数字孪生项目、供应链可视化、仓储方案售前演示的朋友参考也适合那些刚接触 MCP、想看看 AI 到底怎么操作三维软件的开发者。1. 先说清楚为什么智慧仓储非要先有一个“看得见摸不着”的 3D 场景1.1 仓储数字孪生到底在孪生什么很多人把数字孪生理解成“做一个好看的 3D 模型”这其实是个误区。智慧仓储场景里的数字孪生至少要在同一个虚拟空间里同时容纳三类信息静态结构库房墙体、立柱、屋面、消防通道、货架系统、输送线动态实体AGV 小车、叉车、拣选机器人、操作人员数据属性货位编码、库存数量、托盘状态、出入库任务、温度湿度等传感数据。这三类信息缺一不可。如果只有模型没有数据那就是个空壳如果只有报表没有空间坐标那也没法做空间优化和路径规划。数字孪生的核心价值是让业务数据和空间位置能实时对应让“某货位库存发生变化”这件事在三维场景里变成可观测的视觉反馈。1.2 传统做法的问题在哪我早期做仓储可视化主要有三条路都不太顺。一是用 3ds Max 或 C4D 手工建模。精度高是没错但搭建一个中型仓库场景的成本实在太高——光是按实际尺寸摆几百个货架、给每个托盘做材质就得专门配一个建模师干好几天而且后续布局一改模型基本得返工。二是用 Unity/Unreal 搭场景。引擎能力强但团队里总得有会 C# 或蓝图的人数字孪生项目的重心常常被带偏到“做游戏”而不是“分析业务”。三是直接用 Three.js 在网页里写。前端 3D 不是不能做但每次要调整模型结构、加材质、改布局都得写代码沟通成本很高。1.3 AI Blender MCP 这条路的实际优势我最终选择的是“Antigravity 负责理解和规划Blender 负责建模和渲染MCP 协议负责让两者对话”的组合。Blender 本身是免费开源软件内置了完整的 Python APIbpy天然适合程序化建模MCP 则提供了标准化的接口让 AI Agent 能直接调用 Blender 里的工具函数。实测下来以前需要几天完成的仓储场景初稿现在可以压缩到一两个小时而且后续改布局、调参数直接对话就行不需要再打开建模软件一点点拖拽。这套组合还有一个隐藏收益因为 AI 是通过代码化的 bpy 命令建模所以模型里的每个对象都带着明确的命名和坐标参数可以批量导出成数据文件这正好为数字孪生后续的数据联动打了底子。2. 拆解协作链路Blender MCP 到底是怎么把自然语言变成模型的2.1 MCP 协议给 AI 装上了“操作真实软件的手”MCPModel Context Protocol可以理解成 AI Agent 的通用接口标准它解决了“AI 模型只能输出文字、不能直接操作外部软件”的问题。打个比方AI 大脑本身像人的思维系统它知道怎么拧螺丝但手上没有工具MCP 就是一套“外接机械臂”让 AI 可以根据你的指令去控制真实的软件对象。在 Antigravity 里这套机制体现得很直观Agent 在规划任务时会自动检查当前项目有没有配置 MCP Server如果有它就会把可用的工具函数纳入自己的“工具箱”并在执行步骤中按需调用。整个过程对用户几乎是透明的我们只需要在配置文件里声明“这边有个 Blender MCP 服务”剩下的事 Agent 自己会完成。2.2 Blender 那边的服务端是怎么工作的Blender MCP 并不是一个魔法插件它的工作方式可以拆成三层服务层Blender 里加载一个 MCP 插件启动后在本机监听 WebSocket/HTTP 端口默认通常是 9876并通过 SSE 通道对外提供服务协议层Antigravity 里的 MCP 客户端通过 SSE 连接拿到工具清单按标准 JSON-RPC 格式向 Blender 发送调用请求执行层每个工具函数本质上是 Blender Python APIbpy的封装。比如工具列表里有个create_box它背后执行的就是bpy.ops.mesh.primitive_cube_add()和bpy.context.object.scale这类指令。换句话说你对着 Antigravity 说“在原点创建一个 2 米见方的立方体”最终落到 Blender 里的其实是 Agent 自动生成并执行的一段 bpy 脚本。我刚开始使用时常有一个错觉以为 AI 像人一样在 Blender 界面里操作。其实不是它是纯脚本化的——这反而更好因为脚本可复制、可回放、可批量修改比 GUI 手工操作更适合工程化。2.3 为什么用 Blender 而不是直接用 Three.js 或 Unity我也被问过很多次既然最终展示都在网页端为什么不直接用 Three.js 生成场景我的答案是“建模和展示是两个阶段”。Blender 的优势在于“编辑”能力强材质、灯光、相机、物理尺寸、命名规则都能在可视化界面里快速调整而且导出 glTF/GLB 格式非常方便。Three.js 的优势在于“展示”能力轻量、能嵌进网页、支持实时交互。所以我的习惯是用 Blender AI 做场景生产用 Three.js 做前端渲染用 MCP 做两端的数据桥梁。Unity 则更适合重度交互应用比如需要大量 C# 脚本驱动的复杂模拟但团队协作成本和启动成本都比 Blender Three.js 这条链路高。3. 环境准备Antigravity、Blender 与 MCP 插件的三件套配置3.1 软件清单和版本匹配开始之前先确认你的计算机环境。我实践下来比较稳的组合是Antigravity IDE选择最新稳定版因为 MCP 客户端能力在持续更新旧版本偶尔会出现工具清单加载不完整的问题Blender建议 4.x 版本。Blender 的 Python 解释器版本会随主版本变化blender-mcp 插件通常对 Python 3.10/3.11 支持最好blender-mcp 插件从官方 GitHub 仓库获取 .py 文件注意选择支持你 Blender 版本的 release。另外提醒一句Blender 和 Antigravity 的安装目录不要有中文路径和空格否则部分插件的 bpy 模块加载会出莫名其妙的问题。这个问题我踩过两次后来统一把工具链安装在 D:\Tools 下的纯英文路径里。3.2 Blender 端插件安装与启动步骤很简单但有几个细节值得说清楚打开 Blender进入“编辑 → 偏好设置 → 插件”点击右上角“安装”选择你下载的 blender-mcp.py 文件安装后搜索 mcp勾选启用插件在 3D 视图右侧边栏找到 MCP 面板点击“Start MCP Server”看到输出日志里出现127.0.0.1:9876之类的监听地址说明服务已经起来了。这里最容易犯的错是启动服务器后有人会习惯性把 Blender 最小化去做别的事结果回来看日志发现连接断开了。Blender 在不同操作系统上对后台刷新有不同策略建议 MCP 服务器运行期间保持 Blender 窗口处于非最小化的可用状态虽然不一定每次都出问题但没必要冒这个险。3.3 Antigravity 端登记 MCP 服务器Antigravity 里添加 MCP 服务有两种主流方式我用的是命令行方式因为可复制性更强antigravity mcp add --sse http://127.0.0.1:9876/sse如果你更喜欢可视化配置也可以手动编辑项目目录下的 MCP 配置文件路径一般是.antigravity/config/mcp.json内容如下{ mcpServers: { blender: { type: sse, url: http://127.0.0.1:9876/sse } } }改完配置后必须重启 Antigravity让 MCP 客户端重新加载工具清单。重启后可以打开 MCP 面板确认 Blender 状态变成已连接并确认工具列表里能看到create_object、set_material、delete_object之类的函数。3.4 连通性验证先让它“画个正方形”配置完不要直接上复杂任务先做最小验证。我会在 Antigravity 的对话窗口里输入一句最简单的指令清空 Blender 当前场景然后在原点创建一个边长 2 米的立方体。正常情况下Agent 会调用 Blender MCP 的clear_scene和create_object工具几个动作之后Blender 视口里会出现一个立方体。如果这一步成功说明整条链路已经通了——接下来可以做任何事。如果这步就失败别急着调复杂项先按这个顺序排查Blender 的 MCP Server 是否还在运行Antigravity 里 MCP Server 是否显示已连接本机防火墙是否放行了 9876 端口端口占用情况可以用netstat -ano | findstr 9876查看。注意Antigravity 首次登录时有 Eligibility Check 环节如果遇到eligibility check failed或execution terminated due to error多数情况是网络链路不稳定或账号区域配置与当前网络环境不匹配。这种提示我遇到过好几次有时换个网络环境重试即可具体以官方文档说明为准不建议去修改一些非正常途径的配置。4. 实战上手用对话给 Antigravity 下达“盖一座自动化立体仓库”的任务4.1 任务前先定参数把业务语言翻译成建模语言AI 再聪明也架不住需求含糊不清。我在实操时一定会先把参数定成表格这既是给自己理清思路也是给 Agent 提供执行约束参数项设定值说明库房尺寸40m x 20m x 8m长宽高檐口高度货架类型双深位货架每排两列背靠背巷道共用货架单元10 列 x 6 层单排模式可按需求复制托盘位1200mm x 1500mm x 1500mm长、宽、高含货架层板厚度AGV 通道宽 1.8m单向通行宽度主干道宽 3.0m双向通行宽度单元坐标系仓库左下角为原点方便后续导出坐标数据这套参数分开看都不复杂但组合在一起就是一个可以用来跑最小业务闭环的“双深位立体仓库”初始模型。4.2 让 AI 先搭库房框架一步一步来我给 Antigravity 的第一批指令是创建库房结构。注意我不会一次性把所有需求都倒给 Agent而是分阶段下指令。原因很简单复杂任务里如果 Agent 中途出错拆解成小步骤更容易定位和修正。第一阶段指令示例请清空 Blender 场景把单位设为米。在坐标原点创建一个 40m x 20m x 8m 的箱体作为库房主体空间。箱体底部中心放在原点材质先给一个浅灰色建筑材质。Agent 通常会调用几个工具完成这步可能先用create_cube创建默认立方体再设置尺寸然后移动位置。每个动作都能在 Blender 视口里看到实时反馈这点比纯脚本调试直观太多。接下来我继续补细节在这个箱体内部沿 40 米长边两侧各创建一排立柱间距 5 米立柱截面 0.3m x 0.3m高度 7.5m。屋顶用稍微外延的薄板覆盖厚度 0.1m。这里有一个关键点你给 Agent 的坐标参考必须清晰。因为 Blender 的默认坐标系原点在场景中心0,0,0如果你说“放在角落”不同 Agent 的理解可能不一样。我习惯把仓库左后下角定为 (0,0,0)所有货架、通道坐标都从这个原点推出来逻辑上最不容易乱。4.3 自动化生成货架阵列不让 AI “手搓”一整天货架是仓储场景里的重头戏。如果让 AI 一个货架一个货架地搭建效率会很低。正确姿势是利用 Blender 的阵列复制能力把单排货架模型复制出整个分区。我的做法分两步。第一步让 AI 先做一个“标准货架单元”创建一个双深位标准货架单元宽 1.2m深 3m高 6m共 6 层。每层有两根横梁横梁截面 0.05m x 0.08m。货架立柱四角尺寸 0.08m x 0.08m。用金属材质。第二步用阵列复制生成多排货架把这个标准货架单元沿 X 轴方向复制 10 列列间距 1.4m形成一排。再把这一排整体沿 Y 轴方向复制 8 排排间距 3m双深位对背靠背并排两排货架之间留出背靠背操作空间。实测中Agent 会调用 MCP 工具里的复制函数或者直接在 Blender 里应用 Array 修改器。这里比较推荐用 Collection 实例Collection Instances而不是纯复制几何体因为几十个货架在 Blender 视口里如果都是独立网格会明显拖慢操作流畅度而实例化的好处是所有复制品共享同一个基础模型修改基础模型整批货架同步更新。4.4 给货架和托盘加上“身份证”命名规范数字孪生场景里模型对象命名不是小事。我在第一版踩过坑AI 生成了一堆货架名字全是Cube.001、Cube.002这种后面导出数据时完全分不清哪个货位对应哪个坐标只能重新命名浪费了大量时间。所以我在指令里会明确要求 Agent 按规则命名每个货架命名为 RACK_R{n}_C{c}其中 n 是排号c 是列号。例如第三排第四列货架是 RACK_R03_C04。每个托盘命名为 PALLET_R{n}_C{c}_L{level}例如 R03_C04_L02 表示第三排第四列货架第二层托盘。同时让 AI 按规则摆放货物在 RACK_R01_C01 货架的第 1 层放置蓝色托盘箱尺寸 1.2m x 1.5m x 1.5m货箱顶部留 0.1m 间距。这样生成完的模型对象名里自带坐标语义后面导出 JSON 做数据关联时可以直接用正则表达式解析货位编码无需额外维护一张映射表。这一步非常重要越早期做后期数据链路越省心。4.5 加入 AGV 路径、灯光和摄像机让静态模型“活”起来模型结构搭完之后我给场景加动态元素。先画一条 AGV 路径曲线创建一条 3D 曲线路径从仓库入口沿主干道到第一排货架区路径高度 0.1m表示 AGV 行驶路线。给路径一个橙色材质。有了路径后续就可以在这条路径上绑定 AGV 模型做动画。灯光和摄像机也很关键不然客户看到的模型是黑的。这一步同样可以交给 AI在仓库纵向四分之一高度位置添加两排矩形面光源色温 5000K功率中强。在仓库东南角 45 度方向添加一台摄像机朝向货架区镜头焦距 24mm。在 Blender 里打好灯光和摄像机是我做方案演示的习惯——不是为了出渲染图而是让客户在点开场景的第一眼就能看到“像样”的仓储空间而不是灰蒙蒙的线框图这对方案评审的观感影响非常大。5. 数字孪生的另一半模型如何与业务数据联动5.1 Blender 里的模型只是“壳”数据才是“魂”模型建完很多人觉得项目已经完成了大半实际上数字孪生才刚刚开始。Blender 本身不是一个适合面向客户持续运行的系统它的定位是“场景编辑层”。真实链路中的推荐做法是Blender 负责生成和维护三维场景然后导出标准格式给前端渲染前端再对接业务数据。5.2 用脚本导出 JSON 和 glTF打通数据链路这也是网民里经常搜到的“blender 如何导出 json”的标准解法。Blender 里可以用 bpy 脚本批量导出对象数据。我的导出逻辑如下import bpy, json racks [] for obj in bpy.data.objects: if obj.name.startswith(PALLET): loc obj.location dim obj.dimensions racks.append({ name: obj.name, x: round(loc.x, 3), y: round(loc.y, 3), z: round(loc.z, 3), w: round(dim.x, 3), h: round(dim.y, 3), d: round(dim.z, 3) }) with open(warehouse_pallets.json, w, encodingutf-8) as f: json.dump(racks, f, indent2, ensure_asciiFalse) print(fexported {len(racks)} pallets)这段脚本导出的是托盘的位置和尺寸后续可以按货位编码与库存表做关联。模型整体导出为 GLB 格式则可以直接用 Blender 的 “文件 → 导出 → glTF 2.0” 功能或者也可以通过 MCP 让 Agent 代为执行。GLB 适合直接丢给 Three.js 加载并通过对象名称统一控制。5.3 库存数据驱动模型状态变化的完整数据流我搭的最小闭环数据流长这样WMS 系统或仿真系统产生业务数据例如“货位 A-01-02 库存 120 件”后端通过 MQTT 或 REST API 推送这条数据到前端服务前端解析数据后根据货位编码找到 GLB 场景里对应的托盘对象模型托盘会按库存量变化材质颜色绿色库存充足黄色低库存红色空货位页面上的摄像机可以按预设视角快速切换完成从全局到局部的缩放聚焦。这条链路跑通之后方案演示就不再是静态的 3D 图片而是一个真正能反映业务状态变化的“孪生”场景。客户可以在浏览器里直接看到某个货位被占用、某个托盘被移走、AGV 在路径上运动。这套表现力比任何 PPT 动画都更有说服力。6. 我踩过的坑和值得继续深挖的方向6.1 实际操作中最容易翻车的几个点先说说我踩过的坑希望你能避开。第一Agent 任务描述太笼统导致“脑补”过度。有一次我让它“批量生成足够的货架”结果它一口气创建了 2000 多个独立网格对象Blender 直接卡死最后只能强杀进程。解决方案是量化明确写“复制 10 列、再复制 8 排”并且优先使用集合实例化替代独立对象复制。第二单位错乱。Blender 默认单位是米但仓库图纸上大家都说毫米。如果你在指令里写“托盘尺寸 1200x1500x1500”Agent 可能理解成 1200 米场景直接炸。正确做法是在所有指令里都带上单位如“1.2m x 1.5m x 1.5m”或先在 Blender 里把单位场景属性设置好。第三MCP 指令超时。当场景复杂度上来后Blender 单次执行某些操作可能超过 Agent 默认的等待时间。遇到超时我会把任务拆成“创建模型”、“设置材质”、“摆放位置”三个子步骤分别下指令同时降低每个批次的生成数量。第四Antigravity 偶发报错。比如前面提到的execution terminated due to error有时是因为任务上下文里混入了过长的得陇望蜀式指令Agent 在长链路执行中某个工具调用失败。这种情况下我会先让 Agent 停止当前任务再补充一句“只执行下一步”把 Agent 从“全盘规划”模式切换到“逐步执行”模式。6.2 性能优化场景大但不卡的三板斧数字孪生场景不是做一张静态渲染图用户要在浏览器里交互所以模型的三角面数和材质数量必须控制。我总结下来就三句话同材质网格尽量合并、重复结构全部实例化、远处模型用低面数替身。Blender 里有合并同材质物体的操作也可以用 modifier 简化高模。实例化这一步最关键所有货架、立柱、托盘都应该是某个基础对象的一个实例而不是复制出来的独立网格。这样导出的 GLB 文件体积能下降一半以上前端加载快很多。6.3 下一步从哪儿继续深挖说实话Antigravity Blender MCP 的生态还在快速迭代中很多插件还不算成熟但“用自然语言驱动三维场景编辑”这个方向我认为已经足够进入实际项目了。我接下来的计划是把三个方向做深一是接入 AGV 调度系统的真实路径数据让模型里的路径曲线跟着实时轨迹变化二是把仓储场景和 HTML5 前端彻底打通做成浏览器里可访问的数字孪生网站三是把 MCP 从 Blender 扩展到其他工具链比如在 Antigravity 里同时挂上数据库 MCP 和绘图 MCP让整个仓储方案从库容计算、布局图到三维展示全部自动化。这套组合实战下来我最深的体会是它并不是要让人不学建模而是把大量重复、机械的三维场景搭建工作交给 AI让人从“抠每一个立方体”里解放出来专注在布局逻辑、业务规则和数据模型上。如果你手头也有仓储、工厂或园区的数字孪生项目建议先按我上面的链路跑一个最小闭环一个库房、一排货架、一条 AGV 路径、一小段 JSON 数据。等这个闭环真实运转起来你自然会看到这套方案的增量价值在哪里。