重要性采样
\[ \newcommand{\d}{\mathrm{d}} \]
蒙特卡洛积分
首先来看我们常用的蒙特卡洛积分(按照Wikipedia这已经算是重要性采样的形式了),注意所有的\(X_i\)都是独立同分布的: \[ I \approx I_{MC}=\frac{1}{N} \sum \frac{f(X_i)}{p(X_i)} \tag{1} \] 当\(f(x) \neq 0\)的时候\(p(x)>0\)的话,这个估计就是无偏的。证明也很简单,直接在(1)式两端求期望即可。由于\(X_i\)之间是独立的,因此可以计算出蒙特卡洛估计器的方差为: \[ \mathbb{V}[I_{MC}]=\mathbb{V}[\frac{1}{N} \sum \frac{f(X_i)}{p(X_i)}]=\frac{1}{N^2}\mathbb{V}[\sum \frac{f(X_i)}{p(X_i)}]=\frac{1}{N^2} \cdot N \cdot \mathbb{V}[\frac{f(X_i)}{p(X_i)}]=\frac{1}{N}\mathbb{V}[\frac{f(X_i)}{p(X_i)}] \tag{2} \] 标准差即为: \[ \sigma = \frac{1}{\sqrt{N}}\sigma[\frac{f(X_i)}{p(X_i)}] \tag{3} \] 等式右边的方差项是常数,因此积分器的误差随着样本数量增加的衰减速度是\(O(n^{-1/2})\)的,并不是很快。
要注意的是,在路径追踪中我们一般用的是单点的蒙特卡洛采样,也就是认为: \[ I_{MC}=\frac{f(X_i)}{p(X_i)} \tag{4} \]
重要性采样
积分器中的\(p(x)\)是可以任选的,而如果它恰好是\(f(x)\)的常数倍的即\(p(x)=Cf(x)\)的话,(2)和(3)式的误差就变为0了!然而简单计算一下我们会发现这是一个悖论: \[ 1=\int \limits_\Omega p(x)\d x=\int \limits_\Omega Cf(x)\d x=C\int \limits_\Omega f(x)\d x=CI \] 上式说明\(C=I^{-1}\),也就是我们需要提前得知\(I\)的值才能得到理想的\(p(x)\),但是\(I\)的值正是我们想要计算的目标!
即便没法把采样的方差降为0,上面的分析也能作为选择\(p(x)\)的指导方针:让\(p(x)\)的形状尽可能地接近\(f(x)\),从而尽可能多采样重要也就是f(x)的值更大的区域。
常用的重要性采样比如漫反射表面的余弦采样,还有直接光源采样等等,都符合这个原则。
多重重要性采样
如何组合多个不同的采样策略?一些简单的策略是,固定使用其中的一个分布来采样,或者是从每一个分布都采样,使用这些采样估计积分后对结果进行平均。很遗憾这些都是行不通的,不仅无法减少方差甚至可能得到错误的结果,具体的说明可以参考[5]。[1]中也给出了一个例子用于证明这些简单策略是有误的,对于Cornell Box场景,如果我们分别以\(1/2\)的使用\(p_1(x)\)(余弦采样)和\(p_2(x)\)(直接光源采样),渲染出的图像如下:

