之前在图形渲染管线板块有介绍BlinnPhong光照模型,其中有提到这种局部光照模型没办法处理全局光线传播的效果,而现实世界中的场景是经过无数次光线传播再传入人眼的。因此,要想渲染出更加逼真的效果,就需要引入光线追踪的算法。
顾名思义,光线追踪算法中对于光线的定义是非常重要的,这里图形学中采用的是几何光学的定义,主要把光线做了以下定义:
光线是沿直线传播的;
光线间不发生碰撞;
光线到观察点的路径是可逆的。
根据第三点光路可逆的法则,我们就可以把光线的起点定在人眼(摄像机),以此来描述光线追踪的步骤。 1. Ray Casting
从摄像机想投影平面的每一个像素点发出一条射线,通过射线寻找与物体的交点,再将交点与光源进行连线判断交点是否在阴影中。
2. Recursive (Whitted-Style) Ray Tracing
Ray casting的过程仍然是局部的,那么如何引入全局概念呢?这里就用到了经典的Whitted-Style路径追踪算法。算法中定义每一个交点的颜色贡献是由直接光照、间接反射光照和间接折射光照(可能)组成的,将这些部分进行权重累加,再使用BlinnPhong模型进行着色,则得到投影平面上最终点的颜色。