RIS和WRS
此为ReSTIR-GI(global illumination)的前置章节,先来实现两个前置技术:RIS(Resampled Importance Sampling)和WRS(Weighted Reservoir Sampling),搭配时域重用,构建一个简单的ReSTIR-DI(direct illumination)框架
这几章可能是理论部分讨论的最详细的章节,因为我还没有找到比较系统且易懂的中文教程,就结合自己理解,写一篇详细的
主要参考资料:
- 首先是一个引用较多的文章: https://agraphicsguynotes.com/posts/understanding_the_math_behind_restir_di/ ,中文翻译:https://zhuanlan.zhihu.com/p/591979133 推荐一看,但很多细节的讨论没有明确实现框架,导致比较模糊甚至引起初学者的误解,特别是关于MIS权重,以及RIS+MIS结合的理论框架不是很详细,如果看的过程中比较迷惑,本文会弥补这一部分
- https://intro-to-restir.cwyman.org/presentations/2023ReSTIR_Course_Notes.pdf SIGGRAPH课程,应该是最详细的一篇关于ReSTIR的文章,本文大部分内容从此引用
SIR
首先从样本重要性重采样 SIR 说起,先不用管为什么要用它,直接给出流程,注意此时的目的是从目标分布
- 选取Proposal PDF
,这个记号与前面提到的一致,实际应用也是 - 从
中采样M个候选样本(candidates) - 为每个样本计算权重:
- 从M个候选样本选择一个样本,每个样本被抽取的概率与其权重成正比
这里的记号比较简略,为了不与后面的符号冲突,能理解就可以
最终选择的样本,其分布随着M增大接近
但不严格是
,文章[1]中将其命名为SIR PDF,并说其未知性导致使用SIR采样出的样本无法计算MIS平衡启发式权重,理论上讲确实是这样,但实际应用中,认为最终选择的样本 其分布就是 即可,文章[1]中也多次提到了无法使用MIS平衡启发式权重,这个第一次看真的很容易引起误会,我看了很多实现,除非是性能考虑,几乎都会使用平衡启发式权重,这个后面会详细解释
要注意,此时的
RIS
回顾一下(重要性)蒙特卡洛采样估计器
公式中的
引入分布函数
- 从Proposal PDF
中采样M个候选样本(candidates) - 为每个样本计算resampling weights:
- 从M个候选样本中选择一个
,每个样本被抽取的概率与其权重成正比 - 计算一个用于使估计无偏的权重:
随后此
最好不要将其理解为从M个候选样本中有放回的选择N个样本,而是每次只选择一个样本,而记号N目前还是依旧可以理解为之前的每个像素多次执行采样,且随时间积累,即代码中的 frameIndex * SAMPLES_PER_PIXEL 比较符合我们现在的实际做法
结合实际来说明一下目前的记号,便于理解:
Proposal PDF
关键是
此时单个RIS算法并不能从多个不同的Proposal PDF中采样,为此需要引入MIS来扩展RIS算法
RIS+MIS
有两种方法可以结合RIS+MIS,这两种方法不结合实际来说明真的挺难理解的:目前我们渲染器的框架:一次NEE采样+一次BSDF重要性采样(混合),其中的光源均匀分布即为Proposal PDF
第一种方法(先两次RIS,再MIS混合),我们无需扩展RIS算法本身,而是使用两个独立的RIS算法,目前两个RIS的
使用RIS估计器,计算出两个值:
就遇到上文SIR中提到的问题了,
真的无法使用balance heuristic了吗?其实还是可以的,使用generalized balance heuristic即可(详见文章[2](eq 3.11)),形式上就是将
和 的分布视作 和 即可,实际上还需要一个采样数的加权,文中的版本省略了,也不太需要追究,主要是这generalized balance heuristic不主要用于现在的讨论情况,后面引入时空重用后才会详细讨论这个,只是举个例子。总之,当 ,且两边的采样数相同时,balance heuristic会退化至平衡权重,这也是我想说的,balance heuristic不会因为一些原因不可用,只是可能等价于平衡权重而已,除非真的连 都不知道
第二种方法(先MIS混合采样,再一次RIS),就是将MIS权重融合进RIS的权重里,为此需要扩展RIS算法,为了记号简单,沿用上面的
- 从
中采样 个候选样本 ,从 中采样 个候选样本 - 为每个样本计算MIS weights:
, , 例如从 中采样的样本 , - 为每个样本计算resampling weights:
, , 例如从 中采样的样本 , - 从所有候选样本中选择一个
,每个样本被抽取的概率与其权重成正比 - 计算一个用于使估计无偏的权重:
WRS与时空重用
WRS原理在各个教程中解释的都比较清楚了,这里只贴一下算法:

这里的
以时间重用为例,考虑前后两帧渲染的同一像素,假设摄像机和场景完全不变。在第一帧中,对此像素执行Resample(M)
,并将返回的Reservoir存在一个buffer中,第二帧,拿到这个Reservoir,记为Resample(M)
,得到
- 若摄像机改移动,尝试用运动向量匹配前后像素的Reservoir
- 若摄像机移动/场景变化,重新计算
上面是一个过分简化后的情形,现在一步步来扩展
WIP 鸽置中
Reference
[1] https://agraphicsguynotes.com/posts/understanding_the_math_behind_restir_di/
[2] https://intro-to-restir.cwyman.org/presentations/2023ReSTIR_Course_Notes.pdf