首页 理论教育虚拟现实理论基础:光的传递模型

虚拟现实理论基础:光的传递模型

【摘要】:物体的表面一般不会是理想的某种单一属性的表面,表面可以同时存在反射、折射、漫反射等多种属性,各种属性按一定比例混合之后才是其表面反射模型。3)预设定的顶点漫反射颜色显然,这一过程仅跟踪景物间的镜面反射光线和规则透射光线,忽略了至少经过一次漫反射之后光能传递,而且该算法中的物体表面属性只能是单一的,因而它仅模拟了理想表面的光能传递。

光的基本传递模型基础知识:

(1)在一个要渲染的场景中,我们认为光能由预先指定的光源发出,然后以光线来描述光能的传递过程,当整个场景中的光能信息被计算出来后,收集这些信息转化为顶点的亮度。

(2)光线经过物体表面可以产生反射和漫反射,光线透过物体可以产生折射和散射。具体产生哪种出射效果,依据物体的表面属性而定。物体的表面一般不会是理想的某种单一属性的表面,表面可以同时存在反射、折射、漫反射等多种属性,各种属性按一定比例混合之后才是其表面反射模型。

(3)一点的在某一个视线方向上的光亮度=该点在该方向的自身发光亮度+半球入射光能在该方向所产生的反射光亮度。

(4)关于散射,高度真实的散射是一个很难模拟的物理过程,一般在渲染中都不会采用过于复杂的物理模型来表示散射,而是采用一些取巧的办法来计算散射。

(5)在常见的渲染中,有两种效果很难模拟,但是它们会使人眼觉得场景更真实。

①(color bleeding):入射光为漫反射,受光表面属性为漫反射,出射光是漫反射。比如把一本蓝色的纸制的书靠近白色的墙,墙上会有浅浅的蓝晕。

②(caustics):入射光为镜面反射或折射,受光表面属性为漫反射,出射光是漫反射。比如把一个装了红色葡萄酒的酒杯放在木桌上面,会有光透过杯中的酒在桌上形成一块很亮的红色区域。

传统的阴影算法和光线追踪算法:

1)传统的阴影算法

游戏中传统的光照算法,是利用公式法来计算特定类型光源的直接光照在物体表面所产生的反射和漫反射颜色,然后再使用阴影算法做阴影补偿[23]。标准的阴影算法不能计算面光源,改进以后的阴影算法通过对面光源采样,可以模拟出软阴影的效果。但是这些方法计算的光照都是来自直接光源的,忽略了光的传播过程,也就无法计算出由光的传播所产生的效果。通过特定的修正,我们也可以计算特定的反射折射或漫反射过程,但是无法给出一种通用并且物理正确的方法。目前游戏中大多是采用改进的阴影算法来进行渲染,它的优点是效率比较高,结合预计算的话,还是可以产生比较生动可信的效果。

2)传统的逆向光线追踪

正如前面描述的那样,要想计算光能在场景中产生的颜色,最自然的考虑就是,从光源出发,正向跟踪每一根光线在场景中的传递过程,然后收集信息。然而这个想法在被提出来的那个时代的计算机硬件上是不可能实现的,当时人们认为,正向光线追踪计算了大量对当前屏幕颜色不产生贡献的信息,而且它把看不见的物体也计算在内,极大的浪费了效率。

于是人们想出的另一个方法是:只计算有用的,从人眼出发,逆向跟踪光线。

逆向光线追踪从视点出发,向投影屏幕发出光线,然后追踪这个光线的传递过程。如果这个光线经过若干次反射折射后打到了光源上,则认为该光线是有用的,递归的计算颜色,否则就抛弃它。很显然,这个过程是真实光线投射的逆过程,它同样会产生浪费(那些被抛弃的逆向光线),而且只适用于静态渲染。

逆向光线追踪算法中的顶点亮度主要包括三个方面:

(1)由光源直接照射而引起的光亮度。

(2)来自环境中其他景物的反射折射光在表面产生的镜面反射光亮度。

(3)来自环境中其他景物的反射折射光在表面产生的规则透射光亮度。(www.chuimin.cn)

3)预设定的顶点漫反射颜色

显然,这一过程仅跟踪景物间的镜面反射光线和规则透射光线,忽略了至少经过一次漫反射之后光能传递,而且该算法中的物体表面属性只能是单一的,因而它仅模拟了理想表面的光能传递。

对于该算法的具体描述如下:

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

(2)求光线与场景最近的交点。

(3)递归跟踪:

①如果当前交点所在的景物表面为理想镜面,光线沿其镜面反射方向继续跟踪。

②如果当前交点所在的景物表面为规则投射表面,光线沿其规则投射方向继续跟踪。

(4)递归异常结束:

①光线与场景中的景物没有交点。

②当前交点所在的景物表面为漫反射表面。

③跟踪层次已经超过用户设定的最大跟踪层数。

④所跟踪的光线对显示像素的光亮度的贡献小于预先设定的阈值

(5)递归正常结束:

光线于光源相交,取得光亮度值,按递归层次反馈。

传统的光线追踪技术可以较好地表现出反射折射效果,也可以生成真实度比较高的阴影。但是它的光照都比较硬,无法模拟出非常细腻的柔化效果。

光线追踪需要对大量的光线进行多次与场景中物体的求交计算。如何避免这些求交计算成为光线追踪追求效率的本质。早期的光线追踪算法都是通过各种空间划分技术来避免无谓的求交检测,这些方法对于之后的理论同样有效,常见的空间划分方法分为两类,一类是基于网格的平均空间划分,一类是基于轴平行的二分空间划分。