Journal

Real-Time Path Guiding Using Bounding Voxel Sampling

Haolin Lu, Wesley Chang, Trevor Hedstrom, Tzu-Mao Li

University of California San Diego

一句话总结

把”每个着色点各自学一个 5D 方向分布”的传统路径引导,换成”全场景共享的一套 3D 空间辐照度体素”:每帧从相机重新注入光照信息,用离线多光源渲染里的聚类技巧做考虑可见性的体素选择,再在选中体素的包围盒上做无偏采样,从而在每像素仅 1–2 个样本、且不依赖时序复用的前提下实现能快速适应动态场景的实时路径引导(VXPG)。

研究背景

实时渲染要在复杂可见性和强间接光照下找到好的重要性采样分布,但每像素每帧只允许一到两个光路样本用于学习分布。把离线的路径引导直接搬过来非常困难:

  • 样本太少,分布学不出来。传统路径引导用 5D 空间-方向分布 \(p(\omega_i|x)\) 描述入射辐射,但每帧一两个样本根本不足以拟合这样的高维分布。于是以往实时方法只能用很简化的表示(每像素一个 Gaussian / vMF lobe,或粗糙直方图),并且严重依赖时序复用来累积信息。
  • 时序复用的代价。依赖历史帧会带来时序伪影,并且在高度动态的场景里分布”跟不上”变化,适应缓慢。
  • 稀疏贡献下的局部样本失效。作者用 Veach Ajar 场景(图 2)说明:光必须穿过半开的门才能照亮房间,绝大多数局部样本都落不到那条稀疏的高贡献路径上,靠单个着色点周围的局部样本无法重建目标分布。

作者的关键洞察是:虽然让每个着色点都自己找到高贡献区域几乎不可能,但考虑到全屏有海量着色点(1280×720),总会有那么一两个”幸运儿”命中高贡献区域。那么与其让每个点各学各的,不如把所有着色点的信息汇聚成一套全局共享的空间分布

核心方法

从方向分布转向空间分布

VXPG 不再学习每点的局部 5D 方向分布 \(p(\omega_i|x)\),而是学习一个所有着色点共享的全局 3D 空间分布,受下一事件估计(NEE)启发,用它来引导路径下一个顶点 \(y\) 的位置。这样做有两个好处:一是空间分布天然无视差(parallax-free),无需像方向分布那样做旋转对齐;二是维度更低,所需样本更少,因此可以每帧从零重建,快速适应动态场景。

但直接从 \(p(y)\) 采样会忽略可见性与 BSDF:复杂场景里大量路径会被遮挡(图 2(g)(h))。因此 VXPG 实际采样的是条件分布 \(p(y|x)\),用只存 3D 空间信息的结构去逼近所需的 5D 密度。整个采样被分解为两阶段——先选体素、再在体素内选点:

\[p(y|x) = p(y|v_i)\, p_{vs}(v_i|x)\]

其中 \(p_{vs}(v_i|x)\) 是”从着色点 \(x\) 选中体素 \(v_i\)”的条件概率(类比多光源采样),\(p(y|v_i)\) 是”在选中体素内选点”(类比面光源采样)。

包围体素(Bounding Voxels)

场景被均匀划分成体素 \(\{v_0,\dots,v_{n-1}\}\)。每个体素 \(v_i\) 覆盖场景表面的一部分 \(\mathcal{M}_{v_i}=\mathcal{M}\cap v_i\),并存储两样东西:

  • 平均辐照度 \(I_i\)——决定它作为”虚拟体素光源”有多亮;
  • 紧致的轴对齐包围盒 \(b_i\subseteq v_i\)——紧紧包住体素内的实际几何 \(\mathcal{M}_{v_i}\)。

“bounding voxel”这个名字强调了它的双重身份:\(b_i\) 提供包围体属性、体素本身提供空间划分属性,两者对第三阶段的无偏采样都必不可少。

