Occupancy-Based Dual Contouring
KAIST
一句话总结
提出一种无需训练、面向占据(occupancy)函数的对偶轮廓(Dual Contouring)网格提取方法 ODC,通过引入二分搜索与辅助 2D 点来在不依赖距离信息的前提下恢复表面法向,从而从神经隐式占据函数中提取出高保真、带尖锐特征且流形无自交的网格,并可在数秒内完成。
研究背景
神经隐式表示(尤其是占据函数)在 3D 重建与生成中日益普及,但把占据函数转成网格一直是瓶颈。占据函数 \(\phi: \mathbb{R}^3 \to \{0,1\}\) 只输出内外二值标签,即便是神经网络给出的连续 \([0,1]\) 值也不代表距离。
- Marching Cubes 直接应用于占据函数时,因为表面交点总取网格边中点,会产生明显的阶梯状(staircase)伪影。
- 过去几十年提升保真度的工作(Extended Marching Cubes、Dual Contouring、Manifold Dual Contouring 等)大多假设输入是有符号距离函数(SDF),利用其梯度作为表面法向并用二次误差函数(QEF)定位尖角。这些方法用在占据函数上要么不可行,要么效果欠佳——因为占据函数不满足线性假设,梯度也只描述无穷小邻域、无法代表体素内部较大的表面区域。
因此,作者的目标是在保留 Manifold Dual Contouring(MDC)捕捉尖锐特征、保证流形性优点的同时,去掉它对距离与梯度的依赖,让方法真正适配占据函数,揭示神经函数中编码的真实形状。
方法
整体框架建立在 MDC 的三步流程上(1D 点搜索 → 3D 点定位 → 多边形化),核心是把其中两处依赖距离/梯度的环节替换为迭代搜索,并充分利用 GPU 对所有网格边、面、单元并行处理。
flowchart LR
A[占据函数 phi] --> B[1D 点搜索<br/>沿零交叉边二分搜索]
B --> C[2D 点搜索<br/>网格面内 line-binary 搜索]
C --> D[3D 点定位<br/>由 1D+2D 点求法向后 QEF]
D --> E[多边形化<br/>IC 四边形分割去自交]
E --> F[输出高保真流形网格]
关键设计:
1. 1D 点二分搜索(去线性假设)。 MDC 用线性插值定位边上的表面交点
\[p_e = \frac{\psi(p_{v_{in}}) p_{v_{out}} - \psi(p_{v_{out}}) p_{v_{in}}}{\psi(p_{v_{in}}) - \psi(p_{v_{out}})}\]依赖 SDF 线性。ODC 改为在零交叉边上做二分搜索:不断二分区间并保证两端保持不同的内/外标签,直到区间小于阈值(\(128^3\) 分辨率下迭代 15 次)。这充分利用了占据函数在连续空间的可查询性,而不仅限于网格点。
2. 2D 点搜索(去梯度,替代法向估计)。 这是核心贡献。QEF 定位 3D 点时假设局部平面在网格单元内延续,需要能代表体素内局部几何的法向。ODC 不用梯度,而是在网格面上搜索”2D 点”来估计法向:对同一网格面上的一对 1D 点 \(p_{e_1}, p_{e_2}\),令 \(l\) 为连接两点的直线、\(m\) 为中点,沿垂直于 \(l\) 的方向发射射线找到最近表面交点 \(q\);再从 \(q\) 沿平行 \(l\) 的两个反方向发射射线得到 \(q_1, q_2\);最终 2D 点 \(p_f\) 取直线 \(\overline{p_{e_1}q_1}\) 与 \(\overline{p_{e_2}q_2}\) 的交点。作者用 Lemma 5.1 证明在局部平坦假设下该过程能给出唯一正确的 2D 点。由于要找”离射线起点最近”的交点,无法用纯二分,故用 line-binary 搜索(先均匀采样定位区间,再二分精化)。
3. 3D 点定位。 每个 1D 点从相邻两个网格面各得到一个 2D 点;这三点共面(局部代表表面 S),由此计算平面法向,替换掉 MDC 中 QEF 里的 SDF 梯度 \(\nabla\psi(p_e)\):
\[p_{c,i} = \arg\min_{p} \sum_{e \in E^S_{c,i}} \left[ n(p_e) \cdot (p - p_e) \right]^2\]随后与 MDC 一样按单元内分区求 3D 点作为网格顶点。
4. 多边形化去自交。 MDC 常产生自交面。ODC 借鉴 Intersection-free Contouring(IC)的四边形分割技术,并将其从”每单元单一 3D 点”扩展到”每单元多个 3D 点”的情形,从而显著减少输出网格的自交面。
整个流程在 GPU 上高度并行:\(128^3\) 分辨率下约 16k 条交叉边、33k 个交叉面可同时处理,1D 搜索约 0.2 秒、2D 搜索约 1.3 秒,总体数秒内完成。
实验结果
| 在 SALAD 与 3DShape2VecSet 两个生成模型的无条件生成占据函数上评测(分辨率 \(128^3\)),指标含拟合误差 $$ | \phi-0.5 | $$、自交比例 SI、流形比例 Man. 与耗时。 |
| 方法 | SALAD $$ | \phi-0.5 | \downarrow$$ | SALAD SI(%)↓ | SALAD Man.(%)↑ | S2VS $$ | \phi-0.5 | \downarrow$$ | S2VS SI(%)↓ | S2VS Man.(%)↑ |
|---|---|---|---|---|---|---|---|---|---|---|
| MC | 0.324 | 0.00 | 100. | 2.330 | 0.00 | 100. | ||||
| IC | 0.329 | 0.00 | 21.8 | 2.292 | 0.00 | 53.2 | ||||
| MDC | 0.305 | 100. | 100. | 2.245 | 100. | 100. | ||||
| LMC | 0.484 | 0.00 | 56.8 | 8.824 | 0.00 | 72.8 | ||||
| NDC | 0.324 | 33.8 | 37.1 | 3.552 | 21.2 | 53.2 | ||||
| CDIF | 0.234 | 0.00 | 100. | 1.961 | 0.00 | 100. | ||||
| MISE | 0.237 | 23.1 | 74.2 | 1.733 | 22.3 | 82.0 | ||||
| ODC | 0.037 | 0.00 | 100. | 0.112 | 0.06 | 100. |
ODC 的拟合误差比其他方法平均小约 6 倍(SALAD)与 15 倍(3DShape2VecSet),1500 个 SALAD 网格全部无自交且流形,1650 个 3DShape2VecSet 网格仅 1 个自交、全部流形。耗时上 ODC 比 MC 慢约 1.8~4 倍,但仍在 2~3.5 秒内。
在 Myles 数据集(由绕数计算得到占据函数、有真实网格作参照)上,ODC 在网格距离 MD2、法向不一致 NIC、豪斯多夫距离 HDD、自交、流形所有指标上均取得最优(如 MD2 为 \(0.113\times10^{-6}\),显著优于次优 CDIF 的 0.562)。消融实验表明:1D 二分搜索缓解裂面、2D 点搜索显著提升细节、IC 分割进一步消除自交,逐步叠加均带来改善。
亮点与局限
亮点:
- 无需训练、无需梯度、无需距离信息,直接适配占据函数,泛化性强(学习类方法如 NDC 在跨数据集时明显退化)。
- 首创的 2D 点搜索在局部平坦假设下有理论保证(Lemma 5.1),能给出比梯度法向更贴合体素内表面的局部平面。
- 全流程 GPU 并行,\(128^3\) 分辨率数秒完成,同时保证流形性并大幅减少自交。
- 能”揭示”生成模型编码的真实形状,纠正此前因网格提取伪影造成的误判。
局限:
- 依赖局部平坦假设,对极薄/极细结构(论文中排除了部分 skinny shape)可能不够稳健。
- 相比 MC 有额外的多轮搜索开销,耗时更高(尤其 2D 点搜索需数十次函数评估)。
- 方法性能高度依赖占据函数在连续空间的可查询性,主要面向神经隐式函数场景。
延伸思考
- 2D 点搜索的思想本质是”用射线求交近似局部几何”,是否可推广到无符号距离函数或点云等其他输入表示,作为一种通用的法向估计手段?
- 该方法把网格提取质量瓶颈从”算法”转移回”函数本身”,这意味着生成模型的评测可能需要重新校准——过去被认为是模型缺陷的伪影可能只是提取误差。
- line-binary 搜索的采样次数与迭代次数是精度/速度的关键超参,能否用自适应策略(如根据局部曲率动态分配评估预算)进一步提速?
- 局部平坦假设在高曲率或多表面交汇处会失效,结合分辨率自适应或多尺度策略或许能兼顾尖锐特征与复杂拓扑。