课堂笔记_ 光线跟踪原理

Turner Whitted于1980年首次提出一个包含光反射和折射效果的模型:Whitted模型,并第一次给出光线跟踪算法的示例,是计算机图形学历史上的里程碑。发表于Communications of the ACM 1980。

定义:

课堂笔记_ 光线跟踪原理

特征:

通过光线跟踪,可以很容易地表现出例如阴影、反射、折射等引人入胜的视觉效果。除了基本的几何形状,(例如球体、椎体、立方体等),光线跟踪容易适用于更复杂的物体表示方法,(例如多边形网格表示或者符合形状等)

核心伪代码:

课堂笔记_ 光线跟踪原理
求交点,计算局部光照,判断折射反射方向,递归求解。

光线求交

光线的表示

课堂笔记_ 光线跟踪原理

光线与平面求交

课堂笔记_ 光线跟踪原理
课堂笔记_ 光线跟踪原理

光线与三角形求交

一般做法:
1.首先计算光线与三角形所在平面的交点
2.判断交点是否在三角形的内部

三角形与光线的交点可以通过结合重心坐标快速计算:

重心坐标的表示,在三角形内部的点P将三角形可以分为三个小三角形,分别用小三角形的面积除以大三角形的面积得到三个数来刻画P点的坐标。

课堂笔记_ 光线跟踪原理
课堂笔记_ 光线跟踪原理
课堂笔记_ 光线跟踪原理
可以通过线性求解得到交点的重心坐标以及直线参数t。

光线与多边形求交

不能像三角形那样方便的利用重心坐标计算,需要一个更普适的方法,即上边提到的首先计算光线与多边形所在平面的交点,然后判断这个交点是否在多边形内部。

课堂笔记_ 光线跟踪原理
课堂笔记_ 光线跟踪原理
课堂笔记_ 光线跟踪原理
注:交点在顶点的时候得考虑;光线方向是水平的。

最快的点包含判别算法–弧长法
课堂笔记_ 光线跟踪原理
按逆时针方向遍历多边形的每条边,每条边与点P形成一个角度,这个角度也是带符号的,上图中左边图形的角度之和为0,右边的图形角度之和为360度。但是求角度需要反三角函数,计算困难。好处是稳定,可靠性高,对于比较小的误差可以忽略

以被测点为圆心,作单位圆,计算其在单位圆上弧长的代数和。
–代数和为0:点在多边形外部。
–代数和为2π:点在多边形内部。
–代数和为π:点在多边形边上。

上述弧长法的主要缺点在于角度计算量,但是鲁棒性很好,对此提出改进的弧长法:
课堂笔记_ 光线跟踪原理
穿过两个象限:
课堂笔记_ 光线跟踪原理
课堂笔记_ 光线跟踪原理

光线与球面求交

课堂笔记_ 光线跟踪原理

1.代数方法求解:有可能出现奇异值导致的不稳定性
课堂笔记_ 光线跟踪原理

2.几何法求解:能快速判断光线与球面是否相交、光源是否在球体内部、光线的方向
课堂笔记_ 光线跟踪原理
这样求解鲁棒性好。

光线与长方体(包围盒)求交

课堂笔记_ 光线跟踪原理

Slab算法和Woo算法:复杂度类似。

光线追踪实现思路

光线投射

由视点向该像素中心投射一条光线,射向场景当中。对场景中的各个物体,计算与投射光线的交点,存储所有物体的交点中距离视点最近的一个。接着根据光照、物体材质、以及法向方向,使用局部光照模型计算像素颜色值

明暗效果仅仅由第一次相交的物体表面法向方向、材质、视点和光照方向、以及光照强度等因素共同决定。而光线投射并不考虑第二层以及更深层次的光线,因此不具有阴影、反射、折射等效果。

添加阴影

当前的交点处发射一条光线(阴影测试线),阴影测试线射向光源,如果测试线被物体遮挡,则就在阴影下,否则不在阴影***意此处只是考虑与物体是否相交,而不关心具体的交点。

添加反射和折射效果

光线跟踪具有模拟物体表面反射效果以及折射效果的能力:

首先,计算光线与场景中物体的最近的交点。
然后,计算光线在交点处被物体反射和折射所产生的新的光线的方向,新的方向由入射光方向、物体表面法向、以及介质共同决定。
对新产生的管线(反射光线和折射光线)分别继续进行跟踪。

递归结束(一般三次):
1.在光线弹射一定次数后停止
2.在光线的贡献衰减到足够小时停止

添加纹理

一些问题思考

1.计算精度问题;
2.加速问题;
3.光线跟踪为什么要以视点来反向跟踪?如果按照光源发射的多条光线来计算,由于经过弹射最终能够抵达视点的光线是及其少的,得到的效果会很差,计算也很复杂。