光注入(Light Injection)。作者不用光栅化体素化或光线追踪来注入光,因为那样会给完全不可见的体素赋予正辐照度,反而把路径引到被遮挡区域。VXPG 的做法是从相机追踪路径,在间接反弹的首个命中点 \(x_2\) 处放置虚拟光——这些点必然对图像有贡献(因为它们从某些着色点可见)。体素辐照度取注入其中所有顶点的平均:

\[I_i = \frac{1}{n_i}\sum_{x_2^{\,j}\in v_i} E(x_2^{\,j})\]

其中 \(n_i\) 是注入体素 \(v_i\) 的顶点数,\(E(\cdot)\) 是每个顶点的辐照度(一次间接光照下只算直接光照)。这与 Reverse Instant Radiosity 类似,但不需要计算难以处理的 PDF。

几何注入(Geometry Injection)。用基于光栅化的体素化生成 \(b_i\)。当检测到三角形与体素相交时,计算交集的 AABB 并用原子操作合并。直接用”体素∩三角形包围盒”往往不够紧(图 4(b)),作者用 Sutherland–Hodgman 裁剪算法把三角形对体素裁剪后再算自己的包围盒(图 4(c)),得到更紧的界。注意界必须是保守的——宁可偏大也不能漏掉有非零辐射的几何,否则会漏采样。

考虑可见性的体素选择

理想情况下 \(p_{vs}\) 应正比于贡献估计量二阶矩的平方根,其贡献定义为:

\[\int_{\mathcal{M}_{v_i}} L_i(y\to x_1)\, f_r(y\to x_1\to x_0)\, G(y\leftrightarrow x_1)\, V(y\leftrightarrow x_1)\, dA(y)\]

但为每个”体素-着色点”对估计这个积分太贵。作者把选体素视作多光源采样里的”选光源”——即选一个发光量为 \(I_i\)、界为 \(b_i\) 的”虚拟体素光”。最简单的按功率采样为:

\[\Phi(v_i) = I_i \cdot A(v_i)\]

其中 \(A(v_i)\) 用 \(b_i\) 六个面中最大面的面积近似。但纯按功率忽略了可见性、几何和 BSDF。为在不逐对查询可见性的前提下把这些考虑进来,作者借鉴离线多光源里的光传输矩阵采样思想,做两级聚类:

  • 超像素(superpixel):基于 SLIC 超像素算法并加入几何相似性,把着色点聚类;
  • 超体素(supervoxel):用简化版 K-means,基于可见性和辐照度把体素聚类。

聚类后,对每一对”超像素-超体素”,在簇内选 32 对着色点与 \(x_2\) 顶点,追踪光线查询二值可见性,估计平均吞吐量(可见性、几何、BSDF 三项之积的近似):

\[\bar{T} = \frac{1}{32}\sum_{i=0}^{31} f_r(x_2^i\to x_1^i\to x_0)\, G(x_2^i\leftrightarrow x_1^i)\, V(x_2^i\leftrightarrow x_1^i)\]

由于每对光线两端都很近、彼此相干,追踪效率高。最终选体素分三步:先确定着色点所属超像素 \(SP_i\);再按 \(\bar{T}_{i,j}\cdot\sum_{v_k\in SV_j}\Phi(v_k)\) 选一个超体素 \(SV_j\)(近似对完整贡献做乘积采样);最后在该超体素内按功率 \(\Phi\) 选一个具体体素。

体素内采样(Intra-Voxel Sampling)

选中体素后要在其中定位真正落在场景表面 \(\mathcal{M}\) 上的顶点 \(y\)。以往方法各有硬伤:Stochastic Substitute Trees 把采样点当 VPL,引入偏差且 PDF 难算;Focal Path Guiding 把 \(y'\) 映射成方向再射线求交,但由于无穷多个 \(y'\) 映射到同一方向,计算 PDF 需要一个沿射线的积分:

\[p_d(\omega_i|x) = \int_0^{\infty} p_s(x+t\omega_i)\, t^2\, dt\]

