计算机图形学课程的学习分享
Photon mapping 光子映射
一般来说:
局部光照=直接光照
全局光照 =直接光照 +间接光照
Q:为什么光线跟踪做不了?
A:漫反射是光线跟踪的终点,此时计算的色光仅限于直接光照;而辉映(Bleeding) 和焦散(Caustics)正是源于间接光照。事实上全局光照包含了真实场景中全部的光照,这使得光子映射比光学追踪更加进步。
Q:什么是光子映射?
(1)Photon tracing:从光源向场景发射光子,并在它们碰到漫反射物体时将它们保存在一个光子图(photon map)中,以建立光子图。
(2)Ray tracing:使用统计技术从光子图中提取出场景中所有点的入射通量以及反射辐射能。
Photon mapping 发射光子
光子的发射有具体的分布函数:
(1)点光源:各个方向均匀分布
(2)矩形光源:发射点均匀分布,发射方向均匀分布
在最后的图像渲染时,需要通过光子图对色彩进行估算。发射光子越多
渲染出来的图像越准确,于是要考虑内存优化问题。
Photon mapping 光子跟踪
(一)传播方向:
(1)反射:就是反射
(2)折射:就是折射
(3)漫反射:按照Cos的概率分布随机选取方向
(二)衰减方法:
(1)俄罗斯转盘
按物体材质反射、折射、漫反射还有被吸收的比例随机选择一种,不做衰减,只做色光变化
Photon mapping 光子存储
(1)只有光子碰到漫反射物体时才被存储下来;
(2)用KDTree组织光子图:
相比存储三角面片的KDTree ,建树更简单,华竟存储点;
询问更加复杂,需要查找空间某点最近的K个光子。
Photon mapping 光亮度估计
在光子图被组织好以后,对场景做一次光线追踪。在遇到漫反射物体时,不直接通过光源计算色光 ,而是通过光子图来估算。
以碰撞点为球心 ,找到最小的包含k个光子的球,其半径为R。该碰撞点漫反射的亮度应与R的平方成反比。
将这k个光子类比成光源,结合Phong模型计算这些光子赋予碰撞点的平均色光,再除以TR2,即可得到这次漫反射所要返回的颜色值。
PPM 渐进式光子映射
在光子映射算法中,通过光子图估算漫反射时获得的色光,光子图越大,估算越精确。
然而计算机内存大小有限,渲染不能做到任意精确,PPM解决了这一问题。
PPM倒转了Photon tracing和Ray tracing的顺序。首先将Ray tracina时检测到的碰撞点组织成一棵kd-tree,而后一轮轮地发射光子,每一轮将R减小一次,每一轮渲染一张图。随着轮数的增多,光子数量越来越多,R的值越来越小,最终结果也越来越精确,这样PPM算法也使得光子映射能生成任意精准度的图片,只要时间允许。