2 蒙特卡罗积分(Monte Carlo Integration)
渲染充满了集成问题。除了光传输方程(1.1),在接下来的章节中,我们将看到积分方程还描述了与光相关的各种附加量,包括相机中的传感器响应 (sensor response) 、参与介质中光的衰减 (attenuation) 和散射 (scattering) ,以及来自皮肤等材质的散射。这些积分方程通常没有解析解,因此我们必须转向数值方法。尽管标准的数值积分技术,如梯形积分 (trapezoidal integration) 或高斯求积法 (Gaussian quadrature) ,在解决低维光滑积分时效果显著,但它们在渲染中常见的高维和不连续积分的收敛速度较差。蒙特卡罗积分技术为这个问题提供了一种解决方案。它们使用随机抽样来评估积分,其收敛速度与被积函数的维度无关。
蒙特卡罗积分具有一个有用的特性,即它只需要能够在定义域内的任意点评估被积函数 \( f(x) \) ,就可以估计其积分的值 \( \int f(x) \text{d}x \) 。这一特性不仅使得蒙特卡罗方法易于实现,还使得该技术适用于各种被积函数。它自然地扩展到多维函数;在第 13 章中,我们将看到在 RandomWalkIntegrator 中实现的光传输算法可以被证明是在估计一个无限维积分的值。
随机性的明智使用彻底改变了算法设计领域。随机算法大致分为两类: 拉斯维加斯算法(Las Vegas) 和 蒙特卡罗算法(Monte Carlo) 。拉斯维加斯算法是指那些使用随机性但最终总是给出相同结果的算法(例如,在快速排序中选择一个随机数组元素作为基准元素)。另一方面,蒙特卡罗算法则根据所使用的特定随机数给出不同的结果,但能给出在 平均(on average) 上正确的答案。因此,通过对同一输入的多次运行蒙特卡罗算法的结果进行平均,可以找到一个在统计上非常可能接近真实答案的结果。
以下部分讨论了蒙特卡罗积分的基本原理,重点关注在 pbrt 中广泛使用的原理。另见附录 A,其中包含在系统中较少使用的额外蒙特卡罗采样函数的实现。