无处不在的蒙特卡洛

tiankong @ 2021年01月14日 世界观

科普君XueShu雪树 

无处不在的蒙特卡洛

【雪树评】很多人在做抉择的时候,喜欢扔硬币或者掷骰子。
这跟蒙特卡洛方法一脉相通。应用十分广泛。
譬如,在动画电影的渲染中,光线的分布至关重要。屋里一个灯泡照在一个球上,这个球的影子该怎么画才能尽可能地逼真?
你可能会说,这还不容易嘛,光沿直线传播,照不到的地方画成黑的不就行了。
但真实的世界不是非黑即白的,而是有一定的灰度。你打开屋里的灯,即使是物体背后原本直射不到的角落里也不是完全漆黑的阴影。
因为光是在屋里反射过来反射过去的。光打在墙上,被墙反射,又照到别处,再反射。经过这样曲折的弯弯绕绕,总有光绕到那些隐蔽的角落里。
而且照在墙上的反射和照在镜子上的反射不一样。镜子是光线进去的角等于出射的角度,很对称,而墙的表面凹凸不平,反射是随机的,无规律的,出来的角度跟进去的角度没关系,这就是所谓的漫反射。
这些都是一种定性的思考。问题是怎么精确定量地确定某一个地方到底照过去多少光呢?
这种问题是物理学家和数学家会问的问题。
有一种解答办法是直接做实验。但是涉及到动画的话,这不现实。
蒙特卡洛提供了一种高效的方法,在电脑上运算就行,快速而高效。
其实说穿了并不难。
关键的要点在于,墙上每一次漫反射不是随机的嘛,你就利用好这种随机性。
你想先只画出一根光线到底是怎么走的。
尤其是碰到墙之后,该选怎样的反射角?每当这种关键的抉择时候,你可以用电脑掷一个大骰子。譬如,这个骰子可能有三百六十个面,每个面写着一个角度。掷到哪个面,就选哪个反射角度。
这个所谓的骰子,就是随机数发生器,网上有现成的程序。
然后再依此类推,画出成千上万条光线。
你画的越多越逼真。但是再多它也是有限的,一定可以画完的。
而真实的实验中光线其实是无限条。
所以我们可以用有限模拟无限,用电脑把现实世界模拟得栩栩如生。
蒙特卡洛的基本思想是很简单的,就是遇到关键的有随机性的地方,就掷骰子。最终就能抽取出一个高效合理的样本。
但是呢,科学中的问题千千万,要想把这个简单的思想跟具体的问题结合起来,那可不算太容易,难道了千千万的博士生。困难之处往往不在于蒙特卡洛,而在于你对那个具体科学问题背后原理的理解。
MarbleScience这个视频举了蒙特卡洛的两个例子。前半部分举了个计算圆周率的例子。后半部分就详细地解答了这个动画渲染的问题,值得一看。

(我这段文字其实已经概括了它的精髓,而且把它没说明白的地方也说明白了。)

(视频)

打赏一下

微信扫一扫打赏

支付宝扫一扫打赏