ReGIR – An advanced implementation for many-lights offline rendering¶
原文:ReGIR – An advanced implementation for many-lights offline rendering
1. 背景:Many-Lights 的 NEE 为什么难¶
-
朴素 NEE 在成千上万光源(含十万级自发光三角面)中均匀/功率采样,命中“真正照亮当前点”的光概率极低 → 方差大、收敛慢。原文在多场景中展示了 1-SPP 噪声的严重性。
-
核心问题:让 NEE 的选光分布 更接近真实 integrand,而非仅靠功率或均匀;同时保持可实现、可扩展。
2. 基础:RIS 与 NEE 的位置¶
- NEE(Next-Event Estimation):在着色点\(P\) 显式采样光与光面点\(x\) ,发阴影射线并估计
\(\hat{L}_d=\frac{f(x)}{p(x)},\quad f(x)=\rho\,L_e\,V\,\cos\theta\;\frac{\cos\theta_L}{d^2}\)
理想分布\(p(x)\propto f(x)\)可趋零方差。
- RIS(Resampled Importance Sampling):从“易采样”的源分布 生成多候选\(X_1...X_M)\) ,按 目标函数 \(\hat{p}\)重采样为单一输出\(Y\) ,使样本更贴近\(\hat{p}\) 对应的归一化分布 \(\overline{p}\)。
3. ReGIR 总览:Reservoir-Grid Importance Resampling¶
ReGIR 把 RIS 的思想搬到 世界空间网格:先为每个体素格子预置“光样本水库”,渲染时在本地水库上做一次轻量重采样(并发阴影射线),实现 高质量 NEE。
3.1 预处理:网格与水库¶
- 网格:将场景包围盒划为规则 3D 网格/哈希网格(分辨率后述)。
- 每格水库:为格子中心代表点(可记录\(P_c,N_c\) )收集若干候选光样本,使用 WRS/RIS 逻辑保留\(R\) 个(例如 64)样本及其统计量。
- 基础样本来源:可用功率采样、Light Tree,或预计算的 Light Distributions。
3.2 着色阶段:二次重采样¶
-
在像素着色点\(P\) 定位网格格子 \(c\);
-
从该格水库中抽取\(S\)个样本,按更接近真实贡献的目标函数再次做 RIS,得到最终光样本;
-
发阴影射线计算可见性并累积贡献;可与 BSDF 方向样本做 MIS 融合。
3.3 目标函数(Target Function)设计¶
为了让 “网格填充” 与 “着色时二次重采样” 都更像真实的\(f(x)\) ,原文建议把几何项与可见性纳入目标函数(若成本允许):
直觉:功率、距离与两侧余弦能把“近、朝向对、亮”的光样本权重拉高;可见性直接剔除被遮挡的候选,显著减噪。
3.4 NEE++ / BSDF Resampling / Reuse / Bias 修正 / MIS / 去相关¶
-
NEE++:把更多“接近\(f\) ”的因素(可见性、几何)并入采样/重采样阶段。
-
BSDF Resampling:在重采样时把 BSDF 形状纳入\(\hat{p}\) (或与 BSDF-sample 做 MIS)。
-
Spatial/Temporal/Visibility Reuse:邻域/跨帧/可见性结果的复用可降噪,但会引入相关性;离线渲染通常谨慎对待时间复用。
-
Fixing the Bias:当使用近似或复用导致偏差时,需配套防御性样本(canonical reservoir)与修正策略。
-
MIS:与 BSDF-sample 合并时用 Balance/Power 权重,确保无偏与稳健性。
-
Reducing Correlations:用抖动、蓝噪序列、分层等手段抑制相关性纹理与闪烁。
4. 改善基础样本:Light Distributions 与 Light Tree¶
-
为何重要:若基础样本质量差(仅功率/均匀),压力会全部落在二次 RIS 与可见性测试上,方差与相关性尖刺明显。
-
Light Distributions(推荐):为每格子预估各光贡献并保留 Top-N,构造离散分布(Alias/CDF)供 grid-fill 使用;原文报告相对“纯功率”有明显提升。
-
Light Tree / ATS 等层次结构:当构建与目标函数设计得当,质量可与上法相当甚至更优,且避免较大预计算/内存。
-
实务上二者可混合:水库贫瘠或质量不佳时,回退到 Light Tree。
5. 网格尺寸与内存/收益权衡¶
-
过粗:水库分布与真实贡献偏差大,着色时难以纠正;
-
过细:预处理时间/内存猛增,收益递减。
-
原文在白房间、Bistro 等场景扫描发现:存在一个收益递减区间(例如尺寸从 1 降到 0.5 时收益显著,此后趋缓),需按场景特性实测选取。
6. 总结¶
朴素采样方法的局限性¶
理想的采样应该遵循渲染方程中的被积函数 \(f(x)\),它综合考虑了:
-
BSDF (双向散射分布函数)
-
光源发光强度 (\(L_e\))
-
可见性 (是否被遮挡, \(V\))
-
表面余弦衰减 (\(cos(\theta)\))
-
几何项 (距离衰减 \(\frac{1}{d^2}\) 和光源法线)
朴素的采样方法(如均匀采样、按功率采样)之所以失败,是因为它们只考虑了上述 \(f(x)\) 中的零项或一项,导致选中“错误”光源的概率极高,产生大量噪点。
基础技术:RIS (Resampled Importance Sampling)¶
为了解决上述问题,文章引入了 RIS(重采样重要性采样) 作为基础。
-
核心思想:RIS 是一种“改进”采样质量的技术。
-
工作流程:
-
它首先从一个“较差”但“廉价”的分布(如按功率采样)中获取大量(M个)初始样本。
-
然后,它根据一个“目标函数” \(\hat{p}\),从这 M 个样本中“重采样”出 1 个高质量的样本。这个 \(\hat{p}\) 是我们对理想被积函数 \(f(x)\) 的一个“廉价”近似。
-
这个过程的最终产物是一个“蓄水池”(Reservoir),它存储了:(1) 被选中的那个高质量样本,(2) 该样本的权重,以及 (3) 所有 M 个样本的 \(\hat{p}\)权重总和。
这个“蓄水池”是后续所有算法的核心数据结构。
核心算法:ReGIR (Reservoir-based Grid Importance Resampling)¶
ReGIR 是本文提出的核心算法。它不是一个单一的技术,而是一系列利用 RIS 蓄水池(Reservoir)来极大提升多光源采样效率的技术合集。
1. 核心思想:网格化的蓄水池 (The Grid)¶
ReGIR 的第一个关键创新是将场景空间划分为一个3D网格。
-
做法:在预处理阶段,首先从场景中所有光源投射光子,并将它们存储在 3D 网格的单元(Cell)中。
-
然后:对于每个网格单元,运行 RIS 算法,从该单元内的光子中采样,为每个单元生成一个高质量的蓄水池(Reservoir)。
-
结果:我们得到了一个“光照网格”,其中每个单元都存储了一个(或多个)代表该区域“最重要”光源的蓄水池。
在渲染时,着色点 \(P\) 只需要从其所在的网格单元中获取这个预计算好的蓄水池,并直接使用它(而不是在着色时才运行昂贵的 RIS),从而极大加速了采样。
2. 改进目标函数 (\(\hat{p}\)) 和 NEE++¶
为了让 RIS 选出真正“好”的样本,目标函数 \(\hat{p}\) 至关重要。
-
廉价的\(\hat{p}\):\(\hat{p}\)不能包含昂贵的可见性(V)测试。文章使用了一个简化的、不含可见性的 \(f(x)\) 版本作为 \(\hat{p}\)。
-
NEE++:这是一种补偿策略。既然 \(\hat{p}\)没有考虑可见性,那么在对蓄水池进行重采样时,如果发现选中的样本是不可见的,就立即从蓄水池中重新采样一个新样本,直到找到一个可见的为止。这在不增加存储开销的情况下,有效“注入”了可见性信息。
3. BSDF 重采样¶
上述步骤只考虑了光源和几何,没考虑材质(BSDF)。
-
做法:在着色点,除了从光照网格获取一个代表“几何与光源”的蓄水池(我们称之为 \(R_{light}\))之外,还额外独立地根据 BSDF 采样 M 个方向,并为它们在“运行时”构建一个新的蓄水池(称之为 \(R_{bsdf}\))。
-
结合:最后,使用多重重要性采样(MIS) 将 \(R_{light}\) 和 \(R_{bsdf}\) 两个蓄水池安全地结合起来,得到一个同时考虑了光照、几何和材质的最终样本。
4. 时空蓄水池重用 (Spatiotemporal Reuse)¶
这是 ReGIR 性能提升的最大来源。核心思想:一个像素的蓄水池对于它的(空间上)相邻像素或(时间上)前一帧的同一像素来说,仍然是“足够好”的。
-
空间重用 (Spatial Reuse):在渲染当前像素时,查看其相邻像素(例如一个 5x5 邻域)已经计算好的蓄水池。通过 RIS 的蓄水池合并算法,将这些邻居的蓄水池“融合”到当前像素的蓄水池中。这极大地增加了蓄水池的有效样本数量(M),使其质量剧增,显著减少噪点。
-
时间重用 (Temporal Reuse):与 TAA 类似,将前一帧的蓄水池“投影”到当前帧,并将其与当前帧的蓄水池合并。这进一步提高了样本质量,使得图像收敛速度极大加快。
5. 解决重用带来的问题¶
时空重用虽然强大,但也带来了两个主要问题:
-
可见性复用 (Visibility Reuse) 与偏差:
-
问题:当重用邻居的蓄水池时,我们也重用了它的可见性信息。如果一个邻居因为被遮挡而选择了光源 A,而当前像素并未被遮挡,这种“有偏”的重用会导致光照“泄露”或“丢失”。
-
ReGIR 的解决方案:在合并邻居的蓄水池时,重新评估其可见性。如果邻居的样本在当前像素上是不可见的,就不重用它,而是触发 NEE++ 重新采样。这修正了偏差(Bias),是 ReGIR 鲁棒性的关键。
-
相关性 (Correlations):
-
问题:过度重用(例如在时间上重用 95%)会导致蓄水池“停滞”,样本不再变化,导致图像中出现“Wagon-wheel”(车轮)效应或“拖影”类的伪影。
-
ReGIR 的解决方案:通过随机化来打破相关性。例如,空间重用时,不总是从固定的 5x5 邻域采样,而是随机旋转采样邻域。
6. 对 GI 质量的影响¶
ReGIR 不仅用于直接光照,它同样可以(并且在文章中被)用于间接光照(Global Illumination, GI)。当路径追踪的第二跳(或更多跳)需要采样一个光源时,ReGIR 提供的“高质量光源样本”同样能显著降低 GI 的噪点。