[Raytracing]扩展光线追踪

1、随机采样

在基本光线追踪算法中,只追踪有限数目的光线。这是一个采样过程(sampling process)。

采样有很多种方法:

a、均匀采样

举例:根据给定的区间绘制数学函数。

将区间划分为许多小的宽度一致的小区间,在小区间的中点处计算函数的值,最终将这些点平滑连接出来。

QQ截图20120528084540

在小区间数目很少的情况下,均匀采样可能会得到错误的结果。

b、随机采样

使用随机间隔宽度代替统一间隔宽度。

QQ截图20120528084945

可以使用随机采样绘制平滑的阴影;绘制模糊的反射和折射;考虑景深;考虑运动模糊。

 

2、路径追踪

路径追踪算法考虑了全局光照问题。之前的光线追踪只考虑了四种类型的光线,没有哪一条光线考虑了物体之间的作用。

通过追踪交点周围所有路径的光线来计算间接光照,为了避免无限渲染次数,所有的可能光线路径使用随机采样。这种方法的光线分布通常是半球形,中心点是交点。

渲染有天空光的户外场景中,路径追踪算法非常有效率。因为这种场景下光变化的频率不大,也就是说,采样的函数值变化不大,小规模的采样依然可以得到很好的效果。

QQ截图20120528090503

双向(Bidirectional)路径追踪额外追踪了发自光源的光线,减少了路径追踪的采样次数。

 

3、光子映射(photon mapping)

两通道算法,考虑了全局光照和物体之间的反射,实现了caustics effect。

Pass 1-创建photon map

光线(光子)从光源开始追踪,光子携带从光源散发的一部分能量。

当光子在场景中传播时,可能被反射、穿透、吸收。

当光子击中漫反射表面时,使用map存储射进的能量。

photon map以k-d tree数据结构实现。

Pass 2-渲染阶段

使用光线追踪算法。在交点处,使用存储在map中的信息去估计光照度。

posted @ 2012-05-28 09:26  Cavia  阅读(1465)  评论(0编辑  收藏  举报