光线追踪算法
光线追踪算法是一种为数字和物理场景生成图像的方法。它也是数字图形学最重要的技术之一。它是一种计算机图形学技术,其原理是模拟光路径以计算场景中每个表面之间的拾取和散射,以最终完成图像渲染。
光线追踪是一种基于物理的图形渲染技术,它弥补了直接光照方法的许多缺陷。光线追踪模拟光线在表面之间的传播。它通过模拟光线在表面之间的散射,创造出自然的图像质量。这意味着它可以处理复杂的场景,表现真实的位置和反射。
在实施光线追踪算法之前,首先需要创建3D数字场景,其中可以添加几何复杂的三维模型,以及照明,几何变换等参数。在表面参数上,可以定义表示材质的参数,如不同颜色的漫反射/镜面反射,粗糙度,透明度等,并计算出物体表面的表现。在一旦场景中加入了照明参数之后,就可以开始光线追踪算法。
算法本质上是将场景拆分为微小的光子,并从物体上发射出去。当光子与物体发生碰撞时,它们会根据材质特性而分裂为几条小光线,这称为散射。随后,这些小光线将根据物体周围的反射和透射来继续散射。这个过程一直持续到每条光线停止散射为止,并将光线路径和像素值根据吸收模型计算出来,以生成虚幻的视觉效果。
光线追踪效果非常高质量,它是最接近真实视觉效果的渲染技术,因此它被广泛应用于电影,游戏,设计视觉分析等VFX领域。此外,光线追踪算法尚未能满足大型的游戏渲染,因此最近出现了几种更先进的渲染技术,如全局照明,程序着色器等。
现代光线追踪算法
上面描述的whited-style光线追踪模型虽然将全局光线传播的算法引入到光照模型中,但仍然不够准确,原因有二:
1)光线传播中只考虑当前交点反射和折射出去的光线,而没有追踪漫反射的光线;
2)着色采用的还是BlinnPhong这个经验模型,无法精确的模拟真实物理的现象。
针对以上的问题,我们就要引入真实的物理概念来定义光线追踪的现象,因此就有了基于物理的渲染(PBR),而辐射度量学就是这样一套测量光线能量的学科。
5.1 辐射度量学
一些比较重要的物理概念:
-
Radiant Energy(辐射能):表示能量,单位:J(焦耳)。
-
Radiant flux(辐射通量/功率):单位时间的辐射能量,单位:W(瓦特)/ lm(流明)。
-
Radiant intensity(辐射强度):每单位立体角的辐射通量,单位:W·sr−1。
-
Irradiance(辐照度)*:入射表面的辐射通量(不带方向)(从所有方向到达某一点的能量之和),单位:W·m−2。
-
Radiance(辐射率)*:每单位立体角每单位投射表面的辐射通量(带方向),单位:W·sr−1·m−2。
5.2 双向反射分布函数(BRDF)
直观的理解,不同物体表面材质自然会把一定方向上的入射亮度反射到不同的方向的光线上,如理想光滑表面会把入射光线完全反射到镜面反射方向,其它方向则完全没有。如理想粗糙表面会把入射光线均匀的反射到所有方向。因此所谓BRDF就是描述这样一个从不同方向入射之后,反射光线分布情况的函数,定义如下:
5.3 反射方程
5.4 渲染方程
5.5 如何解出渲染方程(蒙特卡洛积分)
当一个积分很难通过解析的方式得到答案的时候可以通过蒙特卡洛的方式近似得到积分结果。
5.6 真实照片(左)与基于物理渲染的效果(右)的对比