一.Monte Carlo Integration
作用:给定一个函数,计算其定积分
在b-a区间内均匀采样xi,用xi * f(xi)作为面积值,将所有面积值相加求平均.
对于不普遍情况的非均匀采样(p(x)为概率密度函数,均匀采样则概率密度1/(b-a))
要求:要是定义在x上的积分.采样越多误差越小
二.path tracing
(注意区别Ray tracing)
whitted-style ray tracing 认为物体表面反射沿镜面反射方向,若对于粗糙物体,则本该反射面的一小块区域都会亮,whitted-style ray tracing难以做到.whitted-style ray tracing的光线打到漫反射物体上就不再反射了,而实际上漫反射也是会继续反射的.
解出渲染方程能获得更真实的结果(用Monte Carlo Integration)
在半球方向随机选一个方向采样(这里用均匀采样)
则对于任何一个点的一次直接光照
伪代码:从被照物体的半球向外发射光线,若打到光线,则叠加计算结果
对于全局光照的多次弹射,若要求物体受到p的反射光,可以先把Q当作光源,求p的直接光照,Q再与光源算直接光照.
递归算法伪代码:
但该算法若物体发出无数射线,有很多射线记中目标,目标又由每个反射点发出无数光照,则会指数爆炸
可以在反射点随机只发射一根光线.多次重复求平均.把指数控制为1,避免指数爆炸问题.
伪代码:
为了防止递归无止境,引入俄罗斯轮盘赌的方法.一定的概率(自定义)停止往下递归.
p的概率发出射线,将放回值除以p.这样做的好处是最后的期望值还是Lo
若采样次数少,从每一个像素发出的光线少,则采样画面有黑点噪声.
为了使每一个发出的光线尽量打到光源,则可以手动规定PDF,把原本的半球形改为自定义范围,例如光源与反射面直接连线的小范围.
先看光源,若均匀采样光源,则PDF = 1/A,只要找到dA与dw的关系,就可以把球面上的积分范围用A表示.
(分母是距离平方)
则转换后,新的求Lo方程,每个值都取在光源范围内,不浪费光线.这里就可以不用俄罗斯轮盘赌了.间接光照继续用.
参考资料Games101