这篇文章记录一次完整的实操:在 macOS 上安装 Blender 和 blender-mcp,把它接进 Codex,然后直接在 Blender 里做出一辆圆润卡通风格的儿童玩具小巴士。
目标
这次不是停留在“装好就算完”,而是希望把整条链路跑通:
- 安装
uv和blender-mcp - 配置 Codex 的 MCP server
- 安装 Blender 插件
addon.py - 验证 Codex 能真实读取和操作 Blender 场景
- 基于自然语言,做出一个简单可爱的玩具小汽车模型
环境
- macOS
- Blender
4.5.4 LTS uv 0.11.8- Codex 本地 MCP 配置
- 博客本身通过
astro-blog-sshMCP 发布
第一步:安装 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
连通后,先做了最基础的一次读取:
- 获取当前场景信息
- 返回了默认场景里的
Cube、Light、Camera
接着做了第一个真正的操作:
创建一个球体
直接通过 Blender MCP 执行代码,在默认立方体上方创建一个球体:
- 名称:
Sphere - 位置:
(0, 0, 2)
这一步的意义不在于球体本身,而在于确认:
- 命令确实执行到了 Blender
- 场景读取结果能反映刚刚的变化
做到这里,才算是真的“可以直接控制了”。
第六步:做一辆儿童玩具小巴士
接下来开始用自然语言一步步建一个玩具风模型。
用户最终定下来的方向是:
- 风格:圆润卡通
- 类型:小巴士 / 面包车
- 主色:蓝白色
建模策略
没有追求写实,而是走“基础几何体 + 圆角塑形”的路线:
- 车身:方盒体,但做圆角
- 车顶:白色独立盖板
- 车窗:浅蓝半透明块面
- 轮子:粗短圆柱
- 细节:灯、条纹、后视镜、表情件
这条路线的好处是非常适合儿童玩具感:
- 比例夸张
- 结构简单
- 容易继续改可爱化风格
- 不容易一不小心变成真实汽车
第七步:建模过程中遇到的坑
过程中也踩到了两个很典型的问题。
1. 材质属性兼容问题
第一次建模时,代码里用了 shadow_method,但当前 Blender 版本对应的材质对象没有这个属性,导致直接报错。
处理方式很简单:
- 去掉不兼容设置
- 保留必要的
blend_method
2. 父子关系叠加缩放问题
第一次把零件都 parent 到车身时,车身本身还带有非 1 的缩放,于是子对象在世界坐标里被放大错位,轮子和装饰位置都跑掉了。
根因定位后,采用了更稳妥的方式:
- 先创建每个对象
- 对需要的对象先应用缩放
- 再做组合与摆放
这样模型结构才恢复正常。
第八步:从基础巴士到“更像玩具”
模型先做出基础版本,然后又做了两轮增强。
第一轮增强
- 删除默认
Cube和Sphere - 把小巴士移到更容易查看的位置
- 强化蓝白配色
- 增加白色侧条纹
- 增加车灯和腮红
- 切换视口到材质预览
第二轮增强
继续往“可爱”而不是“写实”方向走:
- 前后保险杠
- 左右车门和把手
- 后视镜
- 顶部双色小警示灯
- 尾灯
- 前脸格栅
第三轮增强:正脸表情
为了让它更像儿童玩具,而不只是一个低模小车,最后又补了正脸表情:
- 更大的眼睛底
- 黑色瞳孔
- 正脸腮红
- 一个笑脸
这样整个小巴士的气质就从“简化汽车模型”变成了更明显的“玩具角色车”。
这次流程里最重要的经验
如果只看结果,这篇文章像是在讲怎么做一个玩具车。但我觉得真正有价值的,是这几个经验:
1. MCP 连上不等于真正能用
最容易被误判的是:
- 端口开了
- 配置也写了
- 工具看起来也注册成功了
但真实请求未必能执行。
一定要做至少一次真实读写验证,比如:
- 读当前场景
- 创建一个简单对象
- 再把场景读回来
2. Blender 的后台模式和 GUI 模式差异很重要
某些插件依赖主线程回调或 UI 循环,后台模式并不等价于真正的 Blender 运行状态。
这个问题如果不先定位,很容易误以为是:
- 插件坏了
- MCP server 坏了
- 网络坏了
实际上只是运行模式不对。
3. 用 AI 控 Blender 时,先做最小可验证动作
比起一上来就说“帮我做一个完整场景”,更稳妥的做法是:
- 先读场景
- 先创建球体
- 再做一个简单模型
- 最后再加风格和细节
这样每一步都知道链路在哪一层是通的。
最终效果
最后得到的是一辆:
- 蓝白主色
- 圆润卡通比例
- 小巴士轮廓
- 带玩具化表情
- 适合继续做展示图或继续精修
它不追求工业设计精度,而是更偏“儿童玩具模型”的方向,这恰好也是自然语言建模特别适合的场景。
总结
这次最大的收获不是“装上了 Blender MCP”,而是把整条链路真正走通了:
- 从本地安装
- 到 Codex 接入 MCP
- 到 Blender GUI 实际连通
- 到真实建模
- 再到风格化迭代
如果只是把工具装上,最多算完成了 30%。
真正值得记录的是:它已经可以被稳定地拿来做事情了。
接下来如果继续往下走,很自然的方向会是:
- 给这个玩具小巴士摆展示镜头和灯光
- 继续做更多玩具角色车
- 把 Blender MCP 接进更完整的内容生产流程
比如:先让 AI 生成 3D 小道具,再把它们整理成博客里的可视化案例。这时候,MCP 就不只是“一个工具连接器”,而会变成整个创作工作流的一部分。
发表回复