Conference

N-BVH: Neural ray queries with bounding volume hierarchies

Philippe Weier, Alexander Rath, Élie Michel, Iliyan Georgiev, Philipp Slusallek, Tamy Boubekeur

Saarland University; Adobe

一句话总结

N-BVH 把一个多分辨率哈希网格神经模型嵌入到浅层包围盒层次结构中,用光线查询(可见性、深度、法线、外观)替代原始三角形几何,在无缝接入标准路径追踪管线的同时,对所表示的几何实现一个数量级以上的压缩。

研究背景

物理级渲染引擎的核心操作是光线追踪,而复杂场景中海量的多边形、纹理以及为加速求交而构建的层次结构,会带来沉重的显存开销,在 GPU 有限的空间上难以管理。

神经表示在压缩复杂信号方面表现突出,但已有方法大多针对点查询设计(例如评估以有向距离场表示的形状),难以直接嵌入以光线求交为基本操作的渲染管线。作者的关键观察是:只要训练样本落在感兴趣信号的近旁,任何神经压缩模型都能被高效优化。在渲染场景中,感兴趣的信号就是三维表面,而它们通常已经被组织在包围盒层次结构(BVH)中用于加速求交。由此,作者提出把先进的神经数据结构嵌入 BVH,得到面向光线查询的 Neural BVH(N-BVH)。

方法

整体框架:用一个覆盖整个几何的全局神经模型来回答光线求交查询,并用一个浅层 BVH 提供近表面的高效训练与推理。BVH 在训练时充当”探针机器”,仅在表面附近生成”光线查询/响应”训练对;在渲染时则继承传统 BVH 的空区跳过与前后向遍历特性,到达叶节点时触发一次神经查询,避免了完整深层 BVH 的遍历与存储。

flowchart TD
    A[输入几何] --> B[经典 BVH 构建 base BVH]
    B --> C[树切优化 tree-cut]
    C --> D[切分节点训练]
    D -->|按误差分裂高误差节点| C
    C --> E[N-BVH 浅层层次<br/>叶节点为空心包围盒]
    E --> F[光线遍历 N-BVH]
    F --> G[到达叶节点采样光线-盒交段]
    G --> H[多分辨率哈希网格取特征]
    H --> I[小型 MLP 解码]
    I --> J[可见性/深度/法线/外观]

关键设计:

  • 光线查询编码:最朴素的做法是用光线进出包围盒的两点参数化查询,但这些编码点离真实交点太远,导致模糊与精度损失。作者转而在光线与盒的相交区间内做分层点采样,在每个采样点从多分辨率哈希网格收集特征,将拼接后的特征向量(拼接顺序编码了光线方向)送入一个小型 MLP 解码出结果。只要采样点中有一个落在表面附近即可获得高质量重建;实践中每节点固定采样三个点在推理速度与质量间取得较好平衡。

  • 误差驱动的 N-BVH 构建:不从头构建层次,而是复用现成的输入几何 BVH(base BVH),把任务简化为在其中寻找一个”树切”。构建自顶向下交替进行”模型训练”与”节点分裂”:每步先在当前切上的节点内训练模型若干次,再分裂误差最大的节点,直至达到目标节点数。节点误差取训练损失 \(q\) 与随机光线命中概率 \(p\) 的乘积,并用对数阻尼的排序启发式 \(r = 2\log q + \log p\) 来避免对大而低损失的节点过度分裂。

  • 训练与损失:可见性作为二分类问题用 sigmoid 加二元交叉熵损失;交点位置采用相对节点范围的局部一维距离并用 \(L_1\) 损失(一维信号比三维更易学习);外观 albedo 用相对 \(L_2\) 损失,法线用 \(L_1\) 损失。混合管线的组合损失为 \(L = 2L_{\text{visibility}} + 2L_{\text{distance}} + L_{\text{normal}} + L_{\text{albedo}}\),对可见性与距离加权更高以获得更好的几何重建。

  • 细节层次(LoD):在构建时定义多个 base BVH 树切,每个对应一个 LoD;由于分裂调度让树切节点数呈指数增长,在固定训练迭代间隔注册新 LoD,得到 LoD 之间近似线性的深度增长,训练时随机选取一个树切进行训练。

  • 实现:基于纯软件 CUDA 波前路径追踪器,使用 tiny-cuda-nn 半精度;MLP 含 4 个隐藏层、每层 64 神经元;哈希网格 8 层、基分辨率 \(8^3\) 到最大 \(1024^3\)、每层 4 个特征。混合渲染采用两级结构(TLAS 下挂多个 BLAS),每个 BLAS 可以是经典 BVH 或 N-BVH,二者产出同类型的交点数据。

