用途
text-to-blender 用于把自然语言请求转化为 Blender 中的实际工作。它本身是一个编排器(Orchestrator):读取用户请求,判断需要哪些能力(建模、材质、灯光、渲染、导出等),按正确顺序链式加载相应子技能,并通过 Blender MCP 执行。
适用场景:用户提出任何 3D 创建、修改、灯光、渲染、动画或导出任务,或任何合理应在 Blender 中完成的工作。
主要能力
- 意图识别与子技能路由:根据用户意图加载对应子技能的 SKILL.md 并遵循其模式,多个意图可链式加载多个子技能。
- 多技能协调:复杂任务(尤其是参考/模板/品牌类工作)在确定执行顺序前先加载 blender-skill-harmonizer,由其负责优先级、交接产物与冲突策略。
- 质量改进循环:当用户认为输出不达标、问题反复出现,或要求在重试前改进技能栈时,先加载 quality-refinement-autoloop,把证据转化为可复用的经验教训,并在明确要求时修补通用技能/文档/版本,然后再恢复 Blender 修复循环。
- 世界环境重置:每次场景构建开始时把世界重置为中性基线,避免上一次运行遗留的损坏 HDRI / Environment Texture 节点污染渲染。
- 真实尺寸查询:在生成 Python 之前查阅 references/common-object-dimensions.md,避免凭猜测确定物体比例。
- 可视化验证:渲染后必须目视检查主体是否可见可辨、比例是否符合真实参考、构图是否合理、材质是否有可见变化。
- 视口材质预览:场景组装完成后把视口切换到 Material Preview,让用户看到实际材质。
使用方式
- 识别意图:判断需要哪些能力。
- 检查前置条件:MCP 服务器是否可达、场景状态如何。若无法连接,需启动所选后端的 add-on socket 与匹配的 MCP 客户端进程后重试;官方 MCP 要求 Blender 5.1+。
- 重置世界为已知良好基线。
- 在生成 Python 前查询主体的真实世界尺寸。
- 路由到子技能:用宿主文件读取工具加载相关子技能并遵循其说明。
- 按专业顺序排列工作(见下方装配顺序)。
- 用所选后端的代码执行工具运行生成的 Python。
- 用所选后端的场景/物体检查与截图或渲染工具进行验证。
- 迭代:若视觉检查发现明显问题,先修复并重新渲染,再报告成功。
- 向用户报告具体数字以及可查看的证明渲染路径。
意图 → 子技能路由(示例)
- “做一个 X 的 3D 模型” → blender-modeling(第 1 步)
- “根据这张线框图” → wireframe-to-3d(第 1 步)
- “用这些材质 / 让它看起来像 X” → blender-materials(建模之后)
- “打光 / 影棚布光 / 电影感” → blender-lighting(几何体存在之后)
- “主视觉 / 相机角度 / 景深” → blender-cameras(灯光之后)
- “渲染 / 出图” → blender-rendering(最后视觉步骤)
- “动画 / 随时间移动旋转” → blender-animation(几何体之后)
- “导出为 glTF / FBX / OBJ / 用于网页 / 用于 Unity” → blender-export(最后一步)
- “搭建场景 / 制作级质量结果” → blender-pro-workflow(最先,指导全局)
- “我是新手 / 不知从何开始” → blender-pro-workflow(最先)
- “不达标 / 还是不对 / 同样的问题又出现” → quality-refinement-autoloop,然后 blender-skill-harmonizer(最先:学习、净化、修补,然后重试)
- “精确匹配这些模板 / 线框 / 纹理” → blender-skill-harmonizer,然后参考特定的适配技能(最先:建立事实来源关卡)
多意图示例:“建模一把剑并加材质,戏剧性打光,导出为 glTF” → blender-pro-workflow → blender-modeling → blender-materials → blender-lighting → blender-export。
专业装配顺序
- 参考 + 计划
- 块面搭建(基础几何体 + 相机 + 构图)
- 锁定相机(选焦距、取景)
- 灯光 v1(三点布光:主光/补光/轮廓光)
- 细化几何体
- 材质 v1(先平色,把明度调对)
- 灯光 v2(颜色 + 比例)
- 细节阶段
- 最终渲染(生产级采样 + 降噪)
- 合成(调色、眩光、暗角)
- 导出(面向目标平台)
代码执行规则
- 每次调用都是全新命名空间,只有 bpy 预导入,需重新导入 math、bmesh、numpy 等。
- 通过稳定名称识别物体,不要用 Python 变量。
- 检查后端响应状态与 stdout,打印结构化输出以便解析。
- 分块执行,每次调用 180 秒超时,每块约 5–20 行。
- 使用 Blender Studio 命名约定:GEO-、MAT-、LGT-、CAM-、ARM-、COL-,左右用 .L / .R 后缀。
命名约定
- GEO-:几何体/网格对象
- MAT-:材质
- LGT-:灯光
- CAM-:相机
- ARM-:骨架(绑定)
- COL-:集合
- WGT-:自定义骨骼形状/控件
适用场景
任何涉及 Blender 的 3D 创建、修改、灯光、渲染、动画或导出任务。
限制
- 不适合:重度自定义 GPU 工作 / 编写渲染引擎(应使用 Blender 现有引擎);实时游戏逻辑(应直接用 Unity / Unreal);从自然语言进行雕刻笔触(原文在此处截断,未提供完整内容)。
- 纯配方基础几何体只能产生可辨认的轮廓,无法生成人脸;用户要求“人/角色/脸/人物”时,应建议使用实际人体基础网格或委托 Blender 角色艺术家,不要假装球体加特征像人。
- 官方 MCP 要求 Blender 5.1+。
- 渲染或导出报告成功前,必须确认文件确实存在。
- 数值验证不足以判断渲染正确性,必须进行可视化验证。
常见失败模式与处理(摘要)
- MCP 超时:把失败块拆得更小。
- 代码执行错误:读错误、修那一行、重试。
- 下一次调用找不到对象:用了 Python 变量而非 bpy.data.objects['name']。
- 渲染太久:降低采样、启用自适应采样、降低分辨率。
- 文件不在预期路径:使用绝对路径并用 shell 工具 ls 验证。
- 导出后材质异常:使用了非 Principled BSDF 节点,应仅用 Principled 重建材质。
- 'Action' object has no attribute 'fcurves':Blender 5.x 分层 Action,需遍历 action.layers[].strips[].channelbags[].fcurves。
- BLENDER_EEVEE_NEXT 被拒绝:Blender 5.x 改回 BLENDER_EEVEE,使用 try/except 回退。
- KeyError: 'Subsurface IOR' 等输入名:Blender 5.x 将部分 BSDF 输入标记为 enabled=False,需通过迭代而非字符串键访问。
- Error: Cannot render, no camera:scene.camera 为 None,渲染前始终运行 ensure_camera() 守卫。
- 用户报告“场景是灰色/看不到材质”:视口默认 Solid 着色模式忽略材质,渲染本身正确;组装后把视口设为 Material Preview。
- 用户报告“材质很平/没有纹理”:平面 PBR 颜色缺少表面变化,添加程序化纹理。
- 主体比例错误:编排器跳过了尺寸查询,生成建模代码前务必阅读 references/common-object-dimensions.md。
- 细长主体渲染成细杆:相机正对细轴,旋转物体使宽轴朝向相机。
- 刀刃/尖刺尖端呈“凿平”而非尖点:顶部顶点缩放至零但未合并,需正确收尖并 remove_doubles。
- 彩色玻璃渲染成平面/金属感:仅在 Base Color 上设色,真实彩色玻璃需要 Volume Absorption;Roughness=0.0 会产生镜面高光,应使用 0.02–0.05。
- 玻璃内部渲染成黑色:transmission_bounces 太低,设为 24。
报告格式
完成后具体报告:创建的对象与面数、灯光及其角色、渲染文件路径/大小/尺寸/渲染时间、以及任何警告(自动减面、命名冲突、回退材质等)。