Conference

ADS: Random Sampling of Occupancy Functions using Adaptive Delaunay Scaffolding

Suzuran Takikawa, Leo Foord-Kelcey, Oliver Oxford, Nicholas Vining, Alla Sheffer

University of British Columbia; NVIDIA

一句话总结

ADS 用一个渐进细化的 Delaunay 四面体骨架同时产出占据函数(Occupancy Function)表面的伪随机采样点和连接它们的等值面网格,且比现有方法少用约一个数量级的函数查询。

研究背景

占据函数是一种紧凑的隐式几何表示,把空间点分为内部(\(1\))与外部(\(-1\))两类,形状即两类的边界。它在神经隐式表示、快速缠绕数(Winding Number)、CSG 等场景中广泛出现,下游任务通常需要对其表面做稠密随机采样或提取网格。

难点在于占据函数只给出离散内外标号,既无法可靠地算到表面的距离,也没有可靠的梯度(对占据函数做有限差分噪声大且不可靠),甚至判断一个孤立点是否在表面上都很困难。现有两类方法各有短板:

  • 射线投射类方法能产出随机采样,但样本之间没有连接关系,无法得到网格。
  • 网格类方法(如 Marching Cubes、占据对偶轮廓 ODC)能得到等值面网格,但采样呈明显的网格轴向偏置。

两类方法都需要海量函数查询才能达到较高精度,而经典 Delaunay 精化网格化方法在这一设定下慢得无法接受(论文中一个例子需要约 36 分钟采 22K 点)。

方法

核心观察是:采样占据表面等价于构造大量分布良好的短”跨越边”(Crossing Edge)——两端点分居表面内外的线段。每条跨越边至少与表面相交一次,交点即表面样本,可用二分搜索在 \(O(\log(1/\epsilon))\) 次查询内定位到精度 \(\epsilon\)。

ADS 用 Delaunay 骨架来批量生成这些跨越边,理由有三:3D Delaunay 中每个顶点平均约有 \(15\) 条邻接边(远多于六面体网格的 \(6\)),大幅提高邻居落在表面另一侧的概率;维持 Delaunay 性质会让新引入的跨越边平均更短;含跨越边的四面体必与表面相交,其局部片拼起来就是闭合等值面,可用 Marching Tetrahedra 抽取。

给定占据函数 \(\phi: \mathbb{R}^3 \rightarrow \{-1, 1\}\) 定义在有界域 \(\Omega\) 上,流水线分四阶段:

flowchart TD
    A["初始化: Poisson 盘采样 + Delaunay 四面体化"] --> B["边精化: 定位并细分长跨越边"]
    B --> C{"所有跨越边 < 阈值 tau ?"}
    C -->|"否"| B
    C -->|"是"| D["表面抽取: Marching Tetrahedra 生成网格"]
    D --> E["网格引导局部精化: 依法向差异加采样"]
    E --> F["最终采样点 + 等值面网格"]

初始化:用 Poisson 盘采样在包围域内布一组稀疏、间距良好的点并做 Delaunay 四面体化,在每个顶点查询 \(\phi\) 得到内外标号。初始点集刻意稀疏以省查询。

边精化:迭代找出长于阈值 \(\tau\) 的跨越边并沿边插入新顶点,Delaunay 会自动把新点连到附近顶点。每轮迭代平均把跨越边数量放大 \(3\) 到 \(4\) 倍。为避免把顶点放得离表面太近(会造成样本聚簇、破坏随机性),引入”障碍测试”(Barrier Test):对候选中点 \(m\) 查询其沿边左右两小步点 \(m_l, m_r\) 的符号,若符号相同则加入中点,若不同(说明 \(m\) 太贴表面)则改在靠近表面一端 \(1/3\) 处插点。所有查询批量向量化以充分利用 GPU。待所有跨越边短于 \(\tau\),再对每条边二分搜索定位交点。

表面抽取:用 Marching Tetrahedra 变体从骨架抽三角网格。由于每条网格边所在骨架三角形有两条短于 \(\tau\) 的边,三角不等式保证等值面边长不超过 \(2\tau\)。

