首页 理论教育蒙特卡罗光线追踪|虚拟现实开发实践

蒙特卡罗光线追踪|虚拟现实开发实践

【摘要】:1)对传统的逆向光线追踪的改进传统的逆向光线追踪算法有两个突出的缺点,即表面属性的单一和不考虑漫反射[24]。这里的百分比可以这样理解,当一根光线打在该表面后,它有20%的概率发生反射,30%的概率发生折射,50%的概率发生漫反射。然后通过多次计算光线跟踪,每次按照概率决定光线的反射属性,这样它就把漫反射也考虑了进去。相对于普通光线追踪,蒙特卡罗光线追踪引入了更复杂的漫反射模型,从而增加了需要跟踪的光线数量。

1)对传统的逆向光线追踪的改进

传统的逆向光线追踪算法有两个突出的缺点,即表面属性的单一和不考虑漫反射[24]。我们不难通过模型的修正来缓解这两个问题。我们首先认为一个表面的属性可以是混合的,比如它有20%的成分是反射,30%的成分是折射,50%的成分是漫反射。这里的百分比可以这样理解,当一根光线打在该表面后,它有20%的概率发生反射,30%的概率发生折射,50%的概率发生漫反射。然后通过多次计算光线跟踪,每次按照概率决定光线的反射属性,这样它就把漫反射也考虑了进去。具体的算法如下[25]

(1)从视点出发,经过投影屏幕上的每一个像素向场景发射一根虚拟的光线。

(2)当光线与景物相交时按照俄罗斯轮盘赌规则决定它的反射属性。

(3)根据不同的反射属性继续跟踪计算,直到正常结束或者异常结束。如果反射的属性为漫反射,则随机选择一个反射方向进行跟踪。

(4)重复前面的过程,把每次渲染出来的贴图逐像素叠加混合,直到渲染出的结果达到满意程度。

该方法是一种比较简易的基于物理模型的渲染,其本质就是通过大量的随机采样来模拟半球积分。这种方法在光照细节上可以产生真实度很高的图像,但是图像质量有比较严重的走样,而且效率极其低下。

2)蒙特卡罗光线追踪-采样(www.chuimin.cn)

蒙特卡罗光线追踪的本质就是通过概率理论,把半球积分方程进行近似简化,使之可以通过少量相对重要的采样来模拟积分。蒙特卡罗光线追踪理论中的采样方案有很多,有时候还要混合使用这些采样方案。

蒙特卡罗光线追踪已经是一个比较完备的渲染方案,他有效地解决了光线追踪的模型缺陷和效率问题,使得在家用图形硬件上做基于物理的渲染成为一种可能。但是我们仍然无法实时的进行计算,而且如何解决图像走样的问题也是蒙特卡罗光线追踪的一大难点。

相对于普通光线追踪,蒙特卡罗光线追踪引入了更复杂的漫反射模型,从而增加了需要跟踪的光线数量。但是它又通过采样算法减少了需要跟踪光线,所以其核心效率取决于采样模型。

与普通光线追踪一样,为了减少不必要的求交检测,蒙特卡罗光线追踪也需要使用空间划分技术,最常用的是平衡k-d tree。蒙特卡罗光线追踪虽然是一种逆向光线追踪算法,但是其采样的理论却与光线追踪的方向无关,可以用于任何一种渲染方案。

此外,使用蒙特卡罗光线追踪不容易计算焦散(caustics)现象。也就是说它不容易计算由镜面反射或者规则透射引起的漫反射(但是很容易计算由漫反射引起的镜面反射或者规则透射)。

蒙特卡罗光线追踪本身也是一种逆向光线跟踪。逆向光线追踪最初被设计出来是为了只计算那些会影响最终屏幕像素的光能传递过程,这一思想在早期硬件并不发达,对最终影响要求也不高的年代是非常实用的。但是我认为由于对屏幕上每个像素的跟踪都是无关的,即每两次跟踪之间都不会建立通信说哪些是计算过的,哪些是没计算过的,所以这里面必然会包含大量重复计算的中间过程。当我们对图像所表现效果的真实度非常高的时候,必然会产生巨量的采样,然后重复计算的问题就会放大,而由逆向追踪思想带来的那些优势也将荡然无存。而且,对场景中光能贡献越大的光源应该被越多的采样跟踪覆盖到,但是逆向光线跟踪只是对屏幕上每个像素反复遍历追踪,其结果应该趋向于采样平均覆盖各个光源,如果要想对高亮度光源采很多的样本,必然也会导致对其他光源也过多地采取了样本,这会非常浪费效率。重新考虑正向光线追踪,光由光源发出,打在场景之中,每一次光能转化都被记录下来,最后只要收集这些信息就可以知道任意点上面的亮度,这个方法的描述非常贴近真实的自然,关键在于如何保证速度。

另外,完全的逆向光线追踪根本就不应该作为实时渲染的算法,道理很简单,光能的传递过程不变,只要视点一变,就要重新计算。