这是 Thomas Müller 等人在 SIGGRAPH 2021 上发表的。论文写的有点 pedantic,没有看懂,但是看了视频就懂了。
Radiance Caching
Radiance Caching 是个老算法了。主要就是把一个点辐射出的 Radiance 编码成 Spherical Harmonics,然后在实时渲染中帮助做 shading。可以作为 precomputation 算法,也可以用来加速实时光追。
Pre-convolved Radiance Caching 这篇文章里写的很清楚了:Radiance Caching (Middle row, Right) projects incoming radiance into the SH basis, for every pixel converts the BRDF into SH and
performs a dot-product between two dense vectors per pixel.
Neural Radiance Caching
首先是 Radiance Caching 在实时光追中的应用。我们知道,离线渲染的时候,一条 Ray 可以 bounce 多次,如 64;而实时光追中,往往只能 bounce 一次。或者说,离线渲染里的 path 是很长的,实时光追里的 path 是很短的。
那如果说一条光线已经完成 bounce 了,但没有 hit 到 light source 或者 skybox,没法计算能量,那就只能抛弃了,这就导致渲染图上的黑像素。当然,使用一些重要性采样算法,比如 Bitterli 的 ReSTIR 可以很好地改善:
但如果有 Radiance Cache 的加持的话,那些没有得到能量的 ray,可以直接查找最后一次交点在 Radiance Cache 上的值,就知道能量是多少了。因此 Radiance Cache 可以改善实时光追质量。
这篇文章非常 NB 地用神经网络来存储 Radiance Cache,而不是用球谐函数,就是说训练了一个黑箱 N N N,可以方便地得到点 x \mathbf{x} x 处的 Radiance L s L_s Ls:
L s = N