Blender 程序化编辑:放置成功率 0.5% → 15.5%,差的是一个沙箱
多模态大模型已经能当交互 agent,但精确、程序化的 3D 图形编辑一直训不出来,原因不是模型不够聪明,是没有确定性、状态可验证的执行环境——大家只能对着闭源 API 瞎试。
香港科技大学与商汤的 BlenderFORGE(arXiv 2611.10768,2026-11-07)就是补这个环境:让开权重 MLLM 通过写 Blender Python(bpy)代码去编辑显式的 Blender 场景。
一、它挑的四类任务,都是"状态可验证"的
| 任务族 | 要改什么 | 怎么验证 |
|---|---|---|
| 物体放置(Placement) | 把物体挪到该在的位置 | 比较"被移动物体集合"与真值集合(Jaccard 距离)+ 位姿距离(加权欧氏-测地) |
| 形态键(Shape key) | 改形变参数 | ShapeKey-L1:形态键值向量的 L1 距离 |
| 灯光(Lighting) | 改颜色与强度 | 颜色差 + 能量差 |
| 材质(Material) | 改材质参数 | 参数向量化的 L1 距离 |
评测协议沿用 BlenderGym:每次 episode 的输入包括起点场景 s 的文字描述、起点场景的多视角渲染图(带相机编号)、以及目标场景 s_g 的渲染图。模型在编辑过程里只能通过两个工具跟环境打交道:blender_code_executor 与 blender_preview_renderer——也就是 ReAct 式的工具循环。
每个任务族 200 条测试任务;API 超时或服务端错误导致的 episode 会从分子分母同时剔除,所以一个模型每族可能不到 200 条;模型自己写的代码报错不算一次废弃,可以继续迭代。
二、三个部件:数据、沙箱、优化
- 可扩展的扰动式数据生成管线:用精选资产与大规模 3D 场景仓库造"起点—目标"配对。
- 隔离的 Blender 沙箱:确定性执行代码、导出结构化场景状态、闭环回读。
- 训练策略:先 SFT(只微调语言模型,冻结视觉编码器与多模态投影层,用 Swift),再联合训练;奖励就用上面那套距离度量。
三、结果:同一个 backbone,差别很大
论文给了完整对照表,最值得看的两行(放置任务的三个严格度阈值):
| 模型 | 放置阈值 1 / 2 / 3 |
|---|---|
| Qwen3.5-9B(原始) | 0.50 / 1.50 / 3.00 |
| Qwen3.5-9B(在 BlenderFORGE 数据集上训练) | 15.50 / 29.50 / 40.00 |
论文自己总结的"8B 相对基线提升"在放置任务上是 +8.50 / +22.50 / +34.50(三个阈值)。有意思的是它在某些视觉距离指标上反而"变差"了(如 PL、N-CLIP 的某些列),说明它学到的是精确操作而不是"看起来更像"。
四、最该读的是失败样例
论文附了失败模式分析(failure.png)——这类附录比主结果有用:它把"模型会错在哪"写清楚了。
(图源:arXiv 2611.10768,下同。)
对做工具的人是提醒:代码能跑 ≠ 结果对。沙箱能保证"不崩",保证不了"改对了"。
五、我们的整理
5.1 为什么"沙箱 + 状态回读"是这类系统的地基
程序化 3D 编辑有三个必要条件,缺一个都训不出来:
- 确定性:同一段代码必须产生同一场景,否则奖励信号是噪声;
- 可回读:能把"现在场景长什么样"导出成结构化数据,才能算距离;
- 可迭代:代码报错要能继续试,而不是整局作废。
这三条跟"模型多强"无关,是环境工程。BlenderFORGE 的贡献就在于把这三条做成了可训练件。
5.2 对我们的两条直接启发
- 给 AI 的 3D 工具要能"回读自己的操作":我们做 viewer 时习惯只做"看",但 agent 需要的是"查询"——查询物体列表、变换、材质参数、灯参数。能查询的几何才可验收。
- 别用渲染相似度当唯一指标:论文数据说明,视觉指标好看和操作正确是两回事;后者要靠结构化状态比对。
5.3 如果要复现这套评测,需要的东西
| 需要 | 具体是什么 |
|---|---|
| 场景素材 | 显式场景(物体、材质、灯光都已存在,不是从零生成) |
| 评估口径 | 四类任务各自的距离函数(P-CD / ShapeKey-L1 / 材质参数 L1 / 色彩能量差) |
| 沙箱 | 能确定性执行 bpy 且能导出结构化状态 |
| 工具面 | 至少两个:代码执行器 + 预览渲染器(ReAct 循环) |
| 规模 | 每族 200 条测试任务(论文口径) |
缺“工具面”的系统会退化成“一次性生成一段大代码”,然后靠运气;改成“写一小段 → 看一眼 → 再改”,成功率会差很多。
5.4 边界
- 任务都在显式场景(有物体、有材质参数的场景)里做,不涉及从零生成模型;
- 每族 200 条测试集,规模不大,结论适用于"编辑能力"而不是"通用 3D 理解";
- 沙箱是 Blender 专用的,换 DCC(Maya/Houdini/Unreal)要重建同类环境。
六、先看看被改过的场景
模型改完的场景导出成 GLB / FBX 之后,用 3D Viewer 在浏览器里核对:位置对不对、材质和灯是不是按参数来的。要检查点云或扫描结果,用 LAS Viewer;做雕刻类改造就用 Sculpt。
同主题阅读
- LLM 只写 JSON 房间规格:程序化地牢的可玩性,交给代码判
- Frankensplat:浏览器里训练高斯泼溅,快 1.73 倍、画质低 0.87 dB
- 3D 生成 LoRA 微调:9.3M 参数,鞋底 F-score 从 0.276 到 0.803
Sources
- Zilin Guo 等《BlenderFORGE: Framework for Optimizing Reactive 3D-Graphics Editing Ability of MLLMs》,arXiv 2611.10768,2026-11-07 https://arxiv.org/abs/2611.10768(全文 HTML:https://arxiv.org/html/2611.10768v1)
- 项目页:https://sensetime-fvg.github.io/BlenderFORGE/