8.5.2 基本光线跟踪算法

��光线跟踪算法能够生成高质量真实感图形。大量的光线与景物的求交测试和交点计算,是导致计算开销大的主要原因。目前主要的研究焦点在于:
��1) 快速确定光线与景物是否有交;
��2) 提高光线与景物的求交计算的效率。
��这里,我们将先说明光线跟踪算法的基本过程,然后介绍光线跟踪算法。
��图8.17所示是递归光线跟踪的例子。在该场景中,有一个点光源L,两个透明的球体O1与O2,一个不透明的三角形O3。视线E从视点出发,穿过视屏一个象素点的中心, 源直接照射到P1点上,它没有被其它物体遮挡,于是我们就用局部光照明模型计算光源对P1点在其视线E的方向上的光强,作为该点的局部光强。光线E在P1 点处衍生出两支新的光线,即反射光线R1和折射光线T1,我们还要继续跟踪,以便计算周围环境在P1 点产生的镜面反射光和规则透射光,它们也对P1点的光强有贡献。在反射光线R1方向上,没有其他物体与R1相交,那么就设该方向的反射光强为零,并结束这一光线方向的跟踪。然后,继续对折射光线T1进行跟踪。折射光线T1在物体O1内部传播一段距离后,与O1相交于点P2,由与场景中最近的物体O1相交于P1点。从P1向光源L作一条阴影测试线S1,测试发现光于该点在物体内部,我们假设它的局部光强为零。同时,在点P2又衍生出两支新的光线,即反射光线R2和折射光线T2,在反射光线R2方向,没有其他物体与它相交,那么就设该方向的反射光强为零,并结束这一光线方向的跟踪。我们将继续对折射光线T2进行跟踪。T2与物体O3交于点P3,作P3与光源L的阴影测试线S3,测试发现P3点没有被其它物体遮挡,那么计算该处的局部光强。由于该物体是不透明的,如果物体O3是理想漫反射面,则结束跟踪;反之,如果O3是光滑的表面,那么我们可以继续跟踪反射光线R3,结合局部光强,来得到P3处的光强。反射光线R3的跟踪与前面的过程类似,算法可以递归地进行下去。重复上面的过程,直到所有衍生出来的光线都满足终止条件为止。这样我们就可以得到视屏上的一个象素点的光强,也就是它相应的颜色值。这就是对象素P处光线的光线跟踪过程。
��光线跟踪的终止条件有以下三种:
��1) 光线射出场景外,即光线与场景中的景物没有交点,或者与光线相交的最近景物表面为漫射面;
��2) 当前跟踪层次已经超过用户设定的最大跟踪层数;
��3) 由于距离衰减等等因素,跟踪光线对显示象素光亮度的贡献小于预先给定的值。