实验结果

在混合路径追踪的六个场景上与经典 CUDA 路径追踪器对比。作者刻意选取最复杂的资产做神经表示。下表为忠实摘录(•◦ 与 •◦ 为两种不同节点数/质量权衡的配置,FLIP 为误差,越低越好):

场景 经典 PT 时间/显存 混合配置 A 时间/显存/FLIP 混合配置 B 时间/显存/FLIP
Chess 6.6 ms / 329 MB 10 ms / 36 MB / 0.057 19 ms / 37 MB / 0.019
Bonzai 28 ms / 853 MB 29 ms / 181 MB / 0.069 102 ms / 186 MB / 0.023
Exhibition 13 ms / 2.69 GB 14 ms / 181 MB / 0.027 34 ms / 182 MB / 0.010
Andalusian Room 28 ms / 309 MB 31 ms / 108 MB / 0.088 55 ms / 109 MB / 0.055
City Block 24 ms / 1.55 GB 22 ms / 180 MB / 0.039 80 ms / 185 MB / 0.014
Statuette 4.9 ms / 642 MB 3.7 ms / 10.8 MB / 0.020 12 ms / 11.2 MB / 0.007

整体渲染时间约为经典路径追踪的 2 至 4 倍,但显存大幅下降,使得原本无法上传到低端 GPU 的复杂场景得以渲染。仅就神经表示的几何部分,压缩率可超过 1000 倍;就整个场景则为 5 至 100 倍。重建质量与性能主要与 N-BVH 节点数相关,对哈希网格大小的敏感度较低;整套管线训练仅需几分钟。

在神经外观预滤波应用中,作者用 N-BVH 替换 Weier 等人(2023)方法中的稀疏体素可见性网格,保留其外观网络。结果在结构化与非结构化几何上均取得相当或更优的重建质量,同时训练更快、显存更低(例如 Bay Cedar 场景训练从约 11 分钟降至约 3.5 分钟),渲染约 2 倍加速。

亮点与局限

亮点:

  • 从”点查询”转向”光线查询”的神经压缩范式,天然契合标准光线追踪管线,可与经典 BVH 在同一场景中混合、重叠使用。
  • 复用现成 base BVH 做误差驱动的树切优化,无需显式访问几何,自动在难学区域加深、易学区域变浅,对输入网格的实际细分密度不敏感。
  • 支持可见性、深度、法线、外观等多信号,并自带简单的多尺度 LoD 方案;训练仅数分钟,压缩率高。
  • 相比边折叠、聚类等专用几何简化方法,在同等显存下对复杂场景中多样信号更鲁棒。

局限:

  • 假设神经节点内几何的凸性(或凹性)以保证求交估计正确,节点数很低时可能造成二次光线原点的错误偏移(但随树加深该问题趋于消失,实测中即使 1.2k 节点也未出现)。
  • 每节点固定采样点数是一个约束,缺乏按难度自适应的采样。
  • 渲染速度仍不及原生路径追踪;且当前无法压缩动态几何,朴素方案需每帧重训。

延伸思考

作者仅凭光线查询结果拟合表示,因此该方法原则上适用于任何”可被求交”的表面表示,并能继承 BVH 结构未来的改进。一个值得关注的方向是把 N-BVH 落到硬件光追上,实现”边遍历树、边即时推理”的融合算子,避免每次推理的上下文切换开销。此外,如何将神经光线查询扩展到动态内容,是把该范式推向实时交互与生产管线的关键一步。