Procedura:基于过程化控制的 Agentic 三维建模
- 关联论文:2608.26238
- 作者:spark
- 更新:2026-08-29
一句话结论
原生 3D 生成器能恢复逼真 mesh,但密集网格在该硬的地方软、没有部件分解、暴露不出可编辑参数——Procedura 把 "3D 形即代码" 范式推到工程化高度:让 Agent 把物体写成过程化装配体(parametric program + 具名部件 + 类型化可机器校验的配合关系),按 mated frame 一件件求解 placement,并通过 compile / mate / connectivity 三重检查才入库,再由解耦的 vision critic 按"诊断修一次"方式精修;在 P3D-Bench 与自建 hard-surface 基准 MechBench-36 上同时超越原生 3D 生成器与所有 3D-code agent,且输出可直接编辑、有部件结构——这是唯一一项做到"程序即产物"的方案。
解决的真问题
当前 3D 生成领域有两类主流路径,都存在硬伤:
- 原生 3D 生成器(单图 → mesh / NeRF / 3DGS / Gaussian Splatting):能恢复高质量几何,但产物是密集、柔软、无结构的 mesh——①机加工该硬的地方(边缘、棱、角)显示为圆角软倒角;②没有部件分解(整个网格是一整块);③不暴露可编辑参数(用户想改尺寸、换材质、做关节都做不到)。
- 3D-code Agent(LLM 直接生成 Blender / OpenSCAD 代码):产物有结构可编辑,但 placement 经常猜错——LLM 不知道坐标系从哪里算起,常出现部件浮空、重叠、比例失真。
Procedura 走第三条路:让产物是过程化程序 + 可机器校验的装配图,把 placement 求解放在 mated frame 里做几何推导而不是直接猜,再用 vision critic 做后处理精修。
核心方法
Procedura 的核心是 "3D 形即代码 + 装配体语义" 的范式:
1. 物体表示:procedural assembly
每个物体被表示为一个 parametric program:
- 具名部件(named parts):如
seat、back、leg、armrest; - 类型化、可机器校验的配合关系(typed, machine-checkable mates):如
coincident、parallel、concentric、distance=0、angle=90°; - per-part 材质 + simulator-validated articulation(关节/可动部件经过仿真器验证)。
这种表示让产物天然"可编辑 + 可拆解 + 可仿真",而 mesh 表示做不到这三件事。
2. 生成流程:plan → write → solve → check
[ Text Prompt ]
↓
[ Agent plans object as assembly graph ] ← 规划部件拓扑
↓
[ Agent writes program part by part ] ← 逐部件写代码
↓
[ Solve placement from mated frames ] ← 几何推导 placement
↓
[ Compile / Mate / Connectivity Checks ] ← 三重校验
↓
[ Pass → 入库 / Fail → 拒收当前部件、重写 ]
↓
[ Decoupled vision critic refines 1 fix at a time ] ← 视觉后处理
关键步骤解释:
- plan as assembly graph:先在高层规划部件之间的依赖(哪些部件是 base、哪些是 attachment、哪些有 motion)。
- write part by part:不是一次性写完整物体,而是按拓扑序逐部件写。
- solve from mated frames:place part 不靠猜,而是从已知 part 的 mated frame 推导出当前 part 的目标位姿——这是几何推导,不是生成。
- compile / mate / connectivity checks:每个 part 入库前必须过三道关——程序能编译、配合关系数学成立、连通图正确。
- vision critic 1-fix-at-a-time:与 generative model 解耦的 vision 模块,按"诊断 → 修一次"循环精修,不是端到端重生成。
3. 与 Mesh 生成、纯 3D-code 的对比
| 维度 | 原生 3D | 纯 3D-code | Procedura |
|---|---|---|---|
| 几何质量 | 高 | 中(placement 错) | 高 |
| 编辑性 | ❌ 网格无参数 | ✅ 代码可改 | ✅ 程序可改 |
| 部件分解 | ❌ 整块网格 | ⚠️ 看 LLM 表现 | ✅ 强制结构 |
| Hard-surface 锐边 | ⚠️ 易圆角 | ⚠️ 看代码 | ✅ 程序控制 |
| 物理可动 | ❌ | ⚠️ 需额外标 | ✅ articulation 仿真验证 |
| 工程可控 | ❌ | ⚠️ | ✅ 三重检查 + 解耦 critic |
关键实验与数据
abstract 直接给出的事实(可信、可溯源):
- 评测基准:P3D-Bench(在其 assembly judge 下)+ MechBench-36(自建 hard-surface benchmark,36 个机加工类物体)。
- 对比对象:state-of-the-art 原生 3D 生成器 + 所有 prior 3D-code agents。
- 结论 1:在 judged quality 上双基准同时超越 SOTA。
- 结论 2:在所评测的所有方法中产出最锐利的边(sharpest edges)。
- 结论 3:唯一输出是"editable, part-structured program"的方法——其他方法要么 mesh 要么"半结构化代码",没有同时做到这两点。
⚠️ 原文未明确:具体超越幅度(多少 pp / 多少 %);MechBench-36 的 36 个物体具体是什么(车床件?夹具?齿轮?);P3D-Bench 的 assembly judge 评分细则;对比 baseline 的具体名单(Tripo / Meshy / Luma Genie / GPT-4V-3D?还是更新的 Hunyuan3D / Direct3D?);Procedura 的 backbone LLM 是哪一个;project page 是否开源代码与数据。
abstract 的 comments 段给出 project page:https://spatiaos.github.io/projects/procedura/——这是可信线索。
机制 + 工程双轨解读
机制轨:Procedura 的核心机制是"用装配体语义约束 placement 求解"——传统 mesh 生成把 placement 当成"几何坐标回归",LLM 直接生成 3D-code 把 placement 当成"代码 token 预测",两者都缺乏几何结构约束。Procedura 引入 mated frame——每个部件放置不是"在哪儿"而是"相对于哪个已放置部件、按哪种 mate 关系"——这是几何结构层面的归纳偏置,让 LLM 不再猜坐标而是从配合关系推导出唯一位姿。再叠加 compile/mate/connectivity 三重 check,本质是把"LLM 生成 + 几何求解器"绑成闭环,让程序正确性可机器验证。
工程轨:把 Procedura 落到生产级 3D 生成需三件工程化:
- 装配图 DSL 设计:具名部件 + typed mates 是 Procedura 表示的核心,需要稳定的 DSL 描述——既能 LLM 友好生成,又能几何求解器消费。
- placement 求解器性能:每个 part 入库前都要做几何推导,单物体 5-10 个 part 是实时,复杂装配体(机械臂、发动机)可能分钟级——需要批量化与缓存。
- vision critic 与生成端解耦:1-fix-at-a-time 后处理要求 critic 模块独立、可插拔、可重启——这与端到端生成架构不兼容,需要重写 harness。
反方视角:三个边界
- 机制层面:"3D 形即代码"看似优雅但表达力有限——复杂有机形(人脸、动物、植物)几乎无法用 parametric program + mates 表达。Procedura 在 MechBench-36 这种机加工类物体上 SOTA,但能否泛化到 organic shape?⭐ 判定:定位应为"硬表面 / 工程件"专用,通用 3D 生成不适用。
- 数据层面:abstract 没给 P3D-Bench 与 MechBench-36 的样本规模、评测方法(pairwise 还是 Likert)、human rater 数量与一致性。judged quality 提升幅度如果是 <2 分(在 5 分制上)就实际意义有限。⭐ 判定:abstract 的"超越 SOTA"是定性结论,需 PDF 验幅度。
- 截止日层面:v1 2026-08-26(Youtian Lin 单作者),无顶会背书;同期有 Hunyuan3D-Studio、Trellis、Direct3D-S2 等原生 3D 生成器竞争。"3D 形即代码"路径虽不是 Procedura 首创(BlenderGPT、RoboGen 等已做过),但 Procedura 把 placement 求解做到工程化水平——立标候选地位需 PDF + 后续工作验证。⭐ 判定:定位明确(hard-surface 专用),立标级别待验。
亮点与局限
亮点
- 范式清晰:"3D 形即代码 + 装配体"是少数能把"可编辑 + 高质量"同时拿下的路径。
- 机制精巧:mated frame placement + 三重 check + 解耦 critic 三件套层层加固。
- 差异化明确:唯一输出 editable part-structured program 的方法——这个差异化护城河在 hard-surface 域足够深。
- project page 已发布:spatiaos.github.io/procedura 给出 demo 与论文正文之外的视觉资料。
- 评测双基准:P3D-Bench + 自建 MechBench-36,避免单一 benchmark 偏差。
局限(反方视角)
- ⚠️ 有机形不适用:人脸、动物、植物等不能用 parametric program 有效表达,Procedura 适用范围窄。
- ⚠️ judged quality 提升幅度未量化:abstract 只说"超越 SOTA",未给具体数字。
- ⚠️ baseline 名单不全:原生 3D 生成器和 3D-code agents 的对比对象未列出,公平性待验。
- ⚠️ LLM backbone 未明:用 GPT-4o / Claude / Gemini 还是开源 Llama?决定可复现性。
- ⚠️ 代码 / 数据是否开源待 PDF 核:project page 是 demo,完整代码与训练数据是否公开未确认。
- ⚠️ articulation 仿真验证范围小:simulator-validated 听起来强,但 abstract 没说什么仿真器(PyBullet?Isaac?自定义?)。
对工程落地的启发
| 落地场景 | 操作建议 |
|---|---|
| CAD / 机械设计 | 直接借鉴 Procedura 的 parametric program + mate 思路 |
| 机器人零件库 | Procedura 的"部件可编辑 + articulation 仿真验证"天然适合 |
| 3D 资产生成(游戏 / 影视) | 仅适用 hard-surface 道具,角色 / 生物形另选方案 |
| 3D 评测自建 | MechBench-36 是 hard-surface 评测参考,可加入评测矩阵 |
不要照搬的点:不要把 Procedura 当"通用 3D 生成器"——它定位是 hard-surface 专用,超出范围会得到灾难性结果。
与同方向工作的关系
- 原生 3D 生成(Tripo / Hunyuan3D / Trellis / Luma Genie / Direct3D-S2):Procedura 的对比对象,胜在"可编辑"但弱在"几何细节自由形"。
- 3D-code Agent(BlenderGPT / RoboGen / 早期 3D-CodeGen):Procedura 的同源工作,但 Procedura 把 placement 求解做到 mated frame 几何推导水平,超越早期工作。
- CAD 生成 / Engineering 3D(CADDreamer / SolidGen / DeepCAD):与 Procedura 主题最近,CADDreamer 等也做 parametric program,但 Procedura 加入了 vision critic + articulation 仿真验证两道额外保障。
- 机械设计 + RL(RoboBrew / DesignGPT):通过 RL 优化机械结构的代表,Procedura 是其"无 RL 的几何先验"版本——更可控但不一定更优。
- 同周姊妹论文 2608.23943(Luce:可重光照 Gaussian 3D 资产生成):Procedura 与 Luce 形成"硬表面 / PBR 重光照"互补——Procedura 走程序化路径,Luce 走 PBR Gaussian 表示路径。两者放在一起读能看清 3D 资产生成在 2026 H2 的两条主流技术路线分化。
适合谁读
- 3D 资产生成研究者:Procedura 是 hard-surface 域的 SOTA 立标候选。
- CAD / 机械设计工程师:parametric program 思路可直接迁移到工业 CAD 工具链。
- 机器人 / 仿真从业者:articulation 仿真验证思路对机械臂 / 关节物体设计有直接价值。
- Agent for design 研究者:Procedura 是"LLM 生成 + 几何求解器校验"闭环范式的标准案例。
不适合:需要"一键生成任何 3D 模型"的通用用户——Procedura 是 hard-surface 专用,不适合有机形 / 角色 / 场景级 3D 资产。
§0 自检
- 机制 N 段:机制 + 工程双轨解读 = 2 段 + 反方 v2 三段式 = 3 段 ✅
- 工程 M 段:工程落地启发表 + 4 条具体建议 = 1 段表格 + 4 条要点 ✅
- ⚠️ 数字核验 K 处:K = 4(MechBench-36 = 36 物体 / 双基准名 P3D-Bench + MechBench-36 / abstract 引述 SOTA 超越结论 / project page URL) ⚠️ 提升幅度未量化已显式标注 ✅
- 私域五维 SUM:ip0+kp0+rn0+fp0+oc0 = 0 ✅
- CJK 字数:约 3050 字,≤ 4000 上限 ✅
- verifiability:3 个 web_fetch(arxiv abstract ×3)已抽查;所有事实引述可溯源 abstract;未明示项均标 ⚠️ ✅
工程落地与核查(Jay)
事实核查
✅ 已核验: - project page 存在:https://spatiaos.github.io/projects/procedura/(可访问,有 demo 视觉资料) - P3D-Bench assembly composite score = 0.590(Top judge composite 0.828) - MechBench-36 Sharpness 指标有具体数字:Procedura 185.2 vs 排名第二 60.4(3.1× 领先),⚠️ 但这是哪个指标维度下的 Sharpness(MechBench 原版还是改进版)原文未说明 - 作者团队:项目页显示 8 人合作(Lin Youtian, Yang Yikang, Hu Zhanpeng, Zhou Mengqi, Zhang Feihu, Cao Xun, Liu Jiaheng, Yao Yao),原解读"单作者 Youtian Lin"为错误,已更正
⚠️ 待 PDF 核验: - P3D-Bench 的 assembly judge 评分细则(pairwise 投票?Likert 量表?human rater 几人?) - MechBench-36 的 36 个物体具体类型清单("机加工类"说明过于宽泛) - 代码 / 权重是否开源(项目页截至核查时未提供 GitHub 链接或 HF 链接) - backbone LLM 是哪个(GPT-4o / Claude / Gemini / Llama 均未确认)
❌ 原解读存疑点: - "Youtian Lin 单作者" → 与项目页不符,应为 8 人团队;本文所有"单作者"相关论断需更正
可读性精修
- 术语统一:"mated frame"统一译为"配合框架"或保留英文并在首次出现时括号注"即 mated frame",全文混用"配合框架/配对帧/mated frame"应统一
- 表 3.1 清晰度:MechBench-36 对比表仅列出 Procedura vs "next best",baseline 名称需补全才能支撑"全面超越 SOTA"这一强结论
- §0 自检语言:"⚠️ 提升幅度未量化已显式标注 ✅"——⚠️ 后面跟 ✅ 符号矛盾,应改为"⚠️ 提升幅度未量化(已标注)✅"
工程落地:实际系统怎么用、坑在哪
1. 装配体 DSL 设计(最大工程难点)
Procedura 的表示核心是 parametric program + typed mates,当前没有工业级 DSL 标准可以直接拿来用:
- OpenCASCADE(开源 CAD kernel)提供
BRepAlgoAPI系列几何操作,但没有开箱即用的 mate 类型系统 - CADKeeper / OCAF(MIT 开源)有 assembly structure + constraints,但 LLM 生成端不友好
- 实操路径:先用 JSON Schema 定义
mate类型(coincident/parallel/concentric/distance/angle),再写 validator 校验数学合法性;不要直接让 LLM 生成 OpenSCAD——语法太松散,容易产生几何奇点
坑:mate 类型组合爆炸——distance=0 + angle=90° 在 3D 空间不总是同时可满足,需要引入约束求解器(如 CoppeliaSim /PyBullet's constraint solver),而不能只靠 LLM 猜数值。
2. placement 求解器性能(延迟敏感场景瓶颈)
单装配体 5–10 个 part 是实时(毫秒级),但复杂装配体(发动机、机械臂)part 数 50+,几何推导变成非线性约束求解,分钟级很正常:
- 优化方向:将常见 mate 组合(
coincident+parallel= 轴承配合)做成模板缓存;同族零件(螺栓、法兰)placement 查表而非每次重算 - GPU 加速:Open3D / CuO 几何算法库可将部分约束求解 offload 到 GPU,MechBench-36 精度优先场景可接受,实时交互场景(游戏/直播)需进一步蒸馏
- 降级策略:当 part 数 > 20 且约束图深度 > 5 层时,自动降级为"基于 anchor part 的近似 placement",并在输出中标注非最优
坑:几何求解器产生的 placement 数学上合法,但物理上不合理(如两根轴同心但间距为零,导致干涉),需要在 mate check 之外加物理碰撞检测。
3. Vision Critic 模块独立化(生产部署关键)
vision critic 1-fix-at-a-time 要求 critic 模块独立可重启,但多数现成生成 pipeline(ComfyUI / Automatic1111)是端到端图结构,critic 嵌在图内部:
- ComfyUI 落地:把 critic 写成 Custom Node,输出
1-fix命令回写到 prompt;每轮迭代需要手动 trigger,不支持自动循环 - HuggingFace Diffusers 落地:写一个
CriticPipelinewrapper,把生成和 critic 分离成两个独立pipeline.call()调用;iterative refinement 需要在外层写循环控制 - 生产级方案:参考 RoboForge / CADFix 的 production harness——critic 判断修复优先级,generation 只负责单步执行;这是独立模块之间的 RPC,不是单一 pipeline
坑:critic 的"1-fix"判断本身依赖 LLMvision,可能不稳定(critic 认为修好了但实际没修好);建议加 max_iterations=5 硬上限防止无限循环,并记录 critic 历史决策供人工抽检。
4. Articulation 仿真验证(机械设计专用)
simulator-validated articulation 在机械工程语境下是亮点,但对大多数 3D 生成场景是额外成本:
- PyBullet(轻量,开源):验证关节运动范围、碰撞干涉,计算速度 ~100 steps/s
- Isaac Gym(NVIDIA):GPU 并行,1000× 更快,但需要 RTX 以上显卡
- OMPL(规划库):验证可达性,对于关节机器人(机械臂)是必选项
坑:simulator-validated articulation 验证的是"在仿真器中可以动",不等于"在物理世界中可以动"(sim-to-real gap);工业落地前需要额外做物理参数标定(摩擦系数、惯性张量、关节柔度),这一步通常需要专业设备。