用 Codex 连接 Blender MCP:从安装到做一辆儿童玩具小巴士

这篇文章记录一次完整的实操:在 macOS 上安装 Blender 和 blender-mcp,把它接进 Codex,然后直接在 Blender 里做出一辆圆润卡通风格的儿童玩具小巴士。

目标

这次不是停留在“装好就算完”,而是希望把整条链路跑通:

  1. 安装 uvblender-mcp
  2. 配置 Codex 的 MCP server
  3. 安装 Blender 插件 addon.py
  4. 验证 Codex 能真实读取和操作 Blender 场景
  5. 基于自然语言,做出一个简单可爱的玩具小汽车模型

环境

  • macOS
  • Blender 4.5.4 LTS
  • uv 0.11.8
  • Codex 本地 MCP 配置
  • 博客本身通过 astro-blog-ssh MCP 发布

第一步:安装 Blender MCP

blender-mcp 的结构其实很直接:

  • 一部分是 Blender 里的插件 addon.py
  • 一部分是本地 MCP server,由 uvx blender-mcp 启动

在这台机器上,最终采用的是下面这套方式:

1. 安装 uv

uv 安装到用户目录下的 ~/bin,避免改系统环境。

2. 在 Codex 里注册 Blender MCP

注册成一个全局 MCP server,命令是:

uvx blender-mcp

同时额外加了:

DISABLE_TELEMETRY=true

3. 下载并安装 Blender 插件

从仓库下载 addon.py,再安装到 Blender 用户插件目录。最终插件实际位于 Blender 的用户脚本目录里。

第二步:安装 Blender 本体

这台机器一开始并没有 Blender,所以后面直接走了官方 DMG:

  • 下载 Blender 官方 macOS Intel 版本
  • 安装到 ~/Applications/Blender.app
  • 用 Blender CLI 验证版本号,确认是 Blender 4.5.4 LTS

这样做的好处是不用碰系统级 /Applications 权限,整个安装对现有环境影响更小。

第三步:遇到的第一个坑

表面上看,插件已经安装并启用了,但 Blender 侧栏里一开始没有看到 BlenderMCP 面板。

排查后确认了几件事:

  • 插件模块已经被 Blender 识别
  • 插件已经启用
  • 面板类已经正确注册到 VIEW_3D > UI > BlenderMCP

根因不是“没装上”,而是 Blender 界面和验证方式的问题。

第四步:真正的连通问题

更关键的问题出现在 MCP 调用阶段。

最开始为了方便验证,尝试让 Blender 用 --background 模式启动,再自动拉起 blendermcp 服务。这个方式虽然能把 9876 端口打开,但真实请求会一直超时。

后来定位到原因:

blender-mcp 内部依赖 Blender 主线程上的 bpy.app.timers 来执行请求,而后台模式不会正常处理这类回调,所以会出现:

  • 端口能通
  • socket 能连上
  • 但真实命令没有响应

这个点很关键。

最后换成真正的 GUI Blender 实例启动,并自动执行插件的 start_server 操作之后,链路才真正打通。

第五步:验证 Codex 可以直接控制 Blender

连通后,先做了最基础的一次读取:

  • 获取当前场景信息
  • 返回了默认场景里的 CubeLightCamera

接着做了第一个真正的操作:

创建一个球体

直接通过 Blender MCP 执行代码,在默认立方体上方创建一个球体:

  • 名称:Sphere
  • 位置:(0, 0, 2)

这一步的意义不在于球体本身,而在于确认:

  • 命令确实执行到了 Blender
  • 场景读取结果能反映刚刚的变化

做到这里,才算是真的“可以直接控制了”。

第六步:做一辆儿童玩具小巴士

接下来开始用自然语言一步步建一个玩具风模型。

用户最终定下来的方向是:

  • 风格:圆润卡通
  • 类型:小巴士 / 面包车
  • 主色:蓝白色

建模策略

没有追求写实,而是走“基础几何体 + 圆角塑形”的路线:

  • 车身:方盒体,但做圆角
  • 车顶:白色独立盖板
  • 车窗:浅蓝半透明块面
  • 轮子:粗短圆柱
  • 细节:灯、条纹、后视镜、表情件

