
最近在搭一套简化版的3D智慧仓储数字孪生核心工具组合是 Antigravity Blender MCP。这篇文章是系列的上篇先把整个思路和基础搭建讲清楚下篇再讲数据接入和动态刷新。很多团队做数字孪生卡在“建模 - 数据 - 渲染”链条的第一环建模太慢。仓库场景里全是重复的货架、托盘、料箱手工一个个摆既枯燥又容易错。用 Blender MCP 配合 AI IDE能把传统建模时间大幅压缩也能让后续调整变成一个“对话”的过程。这次就聊聊我踩过的坑以及怎么从零把这条链路跑通。1. 为什么是 Antigravity Blender MCP1.1 数字孪生场景的真实痛点仓储数字孪生说白了就是先在三维世界里复刻一个仓库再把库存、设备状态这些实时数据映射进去。听起来不复杂但真正动手时你会发现最耗时间的不是数据接口而是“把模型搭出来”。一个中等规模的仓库光货架可能就有几十排每排十组再加上托盘、料箱、安全通道、消防标识手工建模的重复劳动量非常大。用传统建模软件做也不是不行但问题在于后期的“改”。仓库布局一变货架挪个位置通道加宽半米你就要把模型重新拖一遍。如果用的是 Revit 或 SketchUp还会牵扯到和前端渲染格式的转换整个链路非常重。我当时的目标很明确要一个能快速生成基础场景、能参数化调整、能对接前端展示的流程。所以我把注意力放在了“AI 生成建模”这个方向上。1.2 Antigravity 能做什么Antigravity 是一个 AI 驱动的开发环境你可以把它理解成内置了 Agent 能力的 IDE。它比我之前用的普通 AI 编程插件更“主动”一点给它一个任务它会自己拆解成一步步操作写代码、跑命令、调用外部工具然后反馈结果。在这个项目里Antigravity 承担的是“指挥中枢”角色。我对它说需求它负责把需求转成 Blender 能理解的 Python 脚本再通过 MCP 协议把脚本交给 Blender 执行。相比传统方式里“AI 给出代码 - 我复制到 Blender - 手动运行”Antigravity 的 Agent 执行链路更短反馈也更快。当然它也不是万能的。Antigravity 对项目上下文的理解能力取决于你怎么组织提示词和目录结构。所以我在做这个项目时会刻意把 Blender 项目的命名、坐标规范都固定下来让 AI 有据可依。1.3 Blender MCP 的角色MCP 全称是 Model Context Protocol模型上下文协议。你不需要把它想得太玄它的作用就是给 AI 一双可以操作外部软件的手。没有 MCP 的时候AI 只能给你一段代码你复制到 Blender 里运行出错了再回来粘贴给 AI 看来回折腾。有了 MCP 之后AI 可以直接“上手改模型”创建物体、移动位置、改材质、导出文件全都能在对话里完成。Blender MCP 就是跑在 Blender 侧的一个服务端程序。它和 Blender 插件通信同时用 MCP 协议暴露给 Antigravity。Antigravity 发送 JSON-RPC 格式的请求Blender MCP 在本地接收转换成 Blender Python API 调用再返回执行结果。这个机制有点像给 AI 装了一个“远程控制器”。我用下来最明显的感受是整个建模过程从“写代码包”变成了“对话”。你说“把第三排货架往左移两米”AI 就会先查一下当前场景里有没有这个对象然后执行对应的变换操作中间不需要我手动介入。1.4 整体工作流把整个流程拆开看就是四步循环人类提出需求“在 Blender 里创建一块 20×30 米的地面。”Antigravity Agent 拆解需求生成 Blender Python 调用。Blender MCP Server 执行命令返回结果。人类在 Blender 视图中确认效果继续提下一个需求。这个循环最大的优点是可以持续迭代。传统脚本建模最怕“需求变了”因为脚本是一套参数写死的而 MCP 模式下AI 可以基于当前场景状态做增量修改。比如你之前已经生成了 6 排货架现在想改成 8 排直接说就行AI 不会把之前的模型推倒重来。2. 环境搭建从零打通 Antigravity 到 Blender2.1 工具版本与前置条件先列一下我目前用的环境方便你对照组件版本 / 说明Blender4.1 LTS3.6 LTS 也可以Antigravity IDE最新稳定版自带 MCP 客户端配置Blender MCP 插件社区开源方案从官方扩展仓库或 GitHub 下载Python3.10部分 MCP Server 实现需要有一点要特别提醒如果你用的是非常老版本的 Blender一些 MCP 插件可能不支持因为 Blender Python API 有些函数在新版本里改过路径。建议直接上 4.1 LTS网上大多数示例都是基于这个版本写的。为什么不建议用 Blender 自带的 Scripting 面板手动跑脚本因为那样根本谈不上“控制”。MCP 的意义在于双向通信Antigravity 能发指令、也能读取 Blender 场景的当前状态这是纯脚本方式做不到的。2.2 安装 Blender 插件和 MCP Server第一次搭的时候我卡在了一个比较奇怪的地方以为装完插件就完事了其实还要单独启动 MCP Server。这里把完整步骤写一下照着做基本能通。第一步在 Blender 里安装插件。打开顶部菜单的 Edit编辑 - Preferences偏好设置 - Add-ons插件点击 Install安装选中你下载好的插件压缩包或 py 文件然后搜索插件名并勾选启用。第二步启动 Blender MCP Server。装完插件后在 Blender 的 3D 视图右侧会出现一个专门的 MCP 面板具体位置取决于插件实现。点一下“启动服务”它会监听一个本地端口常见的有 9876、8000或者随机端口。面板上一般会显示当前监听的地址。第三步配置 Antigravity 的 MCP Server。在 Antigravity 的设置里找到 MCP 配置添加一个名称为“blender”的服务器。配置方式有两种看你的 MCP Server 插件提供哪种传输方式配置要点使用体验stdio指定 command 和 args让 Antigravity 直接启动 Python 脚本简单但需要本机 Python 环境干净SSE / HTTP配置 uri 指向本地端口如 http://127.0.0.1:9876/sse稳定适合 Blender 插件已经运行的情况我推荐用 SSE/HTTP 方式因为 Blender 插件启动的 MCP Server 会一直常驻Antigravity 只需要连接不需要管理进程生命周期。配置大致长这样具体字段以你的客户端为准{ mcpServers: { blender: { transport: sse, uri: http://127.0.0.1:9876/sse } } }如果是 stdio 方式它可能类似{ mcpServers: { blender: { command: python, args: [-m, blender_mcp_client] } } }2.3 验证连接配置完成之后先别急着做大场景用最小的指令验证链路在 Antigravity 对话框里输入“使用 Blender 创建一个平面尺寸为 20×30 米命名为 warehouse_floor。”如果一切正常Blender 的 3D 视图里会立刻出现一个平面。我在第一次验证时等了十几秒没反应查了半天发现是 Blender 插件服务没启动Antigravity 只是连上了一个不存在的端口自然拿不到响应。所以建议你先看 Blender 的 MCP 面板是否显示“Running”再检查 Antigravity 的日志里有没有连接成功的记录。这里也提一句安全注意事项给 Antigravity 开放 Blender 的 Python 执行权限意味着它可以在你的电脑上运行任意代码。所以 MCP Server 尽量只监听本机地址 127.0.0.1不要暴露到局域网也别随意安装或连接来历不明的 MCP 服务。3. 核心逻辑拆解MCP 控制 Blender 的原理3.1 MCP 的请求 - 响应模型MCP 的核心是工具调用。Blender MCP Server 会把 Blender 的能力封装成一个个工具Antigravity 通过对话内容判断该调用哪个工具、传什么参数。举个例子当你对 Antigravity 说“创建一个立方体”它不会直接跑去操作 Blender 界面而是调用一个名为create_primitive的工具参数大概是{ type: CUBE, name: box_01, location: [0, 0, 0], scale: [1, 1, 1] }Blender MCP Server 收到这个结构化指令后会把它翻译成 Blender Python API 调用比如bpy.ops.mesh.primitive_cube_add()然后执行。执行完返回一个结果Antigravity 再把结果转成自然语言告诉你。这个模型很像大模型领域的 Function Calling好处是可控。AI 不会像人一样“自由发挥”乱改场景它必须按照工具定义的参数来。这就降低了误操作的概率。3.2 Blender MCP 的常用能力我根据自己的使用经验整理了一张工具能力表基本可以覆盖仓储场景建模的大部分需求能力对应 MCP 工具使用场景创建基础几何体create_primitive地面、货架立柱、托盘、料箱复制与阵列duplicate_objects / array批量生成一排货架、托盘堆叠变换对象transform_object移动货架、旋转、对齐设置材质set_material区域颜色标识、货架配色导入导出import_file / export_file导入 CAD 布局导出 GLB查询场景get_scene_info / list_objects检查场景里有多少物体、重叠关系执行任意代码execute_blender_code高级自定义操作其中execute_blender_code是“万能钥匙”它可以直接接收一段 Python 代码在 Blender 进程中运行。但越是强大的功能越要注意使用边界我一般只在需要复杂批量逻辑时才会让 AI 调它否则尽量让它用工具。3.3 为什么选 MCP 而不是纯 Python 脚本纯 Python 脚本适合“一次性批量建模”把所有货架坐标算好跑一遍生成完事。但数字孪生场景是长期维护的今天加一排货架明天把通道改宽后天要清空某块区域。这些增量修改如果用脚本写你得维护一大堆逻辑分支很快会乱。MCP 的实时交互特性解决了这个问题。Antigravity 可以通过 MCP 工具获取当前场景信息比如“现在场景里有多少个物体”“这些物体分别叫什么名字”然后在此基础上做增量操作。你可以随时让 AI 改一改不用担心把之前的东西全弄丢了。4. 实操搭建一个简易仓储数字孪生场景4.1 场景规划与坐标约定动手之前先把“规矩”定好。数字孪生场景跟随便玩玩的 3D 模型不一样它要跟真实坐标体系对应后面接数据才能对得上。我这边做了一个简单的约定1 Blender 单位 1 米。原点 (0,0,0) 放在仓库的西南角。X 轴指向东方Y 轴指向北方。货架区沿 Y 轴排列通道沿 X 轴延伸。具体尺寸规划如下元素尺寸 / 数量库区地面长 30 米宽 20 米货架单组宽 1.2 米深 2.4 米高 2 米货架排数6 排每排 10 组通道宽度2.5 米货物托盘1 米 × 1.2 米 × 0.15 米这个布局是相当简化的真实仓库会有消防通道、分拣区、月台不过作为“上篇”的演示已经够了。4.2 用自然语言生成地面和货架打开 Antigravity输入提示词“在 Blender 中创建一块 30×20 米的地面命名为 warehouse_floor位置在原点然后创建 6 排货架每排 10 组单组尺寸 1.2×2.4×2 米货架之间通道距离 2.5 米货架放在地面北侧区域先不要加顶。”Antigravity 会拆解这个需求先调用create_primitive创建地面并缩放然后用循环复制的方式生成货架。你会在 Blender 里看到地面铺开货架像积木一样一排排出现在场景里。我这里贴一段 Antigravity 生成出来的核心代码逻辑方便理解它在 Blender 端做了什么# 创建地面并缩放为 30x20 米 bpy.ops.mesh.primitive_plane_add(size1, location(0, 0, 0)) floor bpy.context.object floor.name warehouse_floor floor.scale (30, 20, 1) # 循环创建 6 排货架每排 10 组 for row in range(6): for col in range(10): x col * 4.0 1.5 # 每组货架加通道宽度 y row * 3.6 5.0 # 排间距 bpy.ops.mesh.primitive_cube_add( size1, location(x, y, 1.0) ) obj bpy.context.object obj.name frack_{row:02d}_{col:02d} obj.scale (1.2, 2.4, 2.0)注意这种代码通常是 AI 通过execute_blender_code这个万能的 MCP 工具执行的不是靠开发者手动在外部运行。你不用自己复制到 Blender 里AI 已经帮你做完了。最后我会让 AI 把所有货架按高度 2 米、底部贴近地面整理好再把坐标对齐到小数后一位方便后续挂数据。4.3 给场景加材质和区域标识仓库模型如果没有材质就是一个灰蒙蒙的盒子堆。数字孪生场景里颜色不只是好看还承担信息传递的作用。比如我会用颜色区分功能区域地面用混凝土灰货架用深蓝通道用半透明绿色安全区域用黄色。这会让后面做数据可视化时直观很多。在 Antigravity 里输入“给地面创建混凝土材质颜色设为 #808080并添加一个微小的噪波纹理给所有货架创建深蓝色金属材质在每排货架之间的通道地面上创建一个平面长 30 米、宽 2.5 米使用半透明绿色材质。”这里有个坑半透明材质在 Blender 里需要设置 Blend Mode混合模式否则导出后看不到透明效果。MCP 工具一般会帮你设置好但如果你是自己写 Python 调用的一定要记得修改blend_method。Blender 4.x 里是通过material.blend_method BLEND来开启透明混合的。4.4 调整光照与摄像机静态模型建完下一步就是让场景有“可看性”。数字孪生前端展示不需要电影级渲染但至少要有一个稳定的视角和均匀的光照。我用的是 Blender 内置的太阳光Sun和摄像机。建议参数参数数值太阳光角度方位角 135°高度角 45°太阳光强度2.5摄像机位置(35, 28, 22)摄像机目标仓库中心 (15, 10, 1)摄像机焦距35mm可以输入这样的指令“在场景中创建太阳光旋转角度为 X 轴 45 度、Z 轴 135 度强度设为 2.5创建一个摄像机位置 (35, 28, 22)并让它看向仓库中心。”在 Antigravity 里我会让 AI 通过 MCP 工具直接修改摄像机的rotation_euler和location比手动拖拽精确得多。调整完之后切换到 Blender 的相机视角基本就能看到一个立体感很强的仓储场景了。4.5 导出 glTF/GLB 供前端使用数字孪生最终是要放到网页或应用里展示的所以我习惯把 Blender 场景导出成 glTF/GLB 格式这是目前前端 3D 渲染最通用的格式Three.js、Babylon.js 都能直接用。在 Antigravity 里输入“将当前场景导出为 GLB 文件保存到项目目录 output/warehouse.glb勾选仅导出选中物体和 Y 轴向上。”导出时需要注意几个点如果材质使用了复杂的节点组glTF 导出器可能识别不了最好统一用 Principled BSDF原理化着色器。半透明材质导出后如果前端没有加载对应的扩展透明效果会丢失。建议导出时选择 KHR_materials_transmission 或干脆用带透明通道的 PNG 贴图。模型命名要规范因为导出后前端会按名字查找对象。比如rack_00_00这样数据驱动时容易定位。到这里一个静态的仓储数字孪生底稿就基本完成了。从零开始建场景到导出 GLB前后大概半个小时如果纯手工这个规模可能要半天。4.6 从“上篇”到“下篇”的边界我们这篇文章只到“静态场景搭建”。真正的数字孪生必须要有数据流动。我的计划是下一步让 Blender 模型带上一套唯一标识然后通过 WebSocket 或 HTTP 接口把库存数据、设备状态实时传进来在场景里用颜色或文字标注体现比如货架占用率、货物温度。这部分内容我放在下篇到时候会涉及 Antigravity Agent 如何读取后端数据、如何控制 Blender 对象的状态变化。5. 常见问题与排查技巧实录5.1 Antigravity 无法连接 Blender MCP这是我遇到最多的问题大概分几种现象现象可能原因解决思路调用工具时一直超时Blender 插件里的 MCP Server 没启动打开 Blender 右侧面板确认服务状态是 Running连接被拒绝端口填错对比插件日志里监听的端口和 Antigravity 配置提示找不到工具Antigravity 没有刷新 MCP 工具列表在 Antigravity 设置里重新连接或重启会话排查顺序一般是先看 Blender 插件是不是启动、端口是多少再看 Antigravity 配置是否一致最后看日志。5.2 指令执行后 Blender 无响应有时候 AI 以为执行成功了但 Blender 界面一动不动。这通常是 Blender 主线程被阻塞了。如果一次性创建几千个对象MCP Server 在 Blender 内部连续执行大量 Python API 调用界面可能暂时“假死”。我的经验是把大任务拆小。比如创建 2000 个料箱不要一次性让 AI 做而是分成几步每步 500 个中间留一点时间让 Blender 刷新。也可以在 MCP Server 里加一个执行队列或者用time.sleep做一点延时。5.3 导出 GLB 后纹理丢失这个问题非常典型。Blender 里明明有贴图导出 GLB 后前端就是看不到。原因多半是材质节点用了非 Principled BSDF 的节点组或者贴图路径是绝对路径。解决方法把材质树统一改成“原理化 BSDF 图像纹理”结构再检查导出选项里的“Include Textures”是否勾选。如果是半透明材质前面提过要处理成 glTF 能识别的扩展或 PNG 贴图。5.4 对象命名与坐标混乱没有规范命名后面做数据对接必炸。AI 生成的默认对象名往往是“Cube.001”“Cube.002”这种根本看不出是哪个货架。而且如果原点不在正确位置货架可能会跑到地下去。我的建议是在项目一开始就给 AI 立规则所有对象必须用语义化前缀命名比如rack_排_列、pallet_编号、area_channel_编号每次创建对象时都要显式设置location和origin_set。我在 Antigravity 的提示词里写了这段规则 1. 创建每个物体后必须设置意义明确的名称。 2. 坐标系保持 Blender 全局坐标不修改原点。 3. 移动物体后确认其底面紧贴地面 y0。这样能省很多后续排查的功夫。5.5 安全提示本地代码执行风险再强调一下MCP 允许 AI 在 Blender 进程中执行 Python 代码这意味着如果你的 MCP Server 监听了外部端口别人也有可能连接上来执行命令。所以只让 MCP Server 监听 127.0.0.1。不要随便从网上下载来路不明的 MCP 插件。定期备份 Blender 文件。在 Antigravity 的 MCP 权限设置里尽量限制execute_blender_code工具的使用。这些不是空话我确实见过有人因为本地 MCP 端口暴露导致 Blender 文件被清掉的情况。6. 我的实际体验与后续计划这个组合用下来最直观的感受是“从手动建模到对话建模”的转变。第一次让 Antigravity 生成 6 排货架时我原本担心坐标会乱结果它先计算了每一排的起始坐标再通过 MCP 工具逐组创建效果比我手动排还整齐。后来我慢慢意识到能不能发挥好这套工具链关键不在工具本身而在“约定”。你有没有给 AI 一个清晰的坐标系有没有要求它给每个对象命名有没有告诉它地面高度在哪个位置。这些约定越明确AI 的执行越稳。个人经验里还有一个比较容易忽略的点对话记录别删。Antigravity 和 Blender MCP 配合调试时每次对话其实是你的“操作日志”。如果一个对象位置不对翻前面的对话记录就能定位是第几条指令造成的比自己看代码高效得多。下篇我会继续写怎么把实时数据接到这套模型上包括用 Antigravity Agent 调用后端接口、通过数据驱动 Blender 场景里的状态变化、最终在网页端呈现出可交互的智慧仓储数字孪生。这篇先到这里如果你也正在折腾这套技术栈欢迎按照上面的步骤试一遍有问题可以直接对照第 5 节的排查表。