拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Antigravity+Blender MCP:AI Agent让数字孪生建模变对话

Antigravity+Blender MCP:AI Agent让数字孪生建模变对话

最近在折腾智慧仓储数字孪生项目时,我试了一套特别顺手的组合——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给前端,前端加载后如果发现尺寸不对、坐标原点没对齐,得回去找美术改,来回沟通成本非常高。

第二个痛点是参数化能力弱。仓储项目经常要调库位数、货架排布、通道宽度,传统方式相当于每次拿一个静态模型去改,改动一次要重新导出重新联调。而用Antigravity+Blender 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", encoding="utf-8") as f: json.dump(result, f, ensure_ascii=False, indent=2) 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. 上篇小结:这套组合最适用的项目类型

不是所有数字孪生项目都适合用Antigravity+Blender MCP这套方案。我自己判断的标准是:项目的核心痛点是“布局频繁调整”和“需要快速产出多种方案”时,这套组合价值最大。比如物流规划前期要对比不同货架密度、不同通道方案的效果,传统做法每改一次要重导出,用Agent只要改一句Prompt,几分钟后就能看到新布局。

反过来,如果项目是固定的大型高精度场景,比如高精度的机械结构孪生,需要毫米级还原和大量手工精修,那还是老老实实接受传统建模流程,AI生成的结构级模型只能当底模用。

目前这个项目我已经跑通了“自然语言生成仓储场景 -> Blender实时建模 -> JSON/GLB导出 -> Three.js前端还原”这条主链路。下一步我在做的是把库存数据库和传感器实时数据接进来,让每个库位状态能根据业务数据动态刷新,同时把AGV路径规划的仿真结果叠加到场景里。这些内容涉及逻辑联动和实时同步,等我把坑填得差不多了,再写下篇细聊。

返回列表