项目负责人把那份80MB的CAD布局图甩在我桌上说了一句“这周先出个3D效果。”以前遇到这种3D智慧仓储数字孪生项目光在Blender里建模我就得小一周更不用说后续的库位标注和数据绑定了。但这次我换了一条完全不同的路在Antigravity里建了一个AI代理把Blender MCP接进去然后用自然语言让AI去建模、摆货架、出标注数据。结果第一天上午我就拿到了一个能看、能点选货架、能输出JSON定位数据的数字孪生基础场景。这篇是整个过程的上篇主要讲清楚三件事为什么选Antigravity Blender MCP这套组合、怎么从零搭起来、以及建模和“拉框标注”具体怎么落地。适合正在折腾数字孪生、智能仓储可视化或者单纯想摆脱手工建模苦海的朋友。1. 为什么是Antigravity Blender MCP拆解这套组合的工作原理1.1 Antigravity不是AI助手是一个“办事代理”这两年我们也习惯了打开对话框问一句AI问题但数字孪生这种工作不是“一问一答”而是一连串连续操作建地面、建墙体、生成货架阵列、摆货物、做材质、输出坐标数据中间还要反复检查和改错。Antigravity这类AI代理平台和普通聊天AI最本质的区别就在这里。聊天AI只负责生成文字AI代理却可以按照你设定的目标主动去调用外部工具一步步完成整条任务链。你可以给它定义角色、挂接工具、设定执行范围它会在后台按计划拆解任务、执行动作、验证结果然后把日志回传给你。我的做法很简单在Antigravity里创建一个代理名字就叫“warehouse-builder”职责是接收仓库布局参数通过MCP协议调用Blender完成三维场景建模和空间数据标注。整个过程中Antigravity负责“思考怎么干”Blender负责“动手干”中间用MCP协议作为通信管道。需要提醒的是登录Antigravity必须使用真实的账号完成平台要求的验证流程这是常规的安全步骤别去动任何绕过的念头。后续整个建模流程都要依赖这个账号稳定跑任务账号一旦出问题中断执行会让人非常崩溃。1.2 Blender MCP给AI装上“手”和“眼睛”那么AI到底怎么操作Blender这里必须讲清楚Blender MCP的作用。Blender自带一套完整的Python API几乎所有你能在界面里做的操作都能通过Python脚本完成创建物体、修改网格、设置材质、复制摆位、分组命名。写到这里你可能会说那我自己写Python脚本不就行了问题在于AI不知道你的Blender正在运行也看不到场景里有什么它没办法根据实际情况调整操作。MCP的全称是Model Context Protocol通俗点说它是给AI工具开的“标准遥控器”。Blender MCP这个开源项目在Blender端启动一个WebSocket服务负责接收AI发过来的指令转换成Blender Python代码执行然后把执行结果和截图回传给AI。实际操作中我只需要打开Blender启动MCP插件Antigravity代理发一条消息说“创建一排货架”Blender里就会自动出现一排货架。我还可以要求代理“截图给我看看”它就能返回Blender当前视口的图像我人都不用坐在电脑前面远程看一眼效果就知道对不对。需要明确的是Blender MCP更适合建模、布局和数据标注不适合代替你完成复杂的材质渲染和动画调参。但就数字孪生项目前期建模而言它已经帮我省掉了80%的重复劳动。1.3 数字孪生项目怎么选型直接对比做仓储数字孪生市面上不是没有其他方案但我做了个对比之后还是选了AI代理建模这条路。方案建模耗时数据绑定能力改布局成本对实施人员的要求手动建模Blender/3ds Max3到5天起需要单独手动标注改一处基本重来熟练建模人员Three.js手写代码生成2周以上灵活但代码量大维护困难前端工程师点云数据直接转换很快语义化程度低几乎不可改点云处理专家Antigravity Blender MCP半个工作日生成时同步标注改参数重新生成懂提示词和基础三维概念传统方案最让人头痛的是模型和数据完全脱节。模型是美术数据是开发两边各自做完了再接缝一个货架的编号对不上就得来回沟通。而用Blender MCP这条链路AI在生成几何体的时候我们就给对象树起了统一命名规则比如“Rack_A01_L2_03”这种编码后面标注数据直接能对应上。建模和数据绑定的问题一开始就解决了。当然如果你只是做一个展示用的小场景用Three.js或者网上的3D组件就够了没必要上AI建模。但仓库货架达到十几排甚至上百排库存点位有上千个的时候手工敲代码和手工摆模型都扛不住AI按规则批量生成才是效率上真正拉开差距的地方。2. 环境准备从Antigravity账号到Blender MCP联调2.1 安装Blender MCP插件先处理Blender这一端。下载Blender MCP项目的最新发布版代码解压后打开Blender在顶部菜单“编辑 → 偏好设置 → 插件”里点击“安装”选择对应Python脚本文件启用。装完后在3D视口右侧的侧边栏里会出现一个MCP面板里面显示服务地址和端口默认通常是127.0.0.1:8000。点击“启动服务”Blender就开始对外等待AI连接了。这里有第一个容易翻车的点Blender MCP的版本迭代非常快不同分支和Blender主版本之间的兼容性差异很大。我自己用的是Blender 4.2以上版本配合较新的MCP分支跑得很顺。如果你用的老版本Blender遇到各种莫名其妙的报错先别急着查网络十有八九就是版本不匹配换对应版本就好。2.2 在Antigravity中创建代理并添加MCP工具登录Antigravity之后进入代理编辑界面。新建一个代理在可用工具里选择MCP服务器填写Blender MCP的访问地址。这里我要说一个实际的网络部署问题Antigravity通常运行在云端而Blender一般跑在你自己的电脑或者内网服务器上。如果你直接把服务地址填成127.0.0.1Antigravity是永远连不上的因为那个地址指向的是它自己的本地环境不是你的电脑。我的做法是把Blender和Blender MCP服务架设在一台有公网IP的Linux开发机上通过常规Web服务器软件做反向代理把MCP服务映射到指定端口同时在前面配置一层访问凭证。这样Antigravity的代理可以稳定连过去同一个局域网里的同事也能一起参与联调不需要每个人都单独装Blender。这里郑重提醒一句MCP服务没有内置完善的鉴权机制千万不要裸奔在公网上。我在配置里做了两重保护一是只对指定IP开放二是在MCP服务外层再加了一道访问令牌。宁可多一道验证也不能让外部有不必要的访问入口。2.3 连通性验证代理创建好之后不要急着发复杂指令。我先发一条最简单的指令“连接Blender查看当前场景中有哪些对象。”如果它返回一个空列表或者提示“当前场景没有对象”说明连接链路已经通了。如果报错先看Blender侧边栏MCP面板的状态再检查端口有没有被占用最后看防火墙有没有放行对应端口。我常用的一条测试指令是“请运行一个Python脚本在Blender中添加一个立方体尺寸设为2米截图给我看。”这条指令能跑通整个链路就算是彻底打通了。接下来才能进入正式的建模环节。3. 实测用自然语言建模一个2400㎡的智慧仓储场景3.1 仓储参数的确定数字孪生不能瞎建参数先行。我接到的仓库布局是这么一组数据仓库占地长60米宽40米总面积约2400平方米货架分区A区、B区、C区每区10排货架货架规格双面四层每排12个库位库位尺寸长1.2米、宽1.2米、高1.8米通道规划主干道宽3米支干道宽1.5米收货区与发货区各占约5米乘10米。这些参数不能只留在人脑子里必须整理成结构化的提示词文本喂给代理。这里特别提醒Blender场景默认单位是米除非你手动改过单位否则AI执行Python脚本时所有尺寸默认都是米。我在提示词里给每个尺寸都显式带上“米”避免AI把“12米”理解成“12个单位”然后构建出尺寸完全错乱的模型。3.2 分批生成而不是一次性生成我一开始图省事把60米乘40米、A/B/C三个分区、20排货架、所有库位、通道、收货发货区全部写进一条提示词让代理一次搞定。结果Antigravity执行到一半直接报了一句“Agent execution terminated due to error.”。这个错误在AI代理工具里非常典型任务目标太大单次执行超过时间或资源限制代理就被强制终止了。后来我学乖了把任务拆分成小段一段一段来。第一步建立地面和墙体“在Blender中把场景原点作为仓库中心创建一块60米长、40米宽的地面平面命名为floor并设置成混凝土灰色材质在地面X轴正向边缘创建一面长60米、高10米的墙体。”第二步生成货架阵列“在A区创建货架阵列。以坐标-25-15为起点沿X轴方向重复10次每排间距3米每个货架由底框、顶框、立柱和四层隔板组成每排按12个库位的间隔添加库位分隔框。”这两步跑完后代理会返回创建物体的清单。我会数一下物体数量如果A区是10排乘以每排12个库位应该有120个库位框再加上10组货架骨架数字对不上就要及时修正提示词而不是让问题滚到后面去。3.3 加货物和材质细节基础结构建好以后再加业务细节“在A区所有库位上放置蓝色立方体作为标准货物箱尺寸为0.8米乘0.8米乘0.6米B区只在每个货架的前六个库位放置货物C区保持空置。”这里能顺利执行靠的是前面命名规范的功劳。货架对象有编号AI才能精准找到对应的库位而不是把“所有立方体”全都改一遍。这也是Blender MCP在整个流程里最大的价值之一每一次操作都落在可追溯、带命名的对象上而不是生成一堆无法辨认的杂乱网格。跑完这一步一个能看出布局逻辑的3D仓库场景就有了。远处看过去蓝色货物密布的A区、半满的B区和空荡荡的C区整个仓库的存储状态一目了然。4. 数据层与拉框标注为什么“看得见”不等于“孪生”4.1 数字孪生的数据核心很多人在做数字孪生时有一个误解以为把仓库3D模型做出来放到网页上能转、能放大缩小这就算“孪生”了。实际上差得远。数字孪生的核心是模型与数据同步映射。你点击场景中的某个货架界面上必须能弹出这个货架的实时库存、库位编码、入库时间这些信息。如果你的模型和这些数据之间没有绑定关系那后端数据再完整也不知道该渲染到哪个对象上面整个场景就只是3D动画而不是数字孪生。因此建模的同时就要做空间标注这就是我们常说的“拉框”。4.2 Blender中拉框标注怎么做“拉框”这个词做图像标注的朋友都不会陌生。二维图像里拉框是在画面上画一个矩形把目标物体框起来。放到三维场景中拉框的操作对象变成一个三维包围盒要记录每个物体在场景里的中心点坐标、长宽高尺寸和旋转角度然后和业务数据表里的主键关联起来。在Blender里做这件事不需要你一个一个手工去点。写一段Python脚本遍历场景中的所有货架对象把每个对象的包围盒坐标读出来直接输出成JSON文件。下面是我实际用的脚本注意这里使用的是Blender Python环境import bpy import json from mathutils import Vector results [] for obj in bpy.context.scene.objects: if obj.type MESH and obj.name.startswith(Rack_): # 将物体局部坐标的bound_box转换成世界坐标 world_corners [ obj.matrix_world Vector(corner) for corner in obj.bound_box ] xs [c[0] for c in world_corners] ys [c[1] for c in world_corners] zs [c[2] for c in world_corners] results.append({ name: obj.name, bbox: [ min(xs), min(ys), min(zs), max(xs), max(ys), max(zs) ], center: [ (min(xs) max(xs)) / 2, (min(ys) max(ys)) / 2, (min(zs) max(zs)) / 2 ], size: [ max(xs) - min(xs), max(ys) - min(ys), max(zs) - min(zs) ] }) output_path //warehouse_bbox.json with open(output_path, w, encodingutf-8) as f: json.dump(results, f, indent2, ensure_asciiFalse) print(f导出完成共输出 {len(results)} 个对象的包围盒数据)如果你项目里有现场激光扫描的点云数据也可以把点云聚类处理后导入Blender作为底图再基于底图去做货架、通道这类语义标注。本质上“拉框”就是把空间里的每个实物对象用包围盒包起来并赋予业务编号让物理空间和数据库里的记录产生一一对应关系。4.3 从Blender导出带数据结构的资产标注做完之后模型和数据要打包交付。我推荐两条导出路线一是导出GLB/GLTF格式适合做前端数字孪生网站在Three.js里直接加载模型自带网格、材质和动画信息二是导出JSON/CSV格式的标注数据包含上面提到的对象名称、包围盒、中心点和尺寸。实际项目中我们是这样分工的AI建模输出场景前端开发读取bbox JSON接着把仓储管理系统里的库存数据按库位编号映射到对应的三维模型上。点击货架弹出对应的库位库存这个交互才真正打通。5. 踩坑实录这套组合最容易翻车的三个环节5.1 Antigravity代理执行中断这是我遇到的最频繁的问题表现形式就是那句让人脑壳疼的“Agent execution terminated due to error.”排查的时候先别慌绝大多数情况不是账号出问题而是任务目标太大。代理在执行过程中调用工具的次数太多单次会话超过限制直接被系统终止。我建议把任务切成小块每个代理会话只做一件事并且在提示词里加一句配置“如果步骤超过10步就停止等待用户确认。”这样反而更不容易中断。另外Antigravity在连接外部工具时偶发的403或验证类提示优先检查账号的登录状态是否正常确保代理具备调用工具的权限。反复刷新页面不如重新登录一次干净。5.2 Blender MCP连接超时现象是提示词发出去之后等了半天代理回报超时。完整的排查链路是这样的先确认Blender里的MCP服务真的在运行再看端口和地址是否填写正确最后检查开发机的防火墙配置和访问凭证。我踩过最隐蔽的一个坑是Blender窗口最小化之后MCP服务虽然在后台运行但AI每次连接时会在Blender界面弹出一个需要人工确认的提示框自动化执行就被这个框卡死了。解决方案是把Blender放在桌面前台运行不最小化到任务栏托盘同时关闭工具里需要人工确认的选项。这个小细节文档里基本不会写但能让你少排查半小时。5.3 尺寸单位错乱AI生成的物体经常出现尺寸差了100倍甚至1000倍的情况。原因通常有两个一是提示词里没有写明单位二是Blender场景单位被改成了厘米或者英寸。我的解决方案是在提示词开头的固定位置加上一句强制规则“所有尺寸说明一律以米为单位如确需要厘米请显式说明。”生成完成之后再加一条自动校验指令“请列出所有Rack_开头对象的长宽高尺寸检查是否处于合理范围长不超过3米宽不超过1.5米高不超过2米。”这样尺寸问题在生成阶段就能暴露而不是等到渲染完才发现整个仓库比例不对又得推倒重来。6. 上篇收尾这套工作流目前能做到什么程度现在这套完整的链路已经跑通了Antigravity作为代理大脑Blender MCP作为建模执行工具再配合反向代理和访问控制完成云端与开发机之间的通信。从一条自然的语言指令到Blender里出现一排排结构清晰的货架再到JSON格式的包围盒标注数据落地整个过程可以控制在半天到一天。目前我们已经拿到的成果是一个约2400平方米的智慧仓库三维基础场景包含三个货架分区、库位、通道等基础结构一套货架对象的命名规则和对应的空间标注数据一条从“自然语言需求”到“可交付数字孪生资产”的自动化链路分布式中断后的重跑成本极低。接下来还能做的方向很多接入WMS库存系统做数据驱动渲染在Blender里做仓储作业动画仿真把场景导出成GLB或3D Tiles发布成前端数字孪生网站叠加仓储机器人路径可视化等等。这些内容适合放到下篇继续展开。最后说一点个人体会。AI建模这件事真正让人舒服的地方不是“快”而是“可控”。以前改仓库布局等于把场景推倒重来现在只要修改提示词里的长宽高、货架排数和间隔代理再跑一遍新场景就自动生成标注数据也随之更新。这种以参数控制空间的思路会越来越多地渗透进数字孪生项目里。建模这件事不该永远是劳动密集型工种它可以变成数据和逻辑驱动的过程。