通过训练神经网络"书写"可执行的领域特定语言程序,将过程化建模的可编辑性与深度生成模型的多样性结合,生成物理上合法、结构可编辑的三维零件组装形状。
三维人工智能需要大量高质量形状,但手工建模耗时极高。两种主流生成路线形成鲜明对比:
程序执行产生几何,结果高质量且可编辑,但程序难以从头编写,且单个程序捕获的形状变化有限。
从数据中学习,能捕获广泛的形状变化,但输出含噪声伪影(浮空零件、不相交几何),且表示不可解读。
训练神经网络写程序:程序捕获可解读、可编辑的结构变化;神经网络捕获过程化难以表达的跨形状相关性。
一个 ShapeAssembly 程序 = 一族形状。连续参数的连续变化产生连续的几何变化,离散结构跳变由程序结构本身编码。深度模型在离散程序空间中学习分布,而非直接在三维几何空间中学习。
ShapeAssembly 是一种命令式汇编语言,形状通过逐行执行语句来增量构建。语言中唯一的数据类型是长方体(Cuboid),代表零件的代理几何体。所有位置和朝向通过 attach 操作隐式确定,无显式坐标赋值。
一个 ShapeAssembly 程序由四类块顺序组成:
attach(c₁, c₂, x₁,y₁,z₁, x₂,y₂,z₂):将 c₁ 在其局部坐标 \((x_1,y_1,z_1)\) 处的点与 c₂ 在其局部坐标 \((x_2,y_2,z_2)\) 处的点对齐,同时可能平移、旋转或缩放 c₁ 以满足约束。参数均归一化至 \([0,1]\) 区间对应长方体各面。
非叶节点长方体可作为另一个子程序的包围体(BBlock)。程序递归展开形成树状层级,叶级长方体对应原子零件。这一设计使同一层级内的程序共享更多结构,提升生成模型的学习效率。
由于 ShapeAssembly 使用命令式语义(每行立即生效),整个执行过程端到端可微:输出几何相对于程序中连续参数(长方体尺寸、attach 坐标)的梯度可以直接计算,支持通过梯度下降优化程序参数拟合目标点云。
为获得训练数据,需从 PartNet 数据集中的层级零件图提取规范化的 ShapeAssembly 程序,分三步:
attach 和 squeeze 语句的执行顺序影响最终几何,因此引入接地附着顺序(Grounded Attachment Order):
多个合法顺序之间通过语义标签、对齐标志、面中心偏好依次打破平局,确保每个形状只对应一个规范程序。
生成模型是一个层级序列 VAE(Hierarchical Sequence VAE)。编码器将层级 ShapeAssembly 程序嵌入潜在空间;解码器从潜在向量生成新程序。
解码器接收父节点潜在码 \(z_{\text{par}}\) 初始化 GRU 隐藏状态,然后逐行预测 63 维向量,各子网络职责如下:
| 子网络 | 输出维度 | 功能 |
|---|---|---|
f_cmd | 7 | 命令类型 one-hot:<start>、<stop>、Cuboid、attach、squeeze、translate、reflect |
f_cube | 4 | 长方体 l/w/h/aligned 参数(以包围体尺寸为条件) |
f_idx | 11×3 | 命令涉及的 3 个长方体索引(11 选 1:10 个零件 + bbox) |
f_att | 3×2 | attach 的两个 (x,y,z) 坐标,以涉及长方体为条件 |
f_sqz | 8 | squeeze 的面(6 选 1)和 (u,v) 坐标 |
f_sym | 5 | 对称轴(3 选 1)、translate 的成员数和范围 |
每预测一个 Cuboid 命令后,\(f_{\text{child}}\)(另一个 MLP)决定该长方体是否应递归展开为子程序,并生成子程序的初始潜在码 \(z_{\text{child}}\)。这使模型能自动学习层级分解粒度。
与仅使用语法约束的 Grammar VAE 不同,ShapeAssembly 使用程序语义过滤:若预测的 attach 违反接地顺序,触发回溯寻找合法参数;若无法修复,在无条件生成时拒绝整个样本,在插值时跳过该行。
在 PartNet 的 Chair、Table、Storage 三类形状上与 StructureNet(层级零件图 VAE)和 3D-PRNN(循环网络直接预测长方体序列)进行对比。
| 类别 | 方法 | % Rooted ↑ | % Stable ↑ | % Fool ↑ | FD ↓ |
|---|---|---|---|---|---|
| Chair | 3D-PRNN | 73.1 | 50.9 | 12.60 | 39.30 |
| StructureNet | 89.7 | 74.9 | 4.04 | 64.79 | |
| Ours | 94.5 | 84.7 | 25.06 | 22.34 | |
| Table | 3D-PRNN | 71.2 | 29.4 | 2.12 | 140.07 |
| StructureNet | 94.4 | 76.8 | 3.94 | 173.35 | |
| Ours | 96.2 | 85.9 | 33.21 | 49.07 | |
| Storage | 3D-PRNN | 44.8 | 20.8 | 4.62 | 94.08 |
| StructureNet | 96.2 | 75.0 | 5.04 | 92.85 | |
| Ours | 95.3 | 83.7 | 13.50 | 31.72 |
沿随机高频插值序列测量平均步进大小(越小越平滑):
| 类别 | 方法 | 几何平滑度 (CD) ↓ | 程序平滑度(编辑距离)↓ |
|---|---|---|---|
| Chair | StructureNet | 0.0384 | 3.90 |
| Ours | 0.0384 | 1.33 | |
| Table | StructureNet | 0.0474 | 4.75 |
| Ours | 0.0389 | 2.48 | |
| Storage | StructureNet | 0.0512 | 4.29 |
| Ours | 0.0482 | 2.60 |
| 变体 | % Rooted ↑ | % Stable ↑ | % Fool ↑ | FD ↓ |
|---|---|---|---|---|
| Flat(无层级) | 95.0 | 60.0 | 11.58 | 77.45 |
| No Order(无规范顺序) | 82.4 | 58.4 | 12.36 | 64.17 |
| No Align(无对齐标志) | 94.6 | 84.6 | 28.68 | 29.32 |
| No Macros(无对称宏) | 92.0 | 77.9 | 19.56 | 36.78 |
| No Reject(不拒绝无效样本) | 92.9 | 79.7 | 23.36 | 20.63 |
| Ours(完整) | 94.5 | 84.7 | 25.06 | 22.34 |
关键发现:移除层级(Flat)大幅降低真实度(FD 77.45 vs 22.34);移除规范顺序(No Order)对所有指标均有损害;对称宏对 Table/Storage 类别影响更显著。
将其他方法的输出反向解析为 ShapeAssembly 程序,比较紧凑度(行数)和宏函数使用率:
利用可微分解释器对程序连续参数做梯度优化,使执行结果最小化与目标点云的 Chamfer 距离。与仅用前向解码器推断的结果相比,梯度优化进一步减小拟合误差,同时维持程序的物理合法性。
核心洞见(作者视角):"一个程序,多个形状;高度规律,同时高度多样。"程序作为数据表示是在规律性与多样性之间取得最佳平衡的根本途径。