网格引导局部精化:边精化只保证相邻样本间距上界,可能漏掉细薄或高曲率细节。方法据等值面网格上顶点法向的差异来定位欠采样区域——顶点法向取其相邻等值面三角形法向的平均,并剔除边两端共享的三角形以更敏感地反映局部曲率。当边两端法向夹角超阈值、边足够长、且相关骨架四面体边足够长时才标记精化,在对应四面体的外心或边中点插入新顶点,再重复边精化与抽取。一般一轮精化即足够。

方法还可扩展到带上/下距离界的隐式函数:有上界时可免去障碍测试;有下界时二分搜索可替换为球体追踪(Sphere Tracing),进一步提速。

实验结果

在 150 个输入上评测,覆盖三类占据函数来源:ShapeNet 学出的神经占据函数、缠绕数函数、神经显式函数交集(NESI),各 \(50\) 个;每个输入在 \(\tau = 0.05, 0.03, 0.02\) 三种分辨率下采样。精度用 \(L_1\) 倒角距离(Chamfer Distance)衡量。下表为跨所有分辨率与数据集聚合(“all”)的对比,各基线参数被调到产出精度最接近但仍略差于 ADS 的结果:

方法 倒角距离 \(\times 10^3\) ↓ 输出样本数 ↑ 函数查询数 ↓ 时间(s) ↓
随机射线投射 (RRS) 1.16 114,111 13,144,777 3.02
均匀射线投射 (IUS) 1.14 118,109 11,286,081 2.83
占据对偶轮廓 (ODC) 1.15 85,877 15,260,424 3.04
Marching Cubes (MC) 1.06 83,719 10,161,394 2.20
ADS (本文) 1.02 133,308 873,215 1.25

ADS 在取得更低倒角距离的同时,平均比各基线少用 \(91\%\) 到 \(94\%\) 的函数查询,速度显著更快,平均每个表面样本仅约 \(6.5\) 次查询。它比网格类方法平均多产出约 \(40\%\) 样本,适合做拒绝采样以逼近蓝噪声等目标分布。谱分析显示其差分域谱接近白噪声、经轻度 Poisson 盘过滤后更佳,而 MC/ODC 即便过滤后仍有明显偏置。对比经典 Delaunay 精化(CGAL)差距悬殊:神经占据函数上 CGAL 需约 \(2.5\) 小时,ADS 仅 \(0.71\) 秒达到同精度。运行环境为 AMD Ryzen 9 9900X + NVIDIA RTX 2080,平均显存约 \(1.3\)GB。

亮点与局限

亮点:

  • 首个对占据函数同时产出随机采样与连接它们的等值面网格的方法,且查询量降低约一个数量级。
  • 唯一支持曲率自适应采样的方法,高曲率区自动加密。
  • 对占据函数来源无先验假设,可直接用于不同编码方式的输入;实现简单,作者承诺开源。
  • 障碍测试、批量向量化查询等设计有效降低聚簇并契合 GPU 神经推理管线。

局限:

  • 依赖初始采样至少与表面尺度弱相关;当形状远薄于函数域时初始骨架内部点太少会导致重建变差,需要更多精化轮次或更密初始骨架缓解。
  • 表面上仍存在样本聚簇现象,障碍测试只能缓解而非根除。

延伸思考

ADS 把”隐式表面采样”重新表述为”生成大量分布良好的短跨越边”,并借 Delaunay 的高连通度与短边性质把这一目标做得又快又省查询,这种把采样与网格化统一在同一几何脚手架上的思路值得借鉴。它对神经占据函数尤其有价值:当函数评估成本高(GPU 推理)时,减少一个数量级的查询直接转化为可观的时间收益。可进一步思考的方向包括:如何从根本上抑制表面聚簇以直接得到蓝噪声、如何处理远薄结构的初始化难题,以及能否把这套自适应骨架推广到时变或更高维隐式场。