Monte Carlo的数学推导
为什么Monte Carlo可以求解积分
期望值定义:
如果一个函数h,我们可以找到它在[a,b]之间的概率密度函数f (w = h / f),则该积分等同于w的期望值。
而LLD(Law of Large Numbers 大数定理)告诉我们,只要有足够多的样本,万物都难逃被统计的宿命。基于LLD, Monte Carlo方法实现了一种以离散的方式解决积分的办法,可以让i无限接近I。这种思路非常实用,比如一个复杂函数的积分,而且简单易用,具有通用性。
如上,比如[a,b]区间对函数f求面积,首先,x方向在[a,b]之间是均匀分布的,所以pdf(概率密度函数)是1 / (b-a),因此,最终是求E(f* (b-a)),对应的数学公式如下,公式中的h对应上图中的f,而公式中的f是pdf函数。为了节约时间,直接找现成的图片,凑合看吧:
改善Monte Carlo采样方法
举个栗子,你打算找一个伴侣,给你三个选择,a) github,b) 梦境里,c)千山万水,给你三次机会,你会如何分配?除了对三次都选A的同学表达我的敬意外,这里的问题是,有多大的概率,才能说出“原来你也在这里”。从ABC三个选择来看,这似乎是一个悲剧,那我们换一个问题,如何量化结果和理想的这种差距呢?这就是方差Variance。
假设对一个函数f取常数c,设置该函数对应的pdf为cf(x):
此时,f(x) / pdf = 1/c,常数,方差为零。换句话说,如果我们能够知道函数f对应的pdf,基于该概率的采样,收敛最佳,换句话说,最少的次数可以达到较好的期望。
然而,很多时候,pdf函数很复杂,或者不存在,我们需要选择一个近似的,简单的函数来模拟该pdf,这就是Importance Sampling的思路。
如上,我们无法获取函数f,则用函数g来取代,如下图,我们可以证明,期望值仍然是I
基于方差公式V = E(X^2) – (E(X))^2 = E(X^2) - I^2,可以看到,当g趋近于f时,方差越小,就好比无数折线拟合的圆,看似平滑却充满了纤细而深邃的裂痕。
Importance Sampling在光线追踪中是很重要的优化手段,不知道是我们不满足还是这个世界确实不完美,面对光线的千变万化,很多时候,很难用一个简单的函数来拟合pdf,比如室外和室内的灯光差异等。为了更高效的提高光线追踪的收敛速度,Eric Veach在那篇旷世论文《ROBUST MONTE CARLO METHODS》中提到了MIS(Multiple IS)方法,思路很简单,我们提供多个曲线来拟合pdf,然后找到一个标准,来判断在某一个区间中这些曲线之间的权重。比如有a和b两种采样策略,保证在任意区间,w(a) w(b) = 1,找到一个评价标准p,谁的策略好,谁的权重大,动态的调整。注:Veach因为这篇论文对电影行业的贡献拿到了奥斯卡奖。
如上,Wi对应不同的采样策略,Ni对应该策略下对应的采样次数,p是IS中对应的pdf函数。Sum(Wi)和为1,证明期望值不变。
这里,有一个限定条件Sum(Wi) = 1,求方差最小。典型的Lagrangemultiplier求解λ。在论文9.A proof中给出了证明,为了保证阅读体验,我们直接给出结果,此时的方差最小:
如上,我们结束了MonteCarlo知识点的相关整理。算是光线追踪中数学部分的完美证明,然后我们再看看物理世界中,是如何糟蹋这些公式的(approximation)
Light Transport
首先,祭出光学公式,考虑到有些人可能没看之前我写的Ray Tracing文章,耐心解释一下:Wi是入射角度,比如光源,Wo是射出角度,比如相机,该积分的意思是所有可能的入射角累计的光源辐射强度E,对应irradiance, 然后转化为射出角度下对应的L,radiance。F是B*DF转换函数,简单说就是一个转换比例,G是几何函数,对应Wi两端和法线的夹角和距离,这里留一个小疑问,如何推导A到Ω的过程?
如上是该函数的物理解释,不管怎样,有了积分,我们就可以采用蒙特卡洛积分:
两种采样方式,从眼睛到光源的Importance Path,或从光源到眼睛的RadiancePath。两者的效果是一样的,只是这个承诺,需要一万年(∞)来证明。
这样,我们可以采用如上的某一个方法采样,实现渲染效果。当然,这只是direct light,光线只有一次反弹,而现实中光线在光源和眼睛之前会有无数次的反弹,只是每次能量会衰弱,但发生的事情总是存在的,看不见并不等于不存在,所以,通常我们会限定一个迭代次数。
不同场景下,两者的收敛效率是不一样的,比如室外阳光充分,从眼睛出发的射线,大概率会找到光源,环境光也是光源,概率较大,而室内暗淡的环境下,从光源出发,找到眼睛的概率会大一些。我们可以用某一种策略采样N次,用另一种采样M次,但也可以分区域采样,如上图,这就是NEE的思路,每次和物体相交,我们尝试向光源发送一条射线,如果可见,则该采样成功。当然,每次根据Wi获取对应的pdf,也就是IS的方法。
但这样有一个问题,如果眼睛出发的光线D,误打误撞的碰到光源,这个贡献是无效的,因为和C重复了,这就有点可惜,于是C和D商量一下,要不大家来一个分成,这就是MIS的策略。
NEE算是比较常见的光线路径模拟策略,但还是有遗憾,在光线路径中,只有最后一个光线是从光源出发的Explici t path,其他的都是基于材质的Random Walk。一些光学现象很难模拟,比如Caustic,或者灯光被某个透明材质包围,于是,便有了Photon Mapping策略,从光源出发。
这么多的光路策略,不同场景下各有优劣,Eric Veach提出了BDPT的路径,大概的思路是你从眼睛出发,我从光源出发,大家各自Random Walk,每走一步都看看是否能找到对方。这样,便有了很多不同的Path,采用基于面积的概率,给每一条Path设置对应的权重,MIS的思路,将所有光线叠加在一起,达到一个近似的最优解。如下图所示,原始的光线效果,以及MIS加权后的效果:
文章到这就结束了。从开始的认真写作,到中间发生了一个很伤悲的事情,最后麻木的写完,不知道读到这的人是否能感受到我情绪上的变化。我觉得自己挺矛盾的,作为工程师,思考问题要注重逻辑上的严谨和可证实,但有时候,也觉得自己很感性,会无缘由的做出一些非理性的选择,比如辞掉12年的工作,拒绝阿里的Offer而选择读书,这可能算是迄今为止我做过的最帅的选择。记得同事开玩笑说,表面上我是一个程序员,骨子里是一个诗人。当然,我没资格当诗人,因为诗人多数是渣男,只有帅哥才有资格渣。
作为工程师,我很满足,但当我审视这份满足感时,发现它是建立在两个基础上,第一,有无数待解决的问题满足好奇心,第二,这些问题必定可解。有时静下心来推一个数学公式,会被巧妙的推论折服,一霎那的兴奋后是毫无缘故的失落,觉得自己做的事情没意义,或者觉得这个世界并不如这些公式般可解,或者心里明白,所谓的快感,只是多巴胺的化学反应。于是,我开始每天跑步,因为我知道运动能产生内啡肽,可以感知幸福。我不愿意提及那些内心深处的遗憾,就算写,也只能找个角落,在吞与吐之间反反复复,觉得只要自己足够强大,可以接受那些遗憾,可不经意见听到的某首歌,还是会觉得落寞。想起了Mary and Max里的一句话,如果我在一个孤岛上,那么我就要适应一个人生活,只有椰子和我。可看看孤独这两个字,把它们拆开,还有瓜果还陪着蚊虫,不得不自嘲,至少我还可以选一首歌,大声唱过,再看天地辽阔。