(论文)[2025-EG] Many-Light Rendering Using ReSTIR-Sampled Shadow Maps
Many-Light Rendering Using ReSTIR-Sampled SM
- Song Zhang,Daqi Lin,Chris Wyman,Cem Yuksel
- 【1,4】University of Utah, USA
- 【2,3】NVIDIA, USA
- 项目主页,代码
- 主页上效果图对比明显
- 主要思路【不需要硬件光追支持,光栅化场景】
- pass1:ReSTIR 挑选出重要的光源【此时可见性渲染使用 ISM】
- 【全渲染 SM 开销太高】
- 挑选出来之后这些光源渲染 SM,剩余光源渲染低质量 ISM【只需要 1 个 pass】
- pass2:ReSTIR 渲染,可见性判断使用 SM + ISM
- 为了加速,当前帧的重要光源使用上一帧挑选得到的
- pass1:ReSTIR 挑选出重要的光源【此时可见性渲染使用 ISM】

Introduction
- 贡献
- 光栅化条件下利用 ReSTIR 做阴影渲染
- 使用 ReSTIR 自动挑选重要光源
- 减少 flicker【闪】
- 光源限制:我们的可见性测试是基于
SM,因此光源需要是 SM 友好的
- points、spotlights
- PCF、PCSS 估计的面光源
相关工作
- SM
- shadow map
- instant radiosity【拆分为点光源】
- imperfect shadow maps【估计点光源的可见性】
- light cuts【聚合周围光源共享】
- importance sampling
- tiled shading【每个 tile 只考虑部分光源】
- BVHs / Grids:减小找到重要光源的代价
- stochastic light cut
- 两种方式:显式求和、随机采样
- ReSTIR
\[ \langle F \rangle_{mc} = \frac{1}{N} \sum_{i=1}^{N} \frac{f(x_i)}{p(x_i)} \quad\xrightarrow{RIS}\quad \langle F \rangle_{ris} = \frac{1}{N} \sum_{i=1}^{N} \frac{f(x_i)}{\hat{p}(x_i)} \frac{1}{M_i} \sum_{j=1}^{M_i} \frac{\hat{p}(x_{ij})}{p(x_{ij})} \]
- DI 计算 RIS 权重的时候可以省略可见性测试【最终贡献需要可见性测试】
- \(\hat{p}\)(unnormalized target distribution)里面不考虑可见性,或者说有的考虑有的不考虑(at low frequency)
- 即使这样,也有明显的方差降低
- Imperfect Shadow Maps:1 pass 生成大量低质量的 shadow maps(~100)
- 常用于:间接光、不准确的可见性测试
- 本文将其用于 ReSTIR based 的直接光可见性测试
ReSTIR-Sampled SM
- 一帧只能对少量光源做 SM
- 不同光源的重要程度不一样,依赖于视点
- key:对重要光源生成
SM,其他光源使用 ISM
- 使用 ReSTIR 挑选重要光源
- 另外 ReSTIR pass 用于着色
选取重要光源
- 选择 top-N
- 只是根据光源在底片上的 sensor importance 不行
- 光源只影响一个像素,但是边缘变化剧烈
- 定义光源 \(l_j\) 的重要性 \(S_j\)
- \(f_i(l_k)\) 表示光源 \(l_k\) 在像素 \(i\) 的 DI 贡献
\[ S_j=\sum_{i=1}^{\text{pixels}}\left(f_i(l_j)\Big/\sum_{k=1}^{\text{lights}}f_i(l_k)\right) \]
- 直接计算 \(f\) 不现实:逐像素、逐光源
- 考虑这样一件事:每个像素按照 \(f\) 权重选择光源,那么 \(S_j\) 和期望相同
- 于是我们在每个像素走 ReSTIR
采样流程,然后统计不同光源数量;根据数量挑选 top-N
- 其中可见性测试使用 ISM 完成【这是一个近似,但是实验结果表明挑选出来的 top-N 和用 SM 可见性测试结果差不多】

- 称为 ranking ReSTIR pass
着色
- 对所有光源着色开销依然很大,因此引入 shading ReSTIR pass
- 此时可见性测试使用 SM(挑选出来的 top-N) + ISM(其他光源)
- 减小等待开销:当前帧的 top-N 使用上一帧的结果

- 初始 light samples 只生成一次,同时被用于 shading/ranking ReSTIR pass
- 需要可见性测试的时候,执行两次可见性测试(如果有 SM 的话)
- 样本复用的时候,各自选择自己的复用样本【可以使用相同随机数,这表示会选择到相同的样本,可以有更多复用】
时间稳定性
- 合并成一个 ReSTIR pass 会导致闪烁【当前帧 shading 影响下一帧 ranking】
- 解决闪烁问题:SM 只在 final shading 使用,其余时间使用 ISM
- 这样的话合并成一个 pass 效果不好【两次可见性测试可能不一致】
- 还是有可能闪烁:某一个光源反复升降级【top-N 边缘】
- 基于方差的挑选,打分【出发点:如果一个光源很可能马上降级,那么不对他升级】
- \(\mu_{\ast},\sigma^2_{\ast}\):上一帧统计量
- \(\alpha=0.1\)
\[ \begin{array}{c} \mu=(1-\alpha)\mu_{\ast}+\alpha s\\ \sigma^2=(1-\alpha)\sigma^2_{\ast}+\alpha(s-\mu_{\ast})(s-\mu)\\ \end{array} \]
- 升级和降级的光源构成 pair:如果他们的 \(\sigma^2\) 差距没有到达另外一个 \(\sigma^2\) 的 \(\beta\) 倍,则拒绝此次改变
- 测试结果:\(\beta=3.0\)
- 如果变化不是偶然的,才允许变化
结果
- 实现:Falcor
- RTX 4090 24GB
- 光源数量:hundreds(spot / point)
- 所有阴影都是逐帧生成,支持动态【论文中都假设动态实现】
- ReSTIR DI:\(M=32,R=30\)
- 1024x1024 shadow maps,32x32 ISMs
- PCF 进行 AA
- top-N 的 N 怎么给定:根据场景人工给定
实验
- top-N 不同的 N
- 剩余可见性使用 ISM 也很重要
- 对比实验
- ranking 的时候都用 ISM
- shading的时候 top-N 使用 SM,剩余光源使用不同策略
- 使用 ISM、都认为可见、都认为不可见
- 对比实验
- ranking 的时候使用 ISM 就够了
- 对比实验:不测试、使用所有 SM、Ours
- 不同光源强度下,我们的表现
- 强度大了,我们比 ISM 好得多

- 时间稳定性
- 使用不同方式挑选 top-N
- Distance Heuristic【距离相机最近的几个光源渲染 SM】、ReSTIR ranking
- ReSTIR 带来的噪声能够通过 SVGF 降噪
总结
- future
- 如果所有光源都很重要怎么办?帧间复用 SM
- 提高 ISM 的质量
- 其他应用:屏幕空间光追