← 返回 2026-08-28

Procedura:基于程序化控制的智能体三维建模 Procedura: Agentic 3D Modeling with Procedural Control

Youtian Lin, Yikang Yang, Zhanpeng Hu, Mengqi Zhou, Feihu Zhang, Xun Cao, Jiaheng Liu, Yao Yao 📅 2026-08-26 👍 13 2026-09-01 18:30
3D生成 CAD LLM智能体 代码生成 程序化建模

让冻结LLM把3D物体写成带类型化配合的程序化装配代码,无需3D训练

前置知识

构造实体几何(CSG)

一种用基本体素(长方体、圆柱等)经过并、交、差等布尔运算构造实体的表示方法。程序中每个面都是精确的平面或圆柱面,因此边缘在任何分辨率下都保持锋利,所有尺寸由命名参数显式控制,可随时改参数重新编译。

本文输出的不是网格而是CSG程序,锋利边缘和可编辑性都源于这种表示,理解它是理解全文所有声明的前提。

装配配合

机械CAD中描述零件如何连接的关系,如螺栓孔阵列、轴插入孔、铰链轴等,由两个零件各自的坐标系定义,并带有公称尺寸与配合等级(间隙、过渡、过盈、卡扣等,对应不同的公差偏移)。

Procedura的核心表示就是把零件用'类型化配合'连接起来,位置由配合坐标系解算而非模型猜测,这是全文最核心的概念。

LLM智能体

让大语言模型在'起草-执行-根据反馈修订'的循环中完成多步任务:写代码、运行编译器、查看渲染结果、再修改,而不是一次性输出最终答案,每一步都有工具和验证器把关。

Procedura是一个3D建模智能体框架,逐零件生成、确定性验证、批评家修订都在这样的循环里完成,需要理解智能体与单次调用的区别。

解耦批评家

让一个拥有独立提示词、独立上下文的评审模型(而非生成代码的智能体自己)来诊断输出缺陷。已有研究表明模型批评自己的输出时常漏掉自己的错误,独立评审更可能发现问题。

论文的精修循环强制'一次诊断兑换一次修改'且评审与修复分离,这是其质量保障机制的关键设计,也是消融中可观的增益来源。

漂浮体与连通分量

网格焊接重合顶点后,按共享边做并查集可划分成连通分量;与主体不相连的组件称为漂浮体,意味着零件并未真正连接在一起,模型不可打印、物理上会散架。

论文用基于包围盒跨度的连通性门控(阈值0.01)在编译期硬性拦截漂浮体,这是其几何质量验证栈的重要一环。

URDF/USD与关节化资产

URDF和OpenUSD是描述机器人或可动资产的标准格式:链接树、关节轴、限位与驱动,可导入物理仿真器(如Isaac Sim)验证运动是否合理、是否会穿模卡死。

论文的配合图天然是运动学图,能导出URDF并在Isaac Sim中做沉降、逐关节扫掠等仿真验证,这是纯网格方法做不到的加分项。

研究动机

现有3D生成分两大主流,产出都是不携带结构的裸三角形网格:一类是SDF/体素扩散的原生3D生成器(TRELLIS.2、Hunyuan3D、Direct3D-S2等),另一类是逐token写网格的自回归模型。它们能从单图恢复惊人几何,但网格是'软'的:从采样回归出的表面没有'面'和'孔'的概念,机械件应有的锋利边缘被磨圆(论文测得各原生模型的95分位二面角仅33°–73°);网格不携带任何零件归属信息,要分清'机器人手的左手指'只能靠事后分割模型,而且切分依据表面几何而非语义;也没有任何可编辑参数,改形状等于直接雕刻表面,把非专业用户拒之门外。另一条路是LLM把3D写成代码,天然参数化、按零件组织,但单次生成又盲又玩具化:极低面数、零件数出错、子装配错位;即使是近年的智能体系统,也只是用模型从渲染图里'猜'的原始变换把零件粘起来,关节轴是在几何完成后才拟合到表面上的,没有系统真正生成装配结构本身。

本文的目标是本文要验证'3D形状即代码'这一范式能否让冻结LLM在零3D训练的前提下,从文本提示生成满足三点要求的形状:一是高精度几何——程序中每个面是精确平面、每个孔是精确圆柱,边缘在任何分辨率下保持锋利;二是有意义的零件分解——分解就是模块列表本身,精确且无需额外分割模型;三是可编辑性——每个尺寸都是绑定到命名零件的具名参数,改一处参数重新编译即可。此外还要超越'只出几何':同一张装配图应进一步承载逐零件PBR材质和经物理仿真器验证的关节化,直接产出能进游戏引擎、仿真器和机器人栈的生产级资产,并在P3D-Bench与自建MechBench-36上超过原生生成器和所有既有3D代码智能体。

