蒙特卡洛在图形渲染领域中有着大量的应用,其中包括但不限于基于物理的渲染(PBR)、基于图像的光照(IBL)、预计算辐照度全局光照(PRT)等等,最新的高效光追算法 ReSTIR 中也需要以蒙特卡洛作为理论基础,UE5 的 Lumen 目前也实现了基于 ReSTIR 的 Gather……
一、初识蒙特卡洛(Monte Carlo)
蒙特卡洛是南欧国家摩纳多的一个著名赌城,赌博就意味着概率,蒙特卡洛方法正是以概率为基础的方法是一大类随机算法(Randomized Algorithms)的总称,即通过随机样本来估算真实值。在了解蒙特卡洛之前,需要先了解概率论基础
1.1 最简单的例子:近似 PI 值
一个随机数生成器,可均匀生成 [-1, 1] 之间的数,每次生成两个数,对应着一个平面坐标系中的点 (x, y)
![](https://i-blog.csdnimg.cn/direct/90c61e420b9b4c308b14915dcf059ed2.png)
将以上的操作重复进行 n 次,在 n 非常大的情况下,落入如上绿色范围内的点的数量 m 与 n 的比值就近似于 ,对公式做个变换得到
,很好理解,到此蒙特卡洛也就入门了
1.1.1 n 有多大,PI 才能足够准确?
大数定律保证了蒙特卡洛的正确性:当 n 趋于无穷, 趋于
通过 Bernstein 不等式 可以了解到:样本数量 n 增加一万倍,精度才能提高一百倍,这一部分还是算超纲了,有兴趣看下就好
1.2 最普通的例子:计算定积分
就拿《深度强化学习》这本书中的例子:
计算 ,其中
求解解析解非常困难,再加上计算机也不会计算连续的积分,因此通过蒙特卡洛计算数值近似解就是一个不错的选择,一元函数定积分也算是一个相对简单的问题
此蒙特卡洛近似计算步骤如下:
- 在区间 [a, b] 上做随机抽样,得到 n 个样本,记作:
- 对函数值
求平均,再乘以区间长度 b − a
可得出
这个方法和黎曼和的求法非常类似: 就是图中矩形的宽,而
就是对应矩形的高
1.2.1 多元函数定积分
一元函数的定积分是相对比较简单的问题,在此情况下,变量 x 是个标量,求解的积分也不会是多重积分
多元函数定积分的求解要复杂一些,但好在,前面 1.1 求解 的例子正好可转换为多元函数定积分求近似的问题,下面就从公式的角度再推导一遍
其求解 近似值的本质其实就是计算
,集合 Ω = [−1, 1] × [−1, 1]
其中 ,直观地说,如果点 (x, y) 落在下图的绿色圆内,那么函数值就是 1;否则函数值就是 0
从从集合 Ω = [−1, 1] × [−1, 1] 上均匀随机抽样 n 个点,记作
可得到 ,其中
即集合 Ω 的面积,1.1 中对 m 的定义,其实就是多次采样的
结果
二、蒙特卡洛积分(Monte-Carlo integration)
在介绍完备的蒙特卡洛积分前:先举一个完全不需要复杂的数学推导,生活中的例子
在要统计全国大学生的平均身高,有以下两个方案:
- 直接挨家挨户调查全国所有大学生每一个人的身高,然后求其平均
- 随便进入一所大学,统计这所大学里面所有学生的身高,然后求其平均作为近似解
可见,选择方案②确实是一个很不错的选择,它就是随机采样的一个案例,但是现在有这样一个问题:这所大学是文科大学,也因此男女比例是 1:5,要知道女性的平均身高是要低于男性的,这样若只是单纯的随机抽样必然会得出错误的结果。对于这个问题,该如何设计采样方案,才能使得最终的结果尽可能的客观真实呢?
相信这个问题对于一个初中生来讲,都能很好的回答:有两种方案
- 抽到男生的时候,将其权重设为5,抽到女生的时候,将其权重设为1,最后计算平均身高时乘上权重求平均
- 男生女生分开抽查,确保抽查到的男女生比例为 1:1,然后统计平均身高
但是从这个问题可以看出,每个样本被选中的概率并不一定是相同的,也就是说,样本池不一定均匀,就像题目中的情景,选出女生的概率要比选出男生的概率高
2.1 非均匀样本采样
若只是单纯的求解定积分结果,采样范围即积分范围,并且此采样范围内的每个样本完全均匀分布,但蒙特卡洛积分需要考虑到所有情况
对于一般格式的连续性积分 ,其被积函数为
,积分区间为 Ω
一样采用离散的方式去近似:即只在区间 Ω 内进行 n 次采样,且每个样本 x 在区间内被选中的概率为 ,那么就有
,其中
- Ω 可以是三维空间、一个球面、或者一个曲面……
- 样本 x 可能是一个点、也可能是一个立体角、或者是光线追踪时的其中一条路径……
和
无直接关系,只是在大部分情况下,我们可以自由选择
,好的
可以使得采样收敛更快
这可以从概率期望的角度去推导,这个在第三章也会有详细介绍:
- 仅考虑样本 x 及其概率密度函数(probability density function, pdf)为
,它的数学期望
- 此时另一连续随机变量
满足
,则
的数学期望就为
想要求出 的值,就需要对②的公式进行变形:
蒙特卡洛其实就是一个抽样-检测过程,一样是积分,在多个概率密度函数的情况下并不会复杂多少:在积分区间 Ω 进行采样得到样本 ,最终积分结果就可近似为:
到这里也可以发现前面推导 其实就是上面的一种特殊情况:均匀分布,即
满足
2.2 重要性采样方案(IS, Importance Sampling)
到这里,要解决的问题从连续性积分求解的问题,变成了样本选择的问题
接着最前面的例子:现在要统计在全国大学生中,总共大致有多少比例的学生喜爱玩电子游戏,和前面一样,由于我们是 XX 大学的学生,因此我们更想通过在我们自己的学校里面抽样调查,来估计全国的总比例
但也很明显的,在一个女生多的学校里,绝大多数女生肯定是不爱玩电子游戏的,假设这个学校共有 3000 名学生,男生女生比例为 1:5 即 500 名男生、2500 名女生,其中 500 名男生中有 200 名男生喜爱玩电子游戏,2500 名女生中有 100 名女生喜爱玩电子游戏,对这个样本池均匀采样调查,近似结果应该为 300 名学生,占比总人数的 1/10,这个结果如果作为全国大学生中爱玩电子游戏的学生的比例,必然是有失偏颇的
因此这里就需要引入重要性采样的概念:考虑到全国男女比例大致为 1:1,是一个均匀分布的样本池,而这所学校男女比例为 1:5 并非均匀分布,我们正确的做法就应该是:将采样范围集中在这所学校的男生群体当中,即给予这所学校所有男生更高的采样命中率,确保最后采样到的男女生数量尽可能接近
从数学的角度来说:重要性采样就是蒙特卡洛积分的一种采样策略,主要为了减小蒙特卡洛方法的方差。理论就是如果样本采样自与被积函数相似的分布中,才可以更快地收敛
换言之:在 的 PDF 越大的地方,
对积分结果的贡献也就越大,这个地方的样本的质量也越好。对应到上面的例子就是:如果当前所在大学的城市举办了一场 chinajoy,参加这场 chinajoy 的所有来自于该学校的学生,随机抽取一个,更高的概率会是那 500 名男生中的某一个,而非是其中任意 500 名女生中的某一个。此时我们就可以说:如果只对该学校的学生进行采样,那么“该学校的男生”对所谓的积分贡献结果更大
需要注意的是: 的 PDF 和
本身的积分或图像不能直接划等号,网上有些文章混淆了两者的概念
2.3 采样分布映射:如何在球面上均匀采样
上面的问题可能过于简单,一眼就能确定服从概率密度分布的采样方法,但事实上,很多复杂情况下确定概率分布之后,生成服从这个分布的样本并不容易……
已知一个概率密度函数,据此找出服从这个分布的样本集合的过程,称为采样分布映射(Sampling Distribution Mapping)。采样分布映射的方法有很多种,比如逆变换采样(Inverse Method)和接受拒绝采样(Acceptance Rejection Sampling)等等
以下就是一个逆变换采样的经典例子
再来一个图形渲染中会遇到的经典问题:如何在球面上均匀生成随机点
先考虑球面坐标公式,3个值即可确定一个球表面的点:即半径,方位角和极角
在半径确定的情况下,可以均匀的生成 随机数,其多次随机生成在平面中表现如下:
![](https://i-blog.csdnimg.cn/direct/d3f2129e206f484ab60c6a07c74ca5c0.png)
但在球面上,很明显可以看出,其并不是均匀的,越到极点处越密集,这个其实也很好理解:如果把圆水平切成无数个小块,越是靠近极点的小圆块的半径就越小
用数学的方法解释就是:对于半径为1的球体的微面元 ,其并不是一个常量,它和极角
有关,
越接近于 0 或
,其微面元越小,相反越接近
,其微面元越大
单位球的表面积是 ,如果想要在球表面上均匀采样,就需要每个采样点落入任意一个微面元
的概率都是相等的,都为
,即满足概率密度函数
对于如上理想的,二维的概率密度函数 ,可求其边缘密度函数:
再积分可得边缘概率分布函数(Cumulative Distribution Function, CDF)
接下来根据 Inverse transform sampling 算法:如果我们已经知道了概率分布函数 ,就可以求出其概率密度函数对应的采样分布函数
,满足
为在 [0, 1] 域内的均匀分布变量
这个逆变换采样公式看上去也非常的简单:即求 CDF 的逆函数,对于任意随机变量 ,随机变量
和其有着相同的分布情况,而
是均匀分布的(证明可看上面超链接),因此可以得出
通过此映射,即可产生在球面上均匀分布的采样了
在球面上均匀采样在图形领域应用的场景并不少,PRTGI 就是其中一个例子,而对于逆变换采样算法,则是在基于图像的光照中镜面 IBL 滤波项的计算中有着应用
三、概率与样本、另一个角度的蒙特卡洛
回顾一下《概率论与数理统计》里的基础知识
3.1 期望与方差
对于在域 Ω 上的随机变量 𝑥,设它的概率密度函数为 𝑝(𝑥) ,那么它的期望如下
- 期望具有线性关系,即对 𝑛 个随机样本 𝑋𝑖 ,及任意常数 𝑐𝑖 ,有
- 期望同时也具有可乘性:对于两个独立样本 X, Y 有
方差如下:
方差与期望的关系为
3.2 无偏性与一致性
对于满足抽取的 n 个样本 ,在每个样本被选择的概率都服从同一分布
的前提下,这 n 个样本的均值就可以作为总体均值的估计量(estimator)
- 举例子就是:100个人求平均身高,公平随机挑选出其中10个人,将他们10个人的身高的均值作为总体平均身高(也就是被估量(estimand))的估计量
- 用数学公式表示就是:估计量
,并且此估计量的期望
(其中
是因为每个样本都和 x 一样服从相同的分布)
很直观,对于①:只抽样出 n 个样本的均值的期望,与总体样本的均值的期望是一样的,这就对应②中的估计量 会是一个无偏估计量(unbiased estimato)
现在回到前面第二章中的蒙特卡洛积分 ,约等号后面的求和公式就是一个估计量,而约等号前面的积分就是被估量,很明显,这个蒙特卡洛积分也是一个无偏估计量,推导如下:
显然,它的期望与被估量是相同的
当然,这还有没有结束,如果某个估计量随着样本容量的增多,其方差越来越小并趋近于零,则称该估计量为被估量的一致估计量
- 举例子就是:100个人求平均身高,公平随机挑选出5组,每组10个人,这5组身高的均值的方差 A 理论上会比公平随机挑选出5组,每组20个人,这5组身高的均值的方差 B 要大。同时随着每组抽样的人数越多,整体均值方差就会越小
-
用数学公式表示就是:估计量
,其方差
对于②,随着 ,
,所以样本均值估计量是一个一致估计量
同理对于对于蒙特卡洛积分估计量,其也是一个一致估计量,证明和上面无偏的证明类似,略
3.3 多重重要性采样(MIS, Multiple Importance Sampling)
回顾下前面 2.2 中介绍的重要性采样方案,我们所有的样本都是从同一个分布获取的,但是在随机变量的成分比较复杂的情况下,可能并不一定能找到与随机变量比较契合的分布,导致获取的样本并不能在所有情况下都有比较高的质量
一个经典例子就是 PBR 中的渲染方程
我们要求得的 会受到三部分因素的影响:分别为入射辐射率(radiance),BRDF 以及 cos 因子,如果仅考虑其中一个单一元素进行采样(单一重要性采样),就可能就无法得到最好的采样效果,以下这张经常出现在各大光线追踪文章中经典的图就展示了不同重要性采样策略下,不同的采样效果对比
- 对于上左图,对入射光源进行重要性采样,虽然每次采样命中光源的概率大大增加,但是对于非常光滑的表面,入射光对出射光源贡献非常的集中,此时对于每一条出射向量,就可能很难找到对其有贡献的入射光,从而出现噪点(可以理解能采样到大量入射光,但是没有意义,因为绝大多数都没有贡献)
- 对于上中图,对 BRDF 进行重要性采样,问题就是命中光源的概率变小,既然无法命中光源,那么对于光源分布比较集中的情况下,就有可能出现噪点(可以理解为找不到“指向光源”的向量)
因此,想要得到一个更好的蒙特卡洛采样结果,就需要同时考量如上的所有因素
多重重要性采样即:对于 n 个 PDF 分别采样了
个样本,对于每个 PDF,都提供一个参与计算的权重(即 MIS 权重)
,此时估计量的公式就如下:
其中 指的就是从第 x 个 PDF 中采样的第 y 个样本,对于第 i 个分布
本质上就是对
进行估计,最后对所有的
累加起来就是原想要的结果
现在来看这个估计量在满足什么条件下可以是无偏估计量:
显然:只有满足以下条件时,才有 ,该估计量才是无偏的
- 当
时,
- 当
时,
为了满足条件① ,一般会选择如下几种模式的权重
-
均值权重,对于所有 n 个满足
且
的 PDF,
-
平衡启发式(balance heuristic):即
-
指数启发式(power heuristic):即
这些都会在光线追踪算法中被用到
3.4 采样分布映射:重要性重采样(SIR, Sampling Importance Resampling)
虽然重要性重采样(SIR)和重要性采样方案(IS)两个名词听起来非常像,但是两者并不是一个东西,前者解决的问题是如何选择一个概率分布,使得利用该分布生成的样本进行计算时误差更小,而后者和逆变换采样一样,也属于一种采样分布映射算法,解决的是确定这个概率分布之后,如何生成服从这个分布的样本的问题
对于前面 2.3 的案例,理想的 PDF:,它可以很轻松的求出边缘密度函数和 CDF,但是对于更加复杂的 PDF,就可能无法求得其 CDF 和反函数,此时就需要有另一种估计样本的方案
SIR 的流程如下所示:
假如我们想要从概率密度函数为 的分布中进行采样(
一般被称为 Target PDF),但像前面所说的一样:
没有解析解或者太过于复杂。对此若想要找到目标分布,我们可以先构造一个简单的完全均匀分布的 PDF:
,之后对这些样本分配一个权重
,然后通过权重对这些样本进行采样,具体步骤如下
- 从这个非常简单的 PDF:
中取出 m 个样本,记为
- 对 X 中的每一个样本,计算权重
- 然后从 X 中继续选出一组样本 Y,每个 X 中的样本被选中的概率与它的权重成正比,即如果设采样出来的某个样本为
,那么它在 X 中被选中的概率为
此时这组样本 Y 就将近似于目标复杂 PDF: 的分布,并且 X 样本总数 m 越大,就越近似
但是到这还没有结束,我们还需要推出这组样本 Y 的 PDF,以及它为什么近似于目标复杂 PDF: 的分布
前面③中提到:对于样本为 ,它在 X 中被选中的概率为
,通过条件概率公式可以得知:样本
在整个样本空间 Ω 中被选中的概率
,即等于
出现在 X 中、同时又从 X 中被选中的概率
- 显而易见:其中
出现在 X 中的概率
,m 即 X 中样本的的数量
到此,结合前面所有的公式,样本 在整个样本空间 Ω 中被选中的概率
就可被推出
对于该 ,一般被称为 SIR PDF,该 PDF 即为最终样本组 Y 真正服从的分布的 PDF
至于为什么 X 样本总数 m 越大, 就越近似于目标复杂 PDF:
?
很简单,直接认定 ,此时任意样本
都一定会出现在 X 中,X 即整个样本空间 Ω ,并且
,
将其代入前面
可得: 证毕,非常的优雅