蒙特卡洛积分
为什么用蒙特卡洛积分,用来做什么?跟黎曼积分区别,黎曼积分是平均分成n等分,取每个小块中间的值取计算每个小块面积,再将n份集合加起来。蒙特卡洛积分就是随机取样,假设随机取样点xi,对应的f(x)就是长方形的高,宽就是b-a。那长方形面积就是f(x)*(b-a)。那重复多次取平均,就可以估算这块区域的面积。
假设ab之间均匀采样,那p(x)的值都是1/(b-a)
n越大,结果越准。
Whitted-Style Ray Tracing 是完全反射的,不能解决Glossy reflection
漫反射会均匀把光反射到不同方向上去。如果直接光照,灯往下打,那天花板肯定是黑的。光会反射很多次。
Whitted-Style Ray Tracing是错的,但是渲染公式是对的,需要要解决2个问题
换句话说它一个积分,我们要计算左半球方向的积分,那就是在不同方向采样,随机选一个方向,那就是随机变量。其实就是均匀的对半球采样。
全局光照
n等于多少,才不会爆炸? n=1,n的多少次方还是1.
简化 n=1,用蒙特卡洛积分就叫路径追踪。n要是不等于1,也有说法,叫分布式光线追踪。
穿过一个像素,可以有很多不同的光线,对这些路径求平均就是他们的radiance,是不是有足够多的path就可以保证准确了。这叫path,就是一个方向打入只会向一个方向打出,随机选一个方向,不再一下产生一束。最终会形成,一条从视点到光源的路径。
这样就可以 把Ray Generation和着色联系在一起
光追算法永远不会停的问题
真实的世界光线弹射次数也不会停
限制次数会损失能量。真实的就是无数次,但是计算机里没有办法模拟无数次,死循环了。怎么办?引入俄罗斯轮盘赌
通过概率考虑停止光线弹射次数。这里先确定一定概率
这里是不是弹射光线如果有P_RR的概率生成下来,那就能算出来,会弹射多少次停下来,就是求N次数。
打的光线取样越少,noisy越高。能表现,但不高效。
在不同情况下,能不能打到光线,是看运气的,光源越小越难打到。不高效!
在像素上采样改成换成在光源上采样。渲染方程需要写成光源上的渲染方程。
光的计算就拆成光源计算光源直接光采样计算,和间接光采样计算带俄罗斯轮盘赌概率算法计算。
以前说光追就是Whitted-style ray tracing 现在是所有光线传播方法的大集合。