与已有工作不同的是,论文的独特切入是把制造装配领域的工程知识引入生成过程:将物体表示为'程序化装配'——由命名零件经类型化、机器可检查的配合(共享公称尺寸加配合公差偏移)连接的参数化程序。这把一次大的盲生成拆解为许多小的可验证步骤,每个提交都要过编译、配合测量、连通性三道确定性门。位置由配合坐标系解算公式 $T_j=F_i\cdot\Delta(\phi)\cdot F_j^{-1}$ 得到,而非让模型对着渲染图猜一个原始变换。与已有工作的本质差异在于:学习装配研究此前只把配合图当作输入(为现成人造零件预测连接关系),本文首次让生成系统主动写出这个结构;同时评审者与修复者解耦而非自我批评,且这条'完成优先、缺陷留给精修'的工程哲学贯穿始终。

核心方法

直觉上,与其让模型直接'画'出网格,不如让它写出建造网格的程序:程序是参数化的、天生按零件组织的。Procedura由同一个冻结LLM(默认Gemini 3.7 Flash,另测GPT-5.6-sol变体)驱动全部推理步骤,其余组件全是确定性代码,程序以OpenSCAD书写并用其引擎编译。流程分四段:(1)规划——先合成一张参考视图锚定后续所有阶段,一次视觉调用把物体分解为有序装配图:每个零件带snake_case模块名、细节层级(轮廓/主特征/子特征)、相对尺寸方位描述,以及与已放零件的接口声明(配合类型与共享公称);随后一次单向计划评审只允许增补或锐化描述,禁止合并、删除、改名、重排(在代码中强制)。(2)逐零件构建——每次调用只写一个零件,位置从配合坐标系解算,编译、配合、连通三道确定性门全过才提交。(3)解耦批评家精修——独立评审诊断渲染结果并给出优先级问题列表,一次诊断恰好兑换一次修改,直到无HIGH问题或放弃。(4)同一张图继续承载逐零件材质与关节化,后者在Isaac Sim中无头验证并导出USD与URDF。

核心创新是'带类型化配合的程序化装配'表示。物体表示为 $A=(P,C)$:$P=\{p_1,\dots,p_n\}$ 是有序的命名参数化CSG模块集合,$C$ 是配合集合;每个配合 $c=(i,j,\text{type},F_i,F_j,d,\phi)$ 把新零件发布的坐标系 $F_j$ 连到先前零件的 $F_i$,类型取自9种静态配合(螺栓孔阵列、轴孔、座面、法兰等)与3种运动副(转动、移动、球);两半共享同一公称尺寸 $d$,配合等级 $\phi$ 解析为带符号的毫米级偏移。两条不变式保证结构可靠:配合两半都从同一参数 $d$ 派生,改一侧永不会让另一侧失配;每种类型固定自由度签名,静态配合完全定位零件、运动副恰好留下预期运动。配合还在编译后的网格上被机器度量:接触面积 $a(c)\ge\tau_a d^2$ 且穿透深度 $\delta(c)\le\delta_{\max}(\phi)$,悬空或切入伙伴的提交都被拒绝。

方法步骤详情

构建阶段每次LLM调用只写一个零件,输出五段格式,上下文包括装配参考(参考图+提示+配合检查)、已建历史(已编译程序全文)和3D反馈(12视角零件着色渲染)。静态配合的位置不由模型猜测,而由 $T_j=F_i\cdot\Delta(\phi)\cdot F_j^{-1}$ 解算。五段文本在固定标记处确定性拼接,依次过编译门、配合门(接触面积 $a(c)\ge\tau_a d^2$ 且穿透 $\delta(c)\le\delta_{\max}(\phi)$)与连通门(漂浮体超过基线才拒),每零件最多3次尝试,耗尽带警告提交。精修时独立评审返回一行SUMMARY与带HIGH/MED/LOW标签、指名模块的问题列表;诊断置一次性闩锁,无闩锁则编辑被拒,比率维持约1:1;编辑后同周期编译查连通,$\tau=0.01$ 跨度门下 $N_{vis}>0$ 拒绝finish(ok)。材质是四次单发调用:提取约25条材质库、为41个零件分配、批评家校正、子零件色块拆分。关节化从旋转对称轴与接触区域规划关节树,导出OpenUSD与URDF,Isaac Sim无头验证,失败回喂最多8帧修订。

技术新颖性

与三类前线的本质区别:(1)对单次程序生成——本方法每次调用只解一个'把零件装到已有模型上'的小问题,且上下文里是已编译的程序全文与零件着色渲染,模型读得到精确参数和当前形态,而非盲写整个程序;消融显示去掉规划掉分最多(0.828降到0.791)。(2)对已有3D代码智能体——那些系统让模型从渲染估计原始变换粘贴零件、关节事后拟合到完成的表面上;本文把关系做成一等公民且机器可检查:放置是解出的而非猜的(消除最大漂移源),铰链就是安放两个零件的那个配合本身,关节轴从确定性几何证据(旋转对称轴、接触区域)出发而非拟合。(3)对自我精修——评审者是独立提示词与上下文的单轮调用,因为批评自己的模型携带产生错误的假设;诊断成为持久化的一等产物,且批评家带历史轨迹,能验证此前修复是否落地、标记回归。门控不变式(一次诊断兑换一次编辑)在代码层强制而非靠提示词自觉。

Procedura将文本提示变成可编辑的程序化装配:左侧为编译几何,右侧为按命名模块着色的对象
Figure 1: Procedura将文本提示变成可编辑的程序化装配:左侧为编译几何,右侧为按命名模块着色的对象
写成代码的形状天然按零件结构化
Figure 2: 写成代码的形状天然按零件结构化
Procedura总览:规划、逐零件程序化建模、解耦批评家精修三阶段
Figure 3: Procedura总览:规划、逐零件程序化建模、解耦批评家精修三阶段
配合库:零件可声明的九种静态配合特征
Figure 4: 配合库:零件可声明的九种静态配合特征
配合驱动的构建:动态上下文与逐零件装配
Figure 5: 配合驱动的构建:动态上下文与逐零件装配
基于跨度的连通性检查:为何不用体积
Figure 6: 基于跨度的连通性检查:为何不用体积
来自参考图的逐零件PBR材质
Figure 7: 来自参考图的逐零件PBR材质
在Isaac Sim中验证的仿真就绪关节化
Figure 8: 在Isaac Sim中验证的仿真就绪关节化

实验结果

MechBench-36上,Procedura综合0.828居首,几何0.799、美学0.827、CLIP 82.67领先,GPT-5.6-sol臂0.797;最强原生生成器TRELLIS.2为0.810,Adam CAD 0.799,单发同模型仅0.792;微调型CAD-Coder与cadrille崩溃至0.135和0.092。边缘差距最直观:锐边长度158.08为次强代码方法的2.6/3.1倍,95分位二面角97.97°/105.28°,而TRELLIS.2仅73.1°。与同模型单发配对,美学+0.105(p=0.019)、CLIP +1.80(p=0.011),GPT臂不显著(p=0.56)。P3D-Bench的203例两臂全解,综合0.590±0.009与0.575±0.010,对最强全覆盖基线GPT-5.5的0.524优势数倍于区间,几何轴领先最大(0.490对0.392)。消融:去精修0.800、去规划0.791、去3D反馈0.819。精修案例HIGH问题4→3→2单调下降。18个关节化对象14个通过全部动力学阶段(各关节≥97%行程、URDF重导入通过),4个失败。

MechBench-36结果:统一渲染装置与哈希盲评下的主对比
Table 1: MechBench-36结果:统一渲染装置与哈希盲评下的主对比
P3D-Bench装配任务结果
Table 2: P3D-Bench装配任务结果
MechBench-36消融
Table 3: MechBench-36消融
与LLM驱动的3D生成定性对比(六个基准物体)
Figure 9: 与LLM驱动的3D生成定性对比(六个基准物体)
与原生3D生成器定性对比
Figure 10: 与原生3D生成器定性对比
每次门控修改改变了什么:从草稿到精修
Figure 11: 每次门控修改改变了什么:从草稿到精修
跨基准的关节化:六对象经Isaac Sim验证
Figure 12: 跨基准的关节化:六对象经Isaac Sim验证
跨基准的纹理:36个物体中的10个
Figure 13: 跨基准的纹理:36个物体中的10个
查看结构化数据
任务指标本文基线提升
MechBench-36 多零件硬表面生成(盲评综合分) 裁判三轴均分(0–1) 0.828(Gemini 3.7 Flash臂)/ 0.797(GPT-5.6-sol臂) TRELLIS.2 0.810、Adam CAD 0.799、单发GPT-5.6-sol 0.792 领先最强原生生成器+0.018、最强既有代码智能体+0.029,且是唯一输出可编辑零件程序的方法
MechBench-36 边缘结构 Shrp60锐边长度 / Dih95二面角 158.08 / 97.97°(GPT臂185.18 / 105.28°) TRELLIS.2 134.02 / 73.11°;次强代码方法Adam CAD 57.35 / 90.41° 锐边长度为次强代码方法的2.6–3.1倍,二面角显著更陡
P3D-Bench 装配任务(203例) 装配裁判综合分(0–1,含95%区间) 0.590±0.009 / 0.575±0.010,203例全解出 最强全覆盖基线GPT-5.5 0.524;单发基座0.566/0.563 领先0.066,优势数倍于区间;几何轴0.490对0.392领先最大
消融(MechBench-36,n=36) 裁判综合分 完整0.828 去精修0.800、去规划0.791、去3D反馈0.819 每列全优;去掉规划代价最大(-0.037),装配图是承重组件
关节化仿真验证 通过Isaac Sim全部动力学阶段的对象数 14/18通过(9个另过咨询性规则) 无对照方法(纯网格基线不输出关节结构) 4个失败:1个不加载、3个驱动器不动作;各关节扫掠≥97%行程

