在我们的场景中,有一个点光源L,两个透明的物体Q1与Q2,一个不透明的物体Q3。首先,从视点出发经过一个像素点的视线E传播到达球体Q1,与其交点为P1.从P1向光源L作一条阴影测试线S1,发现其间没有遮挡的物体,那么就用局部光照模型计算光源对P1在其视线E的方向上的光强,作为该点的局部光强。同时还要跟踪该点处反射光线R1和折射光线T1,他们也对P1点的光强也有贡献。在反射光线R1方向上,没有再与其他物体相交,那么就设该方向的光强为零,并结束该光线方向的跟踪。然后对折射光线T1方向进行跟踪,计算该光线的光强贡献。折射光线T1在物体Q1内部传播,与Q1相交与点P2,由于该店在物体内部,我们假设他的局部光强为零,同时产生了反射光线R2和赭色光线T2,在反射光线R2方向,可以继续递归跟踪下去计算他的光强,在这里就不在继续下去了。我们将继续对折射光线T2进行跟踪。T2与物体Q3交于点P3,做P3与光源Ld 阴影测试线S3,没有物体遮挡,那么计算该处的局部光强,由于该物体是非透明的,那么可以继续跟踪反射光线R3方向的光强结合局部光强来得到P3处的光强。反射光线R3的跟踪与前面的过程类似,算法可以递归地进行下去。重复上面的过程,直到光线满足跟踪终止条件。这样就可以得到视屏上的一个像素点的光强,也就是他相应的颜色值。可以有以下的终止条件:
该光线未碰到任何物体。
该光线碰到了背景。
光线在经过许多次反射和折射以后,就会产生衰减,光线对于视点的光照强度贡献很小(小于某个设定值)
光线反射成折射次数即跟踪深度大于一定值。