最近在折腾智慧仓储数字孪生项目时我试了一套特别顺手的组合——Antigravity配合Blender MCP。简单说就是让AI Agent通过MCP协议直接控制Blender我只需要用大白话描述“仓库长什么样”Blender里就能自动生成对应的3D场景。这套链路对做数字孪生、3D可视化和物流仿真的同学来说价值很大。它能解决传统手工建模效率低、改布局成本高的问题尤其适合快速出原型和方案演示。这篇文章是上篇先把完整链路讲透环境怎么搭、MCP怎么连、Agent怎么自动建模、数据怎么导出给前端用。适合正在做3D智慧仓储、数字孪生园区的开发者、建模师和规划工程师参考。1. 项目思路拆解Antigravity Blender MCP能解决什么1.1 什么是MCP协议为什么这个组合适合数字孪生MCP全称Model Context Protocol模型上下文协议。你可以把它理解成AI Agent与外部工具之间的“通用插座”——原本每家AI平台连工具都要做私有接口现在大家统一用MCP这套标准只要两端都支持就能互相识别、互相调用。Antigravity是一款偏Agent形态的AI平台支持在浏览器里编排任务也能通过MCP连接本地或远程工具。Blender这边装上社区开源的Blender MCP插件后会启动一个WebSocket服务把Blender的场景操作能力暴露给外部。两边一对接Agent就能读取Blender场景里的对象列表、创建几何体、坐标变换、查材质甚至执行Python脚本。数字孪生项目为什么特别吃这套组合我自己的感受是数字孪生的3D场景有个特点“精度不用特别高但结构关系必须清楚”。智慧仓储里的货架、库位、通道、设备本质上是一堆规则几何体业务坐标。传统建模具象出来可能要手工摆几个小时用Agent生成只要几分钟。而且Prompt即配置仓库布局一改改两句话重新生成就行模型资产和业务逻辑能快速联动。1.2 传统数字孪生建模的痛点在哪我踩过传统3D可视化项目的坑最大的问题是“建模和代码脱节”。美术在Blender里花了两周建好一个园区模型导出GLB给前端前端加载后如果发现尺寸不对、坐标原点没对齐得回去找美术改来回沟通成本非常高。第二个痛点是参数化能力弱。仓储项目经常要调库位数、货架排布、通道宽度传统方式相当于每次拿一个静态模型去改改动一次要重新导出重新联调。而用AntigravityBlender MCP的方式场景是由代码和Prompt生成的尺寸、数量、名称都是有逻辑的可以随时调整重新生成。第三个痛点是物理和业务数据的衔接。数字孪生不只是好看还要把库存数据、传感器数据、设备状态映射到3D模型上。如果模型本身没有清晰的命名和坐标结构数据映射就无从下手。MCP链路里Agent生成的每个对象都遵循你定义的命名规则比如Shelf_R1_C2_L3这种结构化命名对后续数据绑定非常关键。2. 环境搭建把Antigravity和Blender MCP这条链跑起来2.1 Antigravity部署与浏览器扩展配置Antigravity本身是个平台型产品一般通过官网直接登录使用不需要本地部署。更常见的使用方式是配合浏览器扩展一起用扩展负责接管浏览器里的交互上下文这样Agent才能模拟人在页面上的操作流程。这里有个容易忽略的细节登录后要先到扩展的设置里确认“MCP连接”已经打开。这个开关藏得比较深我一开始没开结果Antigravity始终扫描不到本地服务还以为是插件装错了。打开后扩展会建立一个通道让Agent能访问外部MCP Server。另外Antigravity会校验账号资格网上很多人遇到Eligibility Check Failed这个通常是账号状态或者登录态的问题。处理办法很简单先退出登录清理浏览器站点缓存重新登录一次如果还不行换一个网络环境再试。不要一直卡在同一入口反复刷新很多时候是服务端对登录态的校验临时抽风。2.2 Blender MCP插件安装与WSS服务启动Blender MCP插件本身是个普通Python插件在Blender里安装并不复杂。具体步骤打开Blender进入Edit Preferences Add-ons。点击右上角的Install选择下载好的Blender MCP插件压缩包或.py文件。安装完成后在插件列表里搜索“MCP”勾选启用。启用后在插件偏好设置里确认WebSocket服务端口默认一般是9876或8765记住这个端口。插件启用后会立刻启动一个本地WebSocket Server状态栏会显示当前监听地址。这个地址就是后面Antigravity连接时要填的。我建议安装前确认Blender版本和插件是匹配的。目前社区版Blender MCP多数支持Blender 3.x和4.x但少数旧版本插件在4.2之后会提示运行环境不匹配。遇到这类情况优先去插件发布页看兼容矩阵别盲目下载最新版稳定压倒一切。2.3 MCP连接配置验证在Antigravity后台新建一个Agent项目进入MCP配置页面添加一个MCP Server地址填Blender插件暴露的WSS端点。WSS地址格式一般是这样的wss://your-mcp-endpoint/mcp/?token你的token如果你跑的是本地Blender地址通常是类似ws://127.0.0.1:9876的形式。一些在线Agent平台只接受WSS协议这时候需要把本地地址映射成带token的WSS地址配置时将token参数补齐。注意这类地址本质是一样的只是协议换成了TLS加密。填完地址点Connect如果配置正确状态会变成已连接。此时你可以直接在Agent对话框里问一句“当前Blender场景里有哪些对象”如果它能准确列出来说明链路已经通了。整个链路我画个通俗的类比Antigravity是“大脑”MCP协议是“神经”Blender是“四肢”。大脑下达意图神经传指令四肢执行建模操作最后把场景改成你想要的布局。3. 实操演示让Agent自动搭建仓储数字孪生场景3.1 Prompt怎么设计才不翻车很多人上手直接说“帮我建一个仓库”结果Agent生成的场景乱糟糟对象没有命名规则位置也不对。问题不在Agent而是Prompt信息量不够。我的做法是把Prompt当成一份写给实习生的工单所有尺寸、数量、坐标、命名规则都写清楚。比如我实际用过的Prompt创建一个40m x 30m的智慧仓储3D场景 - 地面用平面对象尺寸40m x 30m命名为Floor - 货架区共两排每排10组货架 - 每组货架5列3层单格尺寸1.2m x 1m x 1.5m - 货架用金属材质带横梁 - 两排货架之间留2.5m宽的通道 - 库位对象用空物体表示命名规则Shelf_R1_C2_L3 - 在场景入口(坐标0, -15, 0)放一个操作台。这样Agent生成的场景会严格遵循空间关系后续无论是改布局还是绑数据都有据可查。还有一个小技巧一次只让Agent干一类事。比如先生成地面和货架再单独加库位空物体再统一赋材质。分步执行出错的概率远小于一把梭。3.2 Agent调用MCP工具建模的过程还原实际执行时Agent会按顺序调用Blender MCP暴露的工具函数。大致过程是调用创建平面的工具生成Floor对象循环调用创建立方体的工具生成货架立柱和层板利用平移、缩放工具把立方体摆到正确位置生成空物体作为库位标记设置命名规则最后调用材质设置工具给货架赋金属材质。这些操作都会实时反映在Blender视口里。你可以看着模型一点一点被搭起来非常直观。如果中途发现尺寸不对直接在对话框里说“货架高度改成1.8米”Agent会调整相关对象的缩放参数而不是让你重新建模。我在实操时发现Agent每次调用工具之间的间隔比较短如果你的电脑配置一般Blender会出现短暂的卡顿。这不是死机是脚本在批量操作场景树等一下就好。如果实在卡得厉害建议把场景里的撤消记录调小减少内存开销。3.3 人工校准与材质补充Agent生成的模型毕竟是程序化的几何体基础结构没问题但美观度需要人工补一刀。我通常会做两步层级整理把对象按分区分组比如创建“Shelves”空集合把所有货架扔进去方便前端加载后遍历材质替换Agent默认给的材质有时候太“素”我会用Blender内置材质预设快速替换比如货架用拉丝金属、地面用地坪漆效果这些都是数字孪生展示的高频风格。有一点值得提醒不要指望Agent做高精度造型。它的优势是快速生成结构级模型而不是雕刻级别的细节。数字孪生场景需要的恰恰是结构级精度你要的是“这个货架在哪个坐标、多大尺寸、叫什么名字”而不是“这个货架焊缝怎么建模”。所以从项目需求角度这个组合是匹配得上的。4. 数据导出与前端衔接Blender的JSON/GLTF怎么给数字孪生用4.1 两条导出路线GLB与JSON脚本Blender模型生成后要交给前端数字孪生网站使用核心是解决“怎么导出”。这里推荐两条路线按场景选择完整几何和材质走GLB在Blender里选中导出对象File Export glTF 2.0勾选“Include Selected Objects”可以只导选中对象。GLB适合承载复杂网格和材质Three.js直接加载即可。业务坐标和结构关系走JSON如果只是需要同步库位坐标、对象名称、尺寸用Python脚本导出JSON更轻量。前端拿到JSON后动态创建占位对象不必加载大体积网格。实际项目里我通常是两种都用GLB负责“长什么样”JSON负责“在哪、叫什么、属性是什么”。下载模型网格和业务数据分离前端加载快逻辑也清晰。4.2 核心导出脚本与字段解读我自己常用的导出脚本长这样可以直接在Blender的Scripting工作区里跑import bpy import json scene bpy.context.scene result [] for obj in scene.objects: if obj.type MESH: mat_name obj.active_material.name if obj.active_material else else: mat_name item { name: obj.name, type: obj.type, location: [round(v, 4) for v in obj.location], rotation: [round(v, 4) for v in obj.rotation_euler], scale: [round(v, 4) for v in obj.scale], dimensions: [round(v, 4) for v in obj.dimensions], material: mat_name, parent: obj.parent.name if obj.parent else } result.append(item) output_path /tmp/warehouse_scene.json with open(output_path, w, encodingutf-8) as f: json.dump(result, f, ensure_asciiFalse, indent2) print(f导出完成共 {len(result)} 个对象 - {output_path})导出后的JSON结构里每个字段都是有讲究的location对象中心相对世界坐标原点的位置这是前端摆放模型的关键rotation欧拉角旋转用来还原方向scale缩放值有时建模时缩放不是1前端加载要乘回去dimensions实际尺寸用来做碰撞检测或者射线点击判断parent父子关系保证前端场景树和建模场景一致。前端拿到这份JSON可以很轻松地在Three.js里定位每个库位空物体再和GLB里的货架网格做绑定。4.3 在Three.js里还原仓储场景如果是应急演示只加载GLB就能看到整体模型。但真要做可交互的数字孪生最好同时加载JSON把它当成场景的“逻辑层”。我用Three.js时的思路大致是这样import * as THREE from three; import { GLTFLoader } from three/examples/jsm/loaders/GLTFLoader.js; const scene new THREE.Scene(); const loader new GLTFLoader(); loader.load(/models/warehouse.glb, (gltf) { scene.add(gltf.scene); fetch(/data/warehouse_scene.json) .then(res res.json()) .then(data bindShelfData(data)); }); function bindShelfData(data) { const shelves data.filter(obj obj.name.startsWith(Shelf_)); shelves.forEach(item { // 创建不可见的交互占位用于鼠标点击拾取库位 const box new THREE.Box3(); // 这里可以用item.location/dimensions来生成拾取区 }); }这样设计的好处是坐标同步逻辑集中在JSON上库存数据、状态字段也能挂到item对象上模型网格反而变成了“纯视觉层”。我在项目里点货架弹库存弹窗、按库位颜色显示满仓/空仓状态都是靠在JSON数据层上做文章模型层基本没有动过。这种前后端分离的结构后期维护幸福感极高。5. 常见问题速查Antigravity与Blender MCP的报错处理5.1 Antigravity侧典型报错先说两个出现频率最高的Antigravity 403。这类问题多数不是你的配置错了而是登录态出了问题。我遇到过两次一次是浏览器Cookie过期一次是扩展权限没重新授权。解决的顺序是刷新页面 - 重新登录 - 重启扩展 - 清理站点数据。不要一上来就重装。Eligibility Check Failed。这个是账号资格校验失败。如果确认账号本身没问题大概率是平台服务端临时抖动。换个时间段再试或者退出后重新拉取账号信息基本都能恢复。如果长时间不恢复去官方更新日志看是否有版本兼容说明。5.2 Blender MCP侧典型报错Agent执行中途报错terminated due to error。这个报错信息很吓人但原因多半很朴素Blender没启动、MCP插件没启用、或者操作太大导致响应超时。我排查这类问题的固定顺序先确认Blender进程活着插件状态栏显示WebSocket Server在监听再缩短Prompt让Agent一次少做几步试探性执行最后看Antigravity侧日志定位卡在哪个工具调用上。Blender MCP连不上。出现这个报错优先检查端口和协议。很多在线Agent不支持裸WebSocket要用WSS如果你在配置里填的是ws://需要改成WSS映射地址并且确认token是否正确。另外本机防火墙偶尔会拦截Blender监听的端口放行一次就好。5.3 几个值得记牢的经验第一Prompt里所有尺寸最好都用国际单位“米”不要写“大概”“差不多”。Agent对模糊描述的理解虽然强但几何参数一旦模糊后续生成的模型经常是错的返工成本比多写几个字高得多。第二模型生成后不要急着让Agent删对象。Agent删除对象时偶尔会牵连父对象或者破坏命名层级。建议让它改移动到你指定的Collection里真正的清理你自己来做可控性更强。第三如果要对接“3D点云拉框”这类数据标注任务注意和建模链路分开。点云拉框是针对传感器数据的标注过程跟Blender场景生成是两套逻辑不要混在同一个Pipeline里。前者喂给算法模型做识别后者是给可视化端做呈现两边的数据格式和工具链差异很大。6. 上篇小结这套组合最适用的项目类型不是所有数字孪生项目都适合用AntigravityBlender MCP这套方案。我自己判断的标准是项目的核心痛点是“布局频繁调整”和“需要快速产出多种方案”时这套组合价值最大。比如物流规划前期要对比不同货架密度、不同通道方案的效果传统做法每改一次要重导出用Agent只要改一句Prompt几分钟后就能看到新布局。反过来如果项目是固定的大型高精度场景比如高精度的机械结构孪生需要毫米级还原和大量手工精修那还是老老实实接受传统建模流程AI生成的结构级模型只能当底模用。目前这个项目我已经跑通了“自然语言生成仓储场景 - Blender实时建模 - JSON/GLB导出 - Three.js前端还原”这条主链路。下一步我在做的是把库存数据库和传感器实时数据接进来让每个库位状态能根据业务数据动态刷新同时把AGV路径规划的仿真结果叠加到场景里。这些内容涉及逻辑联动和实时同步等我把坑填得差不多了再写下篇细聊。