(论文)[2021-SIG-Comm] World-Space Spatiotemporal Reservoir Reuse for Ray-traced Global Illumination

World-space Spatiotemporal Reservoir Reuse For RTGI

  • AMD
  • 感觉是把 ReSTIR DI 进行了扩展,在任意长度的 camera ray 需要采样 NEE 的时候,都可以进行采样,将 ReSTIR 放到了 world space
    • path-space filtering(快速查找周围 vertex)+ ReSTIR DI
  • 出发点:ReSTIR GI【HPG 那个】不能处理 DI(需要加上 ReSTIR DI 的结果),我们可以

前置知识

  • ReSTIR DI
    • 初始 light sample:通过 \(p\) 采样(简单使用 light power)
    • 重采样:\(\hat{p}\)
      • 想要其 \(\approx f\),但是需要 shadow ray 计算可见性,开销大
      • 使用不带可见性项的 \(f^\prime\) 近似
        • 其实没问题,只会让 \(f=0\) 的地方变成非 0,但是 \(f>0\) 的地方 \(f'\) 肯定也大于 0

世界空间蓄水池缓存

  • 使用 hash grid 快速找到邻居 vertex
  • 每个 grid 的 cell 中保存 lists of reservoirs

  • cell-index:属于哪个 hash grid
  • index-in-cell:在 hash grid 中位于第几个
  • 上面的算法相当于把所有的样本 \(v\) 保存到 hash grid 中
    • scattering the reservoirs into a compacted stream
    • \(v\) 是索引,减少内存压力;从 Path 中获取实际的蓄水池 Paths[v]
  • 举个例子:6 个样本,hash 值分别为(1,2,3,3,2,3)
    • cell-counter:1,2,3
    • index-buffer:0,1,3,6
    • cell-storage:\(v_1,v_2,v_5,v_3,v_4,v_6\)(顺序不一定,但是原子操作保证不会重合)

世界空间时空蓄水池复用

  • temporal:使用上一帧 hash grid 中的蓄水池
  • naive reuse:直接使用所有 cell 中的蓄水池样本
    • structured visual artefacts(相邻的 vertex 使用相同的蓄水池样本)
      • 这种噪声不容易被降噪器除去
    • 不同 cell 的样本数差异大(取决于生成的 path)
  • stochastic reservoir reuse:取 cell 中的一个子集(max-count)
    • 下面的 increment 部分相当于计算取 max-count 次取完
      • 只取 increment 的倍数的样本,等价于选取 max-count 个(选 count 其中有重复的)
    • tiling artefacts 消失

  • jittered descriptors:插入和查询的时候加入随机扰动
    • 随机扰动:强度正比于 cell size,在切平面中对 vertex position 做随机扰动
    • 进一步减轻结构化问题

Adaptive cell size

  • 远处投影之后的 cell 小,vertex 样本数少
  • 希望在投影之后,cell 的大小差不多,使得每一个 cell 中的样本数差不多
  • 参数
    • projected-size:希望在相机平面中的投影大小
    • 看式子和透视投影相关,结果上就是正比于距离(distance)

  • 效果:远处一个 cell 里面的样本数多了,效果好了

Bias reduction

  • ReSTIR GI 中使用 depth+normal 信息剔除不好的样本
  • 我们都在 cell 中,因此空间相近,只需要 normal 判断即可

实现

  • single-bounce diffuse GI
  • 初始化
    • 直接可见的表面,余弦采样发射 GI Rays
    • 然后每个交点,然后生成 16 个样本,从这些样本中 RIS 生成蓄水池,插入到 hash grid 中
  • We spawn GI rays from the primary visible surfaces by cosine-weighted sampling of the hemisphere using blue noise. We then generate reservoirs by resampling 16 initial samples and insert the outcome into the hash grid.

hash 算法

  • spatial hashing 会引发冲突,远处也会到同一个地方
  • 方案:secondary hash function + a 32-bit checksum
    • pcg 作为 h1,xxhash32 作为 h2
  • 实现:10000 cells,每一个 cell 最多 32 个 entry
1
2
3
4
5
6
T atom_cmpxchg(T *p, T cmp, T val) {
T old = *p;
T now = (old == cmp) ? val : old;
*p = now;
return old;
}

结果

  • diffuse GI
  • half resolution of 1080p
  • 1 temporal reuse pass + 4 spatial reuse passes
  • max-count = 4

结论

  • 论文实现了 world-space ReSTIR for simple-bounce GI