局限与改进

作者承认三点局限:一是智能体只通过渲染图像感知构建结果,遮挡的内部与精细接触几何对所有相机都不可见,深度图、剖面或直接网格查询会强化循环;二是CSG对机械硬表面精确,但有机自由曲面的表达不如神经场自然;三是配合词表只覆盖刚性关节,计划未声明的配合无法被验证。我的补充观察:每个物体需要几十次前沿模型调用(每零件1–3次加多轮精修),成本与时延未报告;评审用与基座同族的Gemini 3.7 Flash高推理模式,尽管哈希盲评仍存同族偏置风险;评测规模有限(36个物体、18个关节化对象),MechBench-36是自建基准且提示无真值可依,裁判本身是视觉LLM;材质阶段没有量化指标(作者解释是无真值材质图);耗尽3次尝试的零件带警告提交,'完成优先'可能留下精修也修不掉的缺陷;give_up退出不受门控,'有意分离'与'失败'之间缺乏量化判据。

独立分析的弱点

独立分析的弱点:其一,感知通道单一,纯RGB渲染难以发现内部干涉与被遮挡的接触问题,改进方向是接入深度图、横剖面渲染与直接网格查询工具,让批评家能'看穿'外壳。其二,裁判与选手同源(基座与评审都是Gemini 3.7 Flash),可能存在风格自偏好,应补充人类专家双盲评分或多裁判集成交叉验证。其三,成本结构不明:逐零件生成加3次重试加多轮精修意味着单物体几十次多模态调用,工业落地需要每物体的美元成本与墙钟时间,并探索小模型分工(评审、材质分配或可用更小模型)。其四,硬表面偏向:动物、人物等有机体不在能力圈,可做混合表示——CSG骨架加局部神经场或细分曲面。其五,配合词表固定为9+3种,无法表达齿轮啮合、线缆、软体连接,可设计可扩展的配合插件或从CAD数据集学习新类型。其六,带警告提交的零件与不受门控的give_up退出,都缺一个区分'有意分离'与'构建失败'的量化判据,容易让失败静默通过。

未来方向

论文指向的方向:作者明确提出把深度图、横截面、直接网格查询纳入感知循环,用非刚性关节扩展配合词表,并探索有机自由曲面的表达方式。基于其成果还可延伸:一是把装配图做成交互式编辑界面——用户点击命名零件改参数实时重编译,这是网格方法给不了的卖点,值得做一套CAD式前端;二是零件库检索与复用:像41个命名零件这样的程序可入库,新物体从检索到的参数化零件起步,大幅降低调用数与成本;三是规模化数据引擎:经Isaac Sim验证的关节化资产可直接服务机器人学习,把'文本到可仿真资产'变成数据流水线;四是把跨度门控、配合门控等确定性验证器抽成通用3D代码智能体的公开评测套件;五是给材质阶段建立可量化评估(如与参考的材质类别一致性);六是用开源权重模型复跑管线,检验方法对基座能力的依赖程度。

复现评估

复现难度中等偏高。论文说明系统构建在自研LLM harness上,程序以OpenSCAD书写并用OpenSCAD引擎编译,模块解析、拼接、网格解析与并查集连通分析都在进程内完成,外部依赖仅Blender(渲染)与无头Isaac Sim(物理验证)——均为可获取组件。确定性部分的算法描述足够具体:五段格式解析、配合度量公式 $a(c)\ge\tau_a d^2$ 与 $\delta(c)\le\delta_{\max}(\phi)$、跨度门控 $\tau=0.01$、诊断-编辑闩锁等都可以照此重实现。主要障碍:基座是专有前沿模型Gemini 3.7 Flash与GPT-5.6-sol,多零件物体每件需几十次调用,有真实API成本;自研harness与两个基准的代码在正文中未见开源声明;MechBench-36是冻结的36条提示词集合,P3D-Bench来自文献[48]可另行获取;Isaac Sim为NVIDIA专有软件但有免费学术渠道。总体判断:方法与验证协议可复现,工程难点在于把验证栈和精修门控做得足够稳健。