这对实时来说太贵(要遍历整个体素结构)。VXPG 提出包围体采样:先在 AABB \(b_i\) 的表面上生成原始样本 \(y'\),从 \(x\) 朝 \(y'\) 方向 \(\omega_i\) 投射光线得到顶点 \(y\),若 \(y\in b_i\) 则接受、否则拒绝。这样 PDF 有闭式解:

\[p(y|x) = p(y|y',x)\, p(y'|x,v_i)\, p_{vs}(v_i|x)\]

原因有二:拒绝步骤保证 \(y\) 只能在其所在体素被选中时才采到(体素互不相交,无需对 \(v_i\) 边缘化);且在 \(b_i\) 边界而非内部采样,给定 \(x\) 与 \(v_i\) 后映射 \(y'\mapsto\omega_i\) 是单射,无需对 \(y'\) 边缘化。这本质上是用采样拒绝换掉了昂贵的 PMF 积分——因此包围盒越紧、拒绝越少,几何注入的紧致性至关重要。

球面体素采样。为高效在包围盒表面生成样本,作者把 AABB 所有朝前的面投影成球面矩形(spherical rectangles)。当 \(x\) 在 AABB 之外时,最少 1 个、最多 3 个面朝前(图 7)。先按面积比选一个球面矩形,再用球面矩形采样,得到正比于立体角的密度:

\[p(y'|x,v_i) = \frac{1}{\sum_j \mathrm{Area}(Q_j)}\]

与 BSDF 采样的 MIS 及多次反弹

光注入不保证找到所有对图像有贡献的体素,可能带来偏差。作者用平衡启发式把 VXPG 样本与 BSDF 重要性采样做 MIS 组合,保证所有表面都有非零选中概率,使算法鲁棒。方法也可扩展到直接光照(注入光源发射而非 \(x_2\) 辐照度)和多次反弹(注入 \(x_3,x_4,\dots\))。实现中最多做到二次间接光照,并复用一次反弹的体素结构、对二次反弹改用功率采样以降低开销。

技术细节

  • 实现:自研渲染器,基于 Vulkan 与硬件加速光线追踪;分辨率 1280×720,笔记本 RTX 3070;参考图用高样本单向路径追踪;所有计时对至少 300 帧取平均。默认体素分辨率 \(64^3\)。
  • 无偏性的坑:BSDF 路径同时用于光注入和 MIS,若每帧生成一条 BSDF 路径先注入再 MIS,结果会有偏。两种消除办法:用上一帧的 \(x_2\) 做注入(引入一帧延迟,这是以往方法的常规做法);或分别为注入和 MIS 各射一条 BSDF 光线(多开销,但利于强动态场景)。实践中偏差主要与光注入是否覆盖到贡献体素相关,且往往局部而微小,很多时候可以直接忽略。
  • 动态几何注入:几何注入开销随三角形数近似线性增长。作者观察到子体素细节在注入时会被过滤,因此对高模生成 LoD 常不损质量却大幅降低开销(表 4);静态几何预计算,运行时只对动态物体注入再合并。还实现了空间哈希版本用于内存受限场景。
  • 管线耗时分解(表 3):除几何注入外,VXPG 各准备阶段(光注入、超像素/超体素聚类、光树构建、平均可见性评估)在测试场景中合计通常 <1ms,主要时间仍在路径追踪本身。

实验结果

用 \(\mathrm{FLIP}\)(越低越好)度量感知误差,与 BSDF 采样、实时随机光切(SLC)、随机替代树(SST)、屏幕空间路径引导(SSPG)对比。除 Veach Mis 只做直接光照外,均为 2 次反弹全局光照;VXPG 恒定用 1 条 VXPG 路径 + 1 条 BSDF 路径(MIS 组合),即每像素 2 样本。

场景 / 实验 主要结论
等时对比(图 8 / 表 2) 在 Veach Ajar、Fireplace、Bedroom、Breakfast 等复杂可见性场景中 FLIP 大幅领先(如 Veach Ajar 0.573 vs BSDF 0.912、SSPG 0.785;Bedroom 0.450 vs SLC 0.645)
Veach Mis(低可见性复杂度) VPL 类方法(SLC/SST)在部分区域可胜过 VXPG,但它们不擅长高镜面表面,而 VXPG 靠近似乘积采样 + BSDF MIS 处理得更好
引导分布可视化(图 9) 对比 CDQ 与单叶 GMM,VXPG 能表示小的、多个的高贡献区域并保持锐利边界;光源突变后 VXPG 单帧即可适应,CDQ/GMM 适应缓慢
与 ReSTIR 组合(图 10) VXPG 可作为 ReSTIR GI 的候选分布;Veach Ajar 中时序样本不足时 VXPG 优于纯 ReSTIR,组合后(ReSTIR+VXPG)质量最佳(5 帧 0.321 vs ReSTIR 0.904)
适应速度(图 11) SSPG 收敛最慢、ReSTIR 需 20+ 帧才稳定,VXPG 每帧都能学到较好分布;用作 ReSTIR 候选可加速其收敛
去噪(图 12) 配合 A-SVGF,VXPG 减少阴影/高光细节损失与颜色失真,缓解 disocclusion 与骤变光照下的时序伪影
动态场景(图 13) 在动态物体/光照下有效适应,提升 ReSTIR GI 与 A-SVGF 质量
消融:体素分辨率(图 14) Zero-Day(520 万三角形)等较大场景中 \(64^3\) 不足以刻画辐照度/几何,提高分辨率明显改善质量
消融:体素选择策略(图 16) 可见性感知算法一致优于功率采样与 SLC,Veach Ajar 尤为明显;即便朴素选择也胜过 BSDF
消融:几何压缩(图 17) 更紧的 AABB(裁剪 > 相交 > 纯体素)显著降低拒绝率、提升质量

贡献与局限

贡献

  • 提出存储辐照度 + 几何信息的包围体素数据结构,让信息在所有着色点间复用,实现不依赖时序、可每帧重建的实时路径引导。
  • 把离线多光源采样(光传输矩阵聚类)适配到实时,用超像素-超体素聚类,在考虑可见性与材质的前提下从着色点选体素。
  • 提出高效且无偏的体素内采样:在包围盒边界用球面矩形采样 + 射线求交 + 拒绝,用采样拒绝替代昂贵的 PMF 积分,得到闭式 PDF。

局限

  • 焦散/镜面传输受限:体素只存辐照度、采样时假设为漫射发射,无法很好引导焦散;对 \(x_2\) 处的镜面效应被忽略,来自光泽面的一般间接光引导困难。
  • 偏差:BSDF 路径复用于注入与 MIS 时理论上有偏,虽通常局部且小,但极端视角(如 Teapot 场景上部)会出现局部偏差。
  • 时序稳定性:不同体素聚类会带来跨帧方差差异,复杂可见性场景更明显。
  • 大规模场景可扩展性:几何注入随三角形数线性增长(靠 LoD 缓解),大场景几何界不够精确需更高体素分辨率(可考虑 clipmap 或稀疏体素八叉树)。

延伸思考

这项工作的核心价值在于对”维度”的重新取舍:路径引导长期在每个着色点上拟合 5D 方向分布,样本预算一紧就只能靠时序复用续命。VXPG 反其道而行——降维到全局共享的 3D 空间分布,用”全屏海量着色点里总有幸运儿命中高贡献区”的统计事实换来单帧可重建的分布,天然无视差、能瞬间响应动态光照。它把离线多光源渲染的成熟武器(光传输矩阵聚类、虚拟点光、面光源采样)系统性地搬进实时管线,并用包围盒 + 球面矩形 + 拒绝采样这套组合拳绕开了空间引导一向绕不开的 PDF 积分难题。它与 ReSTIR 的正交互补关系也很有意思:一个负责”每帧生成好的候选分布”,一个负责”跨帧复用”,两者叠加收益显著。沿着这条脉络,如何引导焦散/镜面路径、如何用层次结构支撑超大场景、以及如何进一步压低注入偏差,都是自然的后续方向。