首页 理论教育虚拟现实应用开发实践:光线追踪问题与解决方案

虚拟现实应用开发实践:光线追踪问题与解决方案

【摘要】:80%~90%的渲染时间花费在计算光线和物体交点上。基本的光线追踪算法只能得到尖锐的阴影。2)解决方案性能。③限制交点检测的数目。快速判断光线是否和一组物体相交。确定最大的递归层数。一个阈值用来确定后续光线由于对像素点贡献太小而不会被追踪。图3-16每个亚像素发射一条光线②自适应抗锯齿。阴影光线颜色的平均值决定该交点最终的颜色值。图3-18随机取样图3-19区域光图3-20蒙特·卡罗光线追踪全局光照。

1)问题

(1)性能。算法的递归性质和大数目的追踪光线,渲染过程可能持续数小时。80%~90%的渲染时间花费在计算光线和物体交点上。

(2)走样。

(3)尖锐的阴影。基本的光线追踪算法只能得到尖锐的阴影(因为模拟的是点光源)。

(4)局部光照和着色。算法只追踪少数目的光线,只有四种类型的光线被考虑在内,物体之间的漫反射光没有被考虑在内,即算法并不包括全局光照。

2)解决方案

(1)性能。

①使用更多或者更好的硬件。

②大规模并行计算。每一个光线都相互独立。将图像分割,分配在多核上或者分布式网络上;或者分配在多个线程上。

③限制交点检测的数目。使用包围盒的层次关系。快速判断光线是否和一组物体相交。物体被分组在封闭的包围盒中。利用空间细分技术:octree、BSP、grid。

优化交点检测。

⑤限制追踪光线的数目。确定最大的递归层数。根据光线对当前像素点贡献值大小来限制递归深度。一个阈值用来确定后续光线由于对像素点贡献太小而不会被追踪。

(2)走样:使用超采样(super sampling)、抗锯齿(antialiasing)、(jittering)

①追踪额外的主光线并取平均值。即超采样,相对于每一个像素点取一条光线,你可以取特定数目的光线。每一个像素被分为亚像素,对每一个亚像素发射一条光线。当所有的亚像素点都处理完毕,对亚像素点的颜色值取平均值,并将其赋值给该像素点(见图3-16)。这种方法大大增加了渲染时间。

图3-16 每个亚像素发射一条光线

自适应抗锯齿。在颜色剧烈变化的地方使用追踪的主光线,颜色变化不大的地方使用最少的主光线(见图3-17)。(www.chuimin.cn)

图3-17 自适应抗锯齿

③随机抗锯齿。随机取样代替常规取样(见图3-18)。

(3)尖锐的阴影。

原因:使用点光源,每个交点仅仅对应一条阴影光线。

①区域光(area light)。使用一系列点光源来模拟区域光源。对于每一个交点,需要和点光源数目一样多的追踪光线(见图3-19)。

②Monte Carlo光线追踪法。使用随机超采样,光源建模成球形光源,阴影光线指向代表光源的球上面的点(见图3-20)。阴影光线颜色的平均值决定该交点最终的颜色值。

图3-18 随机取样

图3-19 区域光

图3-20 蒙特·卡罗光线追踪

(4)全局光照。

依旧可以使用蒙特·卡罗(Monte Carlo)法,使用辐射度(radiosity)算法。