标签: 3D

  • 用 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 就不只是“一个工具连接器”,而会变成整个创作工作流的一部分。