BrepGen: A B-rep Generative Diffusion Model with Structured Latent Geometry
Simon Fraser University; Autodesk
一句话总结
BrepGen 把 CAD 的边界表示(B-rep)编码成一棵「结构化隐几何树」,用 Transformer 扩散模型自顶向下(面→边→顶点)逐级去噪节点特征,靠节点复制隐式编码拓扑,去噪后再合并重复节点恢复拓扑,从而首次用扩散模型直接生成含自由曲面、双曲面的水密 B-rep CAD 模型。
研究背景
几乎每个人造物都始于 CAD 模型,而 B-rep(Boundary Representation,边界表示)是描述 CAD 形状的主流格式,广泛用于自由曲面建模。一个 B-rep 由相互连接的面(face)、边(edge)、顶点(vertex)组成:面是参数曲面的可见区域,被相邻边围成的闭环裁剪;边是参数曲线被起止顶点裁剪的可见段;邻接关系被完整记录,共同描述最终实体。能直接生成 B-rep 的系统将极大简化 CAD 设计流程,减少对专业设计师和 CAD 软件的依赖。
但直接生成 B-rep 非常困难,主要有两点:其一,与三角网格不同,B-rep 含多种参数曲面与曲线类型(平面、圆柱、圆锥、球、圆环、Bezier、NURBS 等),每种几何有各自的定义和参数,难以统一生成;其二,所有几何之间的拓扑关系必须正确,才能构成水密(water-tight)实体。因此已有 CAD 生成模型大多绕开 B-rep,转而生成「草图 + 拉伸」(sketch and extrude)操作序列,但这只能表达有限范围的 3D 形状(线、弧、圆加拉伸)。少数能直接生成 B-rep 的方法如 SolidGen,也被局限于高度简化的棱柱形、非自由曲面。BrepGen 的目标就是用扩散模型无条件地同时生成正确的几何与拓扑,突破到自由曲面。
核心方法
BrepGen 的关键是把任意 B-rep 转成一棵固定图拓扑的层次树(结构化隐几何),其中节点特征编码几何、复制节点隐式编码拓扑;再训练 Transformer 扩散模型自顶向下顺序去噪,去噪后检测并合并「近似重复」的节点来显式恢复拓扑,最终输出 B-rep 实体。
flowchart TD
A[B-rep CAD 模型] --> B[结构化隐几何树<br/>根→面→边→顶点]
B --> C[几何编码: 节点特征 = 包围盒位置 + VAE 隐码]
B --> D[拓扑编码: 交配复制 + 关联复制]
C --> E[潜在扩散模块<br/>4 个 Transformer 去噪器]
D --> E
E --> F[自顶向下顺序去噪<br/>面位置→面几何→边位置→边-顶点几何]
F --> G[后处理: 检测并合并重复节点<br/>恢复关联与交配关系]
G --> H[几何微调 + B-Spline 拟合 + 缝合]
H --> I[水密 B-rep 实体]
核心设计分三块:结构化隐几何树、潜在扩散模块、B-rep 后处理。
技术细节
结构化隐几何:几何编码
树有三层(面、边、顶点),根节点代表整个 CAD 实体。每个节点特征由「全局位置」和「局部形状隐码」组成:
- 面 \(F\):底层是参数曲面 \(S(u,v):\mathbb{R}^2\rightarrow\mathbb{R}^3\)。仿照 UV-Net,在 UV 域上按 \(N\times N\) 均匀网格采样 3D 点得到形状特征 \(F_s\in\mathbb{R}^{N\times N\times 3}\);位置特征 \(F_p=[x_1,y_1,z_1,x_2,y_2,z_2]\) 是轴对齐包围盒的两个角点。把点归一化到规范立方体 \([-1,1]^3\) 后,用一个 UNet 骨干的 VAE 把 \(F_s\) 压成隐码 \(F_z\),面节点特征即 \(F=[F_p,F_z]\)。注意该特征不含裁剪边界与内孔,这些由关联的边给出。
- 边 \(E\):底层是参数曲线 \(C(u):\mathbb{R}\rightarrow\mathbb{R}^3\),沿曲线采样得 \(E_s\in\mathbb{R}^{N\times 3}\),同样用包围盒 \(E_p\) 与 VAE 隐码 \(E_z\),得 \(E=[E_p,E_z]\)。
- 顶点 \(V\):就是一个 3D 坐标 \(V=(x,y,z)\)。
结构化隐几何:拓扑编码(节点复制)
拓扑不是显式生成的,而是靠「节点复制」隐式编码,有两种复制方式:
- 交配复制(Mating Duplication):编码「面-边-面」「边-顶点-边」邻接。被两个面共享的边,会在两个父面下各出现一个特征完全相同的边子节点;共享顶点在其父边下同样复制。这把 B-rep 的图结构变成树。生成后,跨不同父节点合并「几何相似」的边/顶点节点即可恢复交配关系。
- 关联复制(Association Duplication):一个面的边数、一个实体的面数都是变化的,且推理时未知。方法为每层预设一个最大分支因子,随机复制节点直到填满到最大子节点数(duplication padding)。相比零填充,这种复制填充在推理时产生更少的缺面缺边,随机选择被复制节点还能防过拟合。生成后在同一父节点下删除几何相同的子节点即可恢复关联关系。
潜在扩散模块
先用两个 VAE(面用 2D 卷积 UNet、边用 1D 卷积)把形状特征压到低维隐码:设 \(N=32\) 密采样,下采样 8 倍得 \(F_z\in\mathbb{R}^{4\times 4\times 3}\)、\(E_z\in\mathbb{R}^{4\times 3}\),边再与两端点顶点拼成联合隐码 \(E_{zv}\in\mathbb{R}^{4\times 3+6}\)。VAE 用 MSE 重建损失加 KL 正则训练。
扩散遵循 DDPM,前向过程给所有节点加噪:
\[q(\mathbf{x}_t|\mathbf{x}_0)=\mathcal{N}(\mathbf{x}_t;\sqrt{\bar{\alpha}_t}\mathbf{x}_0,(1-\bar{\alpha}_t)\mathbf{I}),\quad \mathbf{x}_t=\sqrt{\bar{\alpha}_t}\mathbf{x}_0+\sqrt{1-\bar{\alpha}_t}\boldsymbol{\epsilon}_t\]
加噪后编码的几何与拓扑都被破坏(重复节点特征不再相同)。生成时不一次性生成全部几何,而是把节点分布分解为一串条件分布,自顶向下顺序去噪:
\[p(\mathbf{x})=p(F,E,V)=p(E_{zv}|E_p,F)\,p(E_p|F)\,p(F_z|F_p)\,p(F_p|\varnothing)\]
即边以面为条件、局部几何以全局位置为条件。四个去噪器共享 Transformer 骨干(12 层自注意力、12 头、隐藏维 1024),损失为标准 DDPM 的噪声回归项:
\[L=\mathbb{E}_{t,\mathbf{x}_0,\boldsymbol{\epsilon}_t}\left[\lVert\boldsymbol{\epsilon}_t-\boldsymbol{\epsilon}_\theta(\sqrt{\bar{\alpha}_t}\mathbf{x}_0+\sqrt{1-\bar{\alpha}_t}\boldsymbol{\epsilon}_t,t)\rVert^2\right]\]
条件注入不用 cross-attention,而是利用树中预定义的父子关系直接做 token 相加:设边 \(j\) 是面 \(i\) 的子节点,则
\[\hat{\mathbf{E}}_{p,j}\leftarrow\mathbf{E}_{p,j}+\mathbf{F}_i\]
其中 \(\mathbf{F}=\mathrm{MLP}(W_p F_p)+\mathrm{MLP}(W_z F_z)\)。方法不用可学习位置编码,配合训练时随机打乱使模型对 token 排列不变。
B-rep 后处理
用一组启发式规则找出重复节点并显式解码拓扑:面包围盒角点欧氏距离 < 0.08 且解码点逐点平均差 < 0.2 判为重复面并删除;同法在每个父面下合并唯一边;再从叶到根遍历找不同父节点下的重复子节点(即共享边、顶点)确定交配关系。之后做几何微调:顶点位置对其重复副本取平均,边被缩放平移以对齐起止顶点(反向则翻转),面被缩放平移以最小 Chamfer 距离贴合所有关联边。最后用 OpenCascade 的 GeomAPI_PointsToBSplineSurface/GeomAPI_PointsToBSpline 把点拟合成 B-Spline 曲面与曲线,闭环裁剪面并缝合成最终实体。在 RTX A5000 上,DeepCAD 数据平均约 5 秒生成一个 B-rep,家具/ABC 复杂数据约 10 秒。
家具 B-rep 数据集
作者与 Onshape(PTC)合作,从其公开设计库导出并人工清洗,构建了包含 6,171 个 B-rep、覆盖 10 个常见家具类别的 Furniture B-rep Dataset。据称这是首个既含自由曲面、又带规范类别标签的 B-rep 3D 模型数据集。
实验结果
在三个数据集评测:DeepCAD(草图拉伸得到的机械件)、Furniture B-rep(更复杂的家具)、ABC(工业设计的多样部件)。指标分两类:分布指标(Coverage 覆盖率、MMD 最小匹配距离、JSD)与 CAD 指标(Novel 新颖、Unique 唯一、Valid 水密有效比例)。
DeepCAD 无条件生成上,BrepGen 全面超过 DeepCAD 与 SolidGen:
| 方法 | COV % ↑ | MMD ↓ | JSD ↓ | Novel % ↑ | Unique % ↑ | Valid % ↑ |
|---|---|---|---|---|---|---|
| DeepCAD | 65.46 | 1.29 | 1.67 | 87.4 | 89.3 | 46.1 |
| SolidGen | 71.03 | 1.08 | 1.31 | 99.1 | 96.2 | 60.3 |
| BrepGen | 73.87 | 1.04 | 1.28 | 99.8 | 99.7 | 62.9 |
| BrepGen (ABC) | 57.92 | 1.35 | 3.69 | 99.7 | 99.4 | 48.2 |
(MMD、JSD 均已乘 \(10^2\)。)BrepGen 在覆盖率、MMD、JSD 上都更优,生成结构更复杂、开放/自交区域更少,且新颖唯一比例高,说明生成结果并非训练集复制。新颖性分析(用 LFD、Chamfer 距离检索最相似训练形状)显示生成形状真实又区别于训练数据。
可控生成方面展示了三个应用:类别条件生成(用 classifier-free guidance 在家具数据上按类生成,能产出 SolidGen 做不到的自由曲面);CAD 自动补全(受 RePaint 启发,给定部分面自动补全整体,把离散部件连成水密实体,还能微调用户输入使其连接);设计插值(拼接两模型的面 token、扩散 150 步后逐步替换,实现从源到目标平滑的几何+拓扑变化,直接以 B-rep 输出)。
消融研究:(1)两阶段 vs 统一生成——若先用多项式扩散单独生成拓扑(把面-边、边-顶点邻接矩阵当作 \(128\times128\) 二值图生成),有效率仅 6.2%,说明无条件生成正确邻接矩阵极难;而给定真值拓扑的 BrepGen*(COV 78.16、Valid 79.8)明显更好,印证「统一几何+拓扑联合生成」优于分两阶段。(2)后处理阈值网格搜索显示,包围盒阈值在 0.06~0.1、形状特征阈值约 0.2 时水密率最佳。失败案例分三类:缺面导致非水密、边/面自交导致裁剪后破损、解码点噪声导致几何抖动破碎。
贡献与局限
贡献:提出结构化隐几何表示,用层次树 + 节点复制把 B-rep 的几何与拓扑统一进一种格式,让连续几何回归隐式恢复离散拓扑;提出可生成自由曲面与裁剪曲线的潜在扩散模块;发布首个含自由曲面且带类别标签的家具 B-rep 数据集;在多个基准上达到直接 B-rep 生成的 SOTA,并首次生成自由曲面、双曲面 B-rep。
局限:只支持单体实体,多体装配模型留待future work;过近(归一化到 \([-3,3]\) 后阈值 0.05,约 7 bit 量化 1 格)的面或边会被误合并;不保证水密,去噪收敛慢可能留小缝或整面缺失;启发式后处理虽快且能处理复杂数据,但学习式后处理可能更鲁棒。
延伸思考
BrepGen 最巧妙之处在于「用节点复制把图拓扑塞进固定树、再用几何相似度反向恢复拓扑」这一转换:它把「离散拓扑生成」这个扩散模型不擅长的组合问题,改造成「连续几何回归 + 后处理去重」,从而绕开了直接生成邻接矩阵的极低有效率(消融里仅 6.2%)。这种「让几何相似性隐式承载拓扑」的思路,本质上是把结构约束下沉到几何空间,用连续域的扩散优势去覆盖离散域的组合难题,对其他「几何 + 拓扑」耦合的生成任务(如线框、网格、场景图)都有借鉴价值。同时它也暴露了该范式的软肋——阈值合并带来最小间距限制、去重不保证水密,这些都指向一个方向:把目前的启发式后处理换成可学习、可保证有效性的模块,可能是这类结构化几何扩散走向工程可用的关键一步。