这条路线的好处是非常适合儿童玩具感:

  • 比例夸张
  • 结构简单
  • 容易继续改可爱化风格
  • 不容易一不小心变成真实汽车

第七步:建模过程中遇到的坑

过程中也踩到了两个很典型的问题。

1. 材质属性兼容问题

第一次建模时,代码里用了 shadow_method,但当前 Blender 版本对应的材质对象没有这个属性,导致直接报错。

处理方式很简单:

  • 去掉不兼容设置
  • 保留必要的 blend_method

2. 父子关系叠加缩放问题

第一次把零件都 parent 到车身时,车身本身还带有非 1 的缩放,于是子对象在世界坐标里被放大错位,轮子和装饰位置都跑掉了。

根因定位后,采用了更稳妥的方式:

  • 先创建每个对象
  • 对需要的对象先应用缩放
  • 再做组合与摆放

这样模型结构才恢复正常。

第八步:从基础巴士到“更像玩具”

模型先做出基础版本,然后又做了两轮增强。

第一轮增强

  • 删除默认 CubeSphere
  • 把小巴士移到更容易查看的位置
  • 强化蓝白配色
  • 增加白色侧条纹
  • 增加车灯和腮红
  • 切换视口到材质预览

第二轮增强

继续往“可爱”而不是“写实”方向走:

  • 前后保险杠
  • 左右车门和把手
  • 后视镜
  • 顶部双色小警示灯
  • 尾灯
  • 前脸格栅

第三轮增强:正脸表情

为了让它更像儿童玩具,而不只是一个低模小车,最后又补了正脸表情:

  • 更大的眼睛底
  • 黑色瞳孔
  • 正脸腮红
  • 一个笑脸

这样整个小巴士的气质就从“简化汽车模型”变成了更明显的“玩具角色车”。

这次流程里最重要的经验

如果只看结果,这篇文章像是在讲怎么做一个玩具车。但我觉得真正有价值的,是这几个经验:

1. MCP 连上不等于真正能用

最容易被误判的是:

  • 端口开了
  • 配置也写了
  • 工具看起来也注册成功了

但真实请求未必能执行。

一定要做至少一次真实读写验证,比如:

  • 读当前场景
  • 创建一个简单对象
  • 再把场景读回来

2. Blender 的后台模式和 GUI 模式差异很重要

某些插件依赖主线程回调或 UI 循环,后台模式并不等价于真正的 Blender 运行状态。

这个问题如果不先定位,很容易误以为是:

  • 插件坏了
  • MCP server 坏了
  • 网络坏了

实际上只是运行模式不对。

3. 用 AI 控 Blender 时,先做最小可验证动作

比起一上来就说“帮我做一个完整场景”,更稳妥的做法是:

  1. 先读场景
  2. 先创建球体
  3. 再做一个简单模型
  4. 最后再加风格和细节

这样每一步都知道链路在哪一层是通的。

最终效果

最后得到的是一辆:

  • 蓝白主色
  • 圆润卡通比例
  • 小巴士轮廓
  • 带玩具化表情
  • 适合继续做展示图或继续精修

它不追求工业设计精度,而是更偏“儿童玩具模型”的方向,这恰好也是自然语言建模特别适合的场景。

总结

这次最大的收获不是“装上了 Blender MCP”,而是把整条链路真正走通了:

  • 从本地安装
  • 到 Codex 接入 MCP
  • 到 Blender GUI 实际连通
  • 到真实建模
  • 再到风格化迭代

如果只是把工具装上,最多算完成了 30%。

真正值得记录的是:它已经可以被稳定地拿来做事情了。

接下来如果继续往下走,很自然的方向会是:

  • 给这个玩具小巴士摆展示镜头和灯光
  • 继续做更多玩具角色车
  • 把 Blender MCP 接进更完整的内容生产流程

比如:先让 AI 生成 3D 小道具,再把它们整理成博客里的可视化案例。这时候,MCP 就不只是“一个工具连接器”,而会变成整个创作工作流的一部分。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注