光线追踪理论与实践
前言
作于2024年CCF图形学启明星计划夏令营期间。主要依据是徐昆老师讲解的光线追踪理论基础部分。
光线追踪的发展历程
光栅化渲染管线将场景中的所有物体进行MVP变换,是一种物体视角的渲染思路。
光线追踪渲染管线中场景中的物体不再变换,而是从相机一端以像素为单位投射光线,是一种相机视角的渲染思路。
光线投射 Ray Casting
光线投射由Arthur Appel在一篇名为《 Some techniques for shading machine rendering of solids》中提出。这是光线追踪的第一步,需要将屏幕空间转换到世界坐标下,然后以每个像素为起点向场景中发射一条光线,并根据与光线相交的第一个物体表面的能量进行渲染。
光线追踪 Ray Tracing
Whitted-Style光线追踪在光线投射的基础上使用了递归式的光线追踪。当光线与材质表面相交时根据不同表面进行计算。但Whitted-Style并没有考虑直接光照,且物体材质的表现并不全面(没有glossy、diffuse项)。
路径追踪 Path Tracing
1986年,Kajiya提出了路径追踪方法。Kajiya先生系统提出了光线的传播途径,以及渲染方程。
$ L_o(x,\vec{\omega}) = L_e(x,\vec{\omega}) + \int_{\Omega}f_r(x,\vec{\omega ^{‘}},\vec{\omega}) L_i(x,\vec{\omega ^ {’}})(\vec{\omega ^{‘} }\cdot \vec {n}) d \vec\omega ^{’} $
式中,
$ L_o $ 指x位置处具有的总能量
$ L_e $指x位置处自发光的能量
后面的积分表示x位置处接收从$ \vec \omega ^{'} $方向传播来的能量。$ f_r $ 是材质的BRDF公式。
现在大家约定俗成,通常讲的光线追踪指的就是路径追踪。但要清楚两者的区别,不要混淆。文章中会使用路径追踪,尽可能区分两者的区别。
下面是路径追踪的理论基础:
光线追踪理论基础
以及CPU上的路径追踪实现:
CPU光线追踪实践