Path Tracing
路径追踪的提出就是为了去解渲染方程的积分项,并且它不是一个准确积分,只是用一种近似的方法去得到近似的积分数值解,它采用了概率论的一些思想,使多次采样的均值去得到一个近似的积分值。
正常情况下求解一个定积分需要去找它的原函数,但对于渲染方程的积分项,写不出它的解析式,所以使用蒙特卡洛去直接求它的数值解。Whitted-Style光线追踪不是很正确就是因为它无法决定diffuse,当打到一个diffuse表面,它就直接终止,然后做shading计算。真正的漫反射应该会将光线反射到其它物体表面,也就是除了直接光照还应该有间接光照。
蒙特卡洛积分思想推导:
然而这样一根光线打一个物体之后它的思想是发出更多的光线去判断有没有和另外的物体相交,这样递归计算时光线的数量就会过于多,是一个指数级别的增长。解决办法就是对于任何一个着色点,只向任何一个随机的方向打出一条光线:
这个就是路径追踪,它就是去追踪一条线的路径,每次打到一个物体就随机产生一个方向然后继续追踪,最后累加计算着色。
但这样的话结果就会很noise,所以为了解决它,就需要对于每一个像素多打一些光线,做多个光线的路径追踪,这样就可以解决这个问题。对于从摄像机产生光线,伪代码如下:
最后一个需要解决的问题就是如何终止这个递归,通过101的学习,普遍采用的是Russian Roulette的方法,用一个预先设定好的概率去决定要不要打下一个方向的光线。因为他是一个二项分布的离散型随机变量,它最后的结果一定是一个正确的值: