找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

第02讲 光线追踪(Ray tracing)渲染器工作原理

2011-10-9 14:20| 查看: 22399 |原作者: ma5l老师

2.1 V-Ray 是一款光线追踪渲染器(Ray tracing)

当前的主流渲染器,如finalRender、Brazil、Maxwell、MentalRay等,都是以光线追踪技术为主的,而V-Ray渲染器图像中的效果主要是通过光线追踪方法计算出来的,所以V-Ray是一款光线追踪渲染器。

2.2 光线追踪渲染器的工作原理

[attach]577[/attach]

我们可以这样理解光线追踪渲染器的工作过程:

1. 渲染图像的组成

假设在相机前面放置一个网格平面,称为视平面(View plane),网格平面中的每一个小格,就是渲染图像中的一个像素,小网格的多少有渲染输出图像的分辨率决定,如渲染输出图像的分辨率为800X600,则此网格平面就由800X600的小网格组成,如果从相机的位置去看小网格,每一个小网格都覆盖了场景中的一小块区域。可见,如果能计算出每个小网格所覆盖区域的平均颜色,并将此颜色做为小网格的颜色,对小网格进行填充,将网格平面中的所有小格都填充完,也就得到了我们所需要的渲染结果。

2. 如何出计算这些小网格的平均颜色呢?

以相机的中点为起点,向小网格的中点发出一条辅助射线(Ray),此射线与场景中的物体相交(如没有相交,则视为与背景相交),如果计算出此交点的颜色,也就得到了小网格的颜色。

从相机发出的辅助射线与我们的视线方向相同,与场景中物体反射到我们眼晴中的光线的方向相反,故应称为视线,为了方便说明,将此辅助射线,称为采样视线,辅助射线与场景的交点,称为采样点。

采样点的颜色由采样点所在物体的材质、场景中的光源,场景中的其它物体及背景等多方面因素相互作用决定的。

除了需要计算采样点在光源的直接照射下,所产生的颜色外:

如果采样点的材质具有反射属性,则需计算出采样点的反射颜色。

如果采样点的材质具有折射属性,则需计算出采样点的折射颜色。

如果采样点与光源之间有其它物体,则需要计算出采样点的阴影颜色。

如果采样点的周边有其它物体,还需要计算其它物体对此采样点所产生的间接照明效果。

如果开启了焦散效果,还需要计算出采样点的焦散颜色。

如果开启了相机的景深及运动模糊效果,还需要计算出采样点的相关模糊颜色。

将上述采样点的所有颜色综合在一起,就会得到采样点的最终颜色,可见采样点的的最终颜色包含了许多种不同属性的颜色成分。

3. 如何计算采样点不同属性的颜色成分?

3.1 采样点直接照明颜色的求法

从采样点向光线发出采样视线,求出光源与采样点的位置关系,根据光源的亮度、颜色等参数再结果采样的材质属性,就可以求出采样点在光源直接照明下所产生的颜色。

3.2 采样点反射颜色的求法

如果采样点的材质具有反射属性,根据光线的反射原理,此采样点继续发出采样视线,去与场景中的物体相交,我们将新的交点称为二次采样点,求出二次采样点的颜色,就是此采样点反射的颜色。

如果二次采样点还具有反射属性,则此采样点继续重复上面的采样计算,直到所规定的反射次数,或反射颜色减弱到一定阀值后终止。

3.3 采样点折射颜色的求法

如果采样点的材质具有透明属性,根据光线的折射原理,此采样点继续发出采样视线,去与场景中的物体相交,我们将新的交点称为二次采样点,求出二次采样点的颜色,就是此采样点反射的颜色。

如果二次采样点还具有透明属性,则此采样点继续重复上面的采样计算,直到所规定的折射次数,或折射颜色减弱到一定阀值后终止。

3.4 采样点阴影颜色的求法

从采样点向光线求出阴影采样视线,如果光源与采样点间有物体遮挡,则根据光源的阴影参数及遮挡物体物属性,就可以计算出采样点的阴影颜色。

3.5 采样点间接照明颜色的求法

采样点间接颜色的求法有两类算法:

3.5.1 视线追踪法

从采样点处,向四周发出采样视线,计算出周边物体对采样点颜色的影响。

3.5.2 光线追踪法

追踪光源所发出的光线,直接计算每个光源对场景间接照明的总结果,然后再求出采样点间接照明的颜色。

3.6 采样点相机景深及运动模糊效果颜色的求法

从相机发出采样视线,求出景深及模糊对采样点的影响,从而求出采样点的模糊颜色。

将采样点的上述颜色求出后,进行综合处理,就会得到采样点的最终颜色。

从上述采样点颜色成分的计算方法中,我们可以看到,所有的计算不外乎使用了二种方法,一是追踪从相机发出的辅助视线,二是追踪从光源发出的光线,而且为了计算,有的需要对采样点进行多次追踪,这就是光线追踪概念的由来。

但是,关于光线追踪的概念是极其混乱及模糊的,下面我就对之进行明确说明。

2.3 关于光线追踪(Ray tracing),光线投射Ray casting)的有关概念说明

由于最先开发出来的追踪算法,由从相机发出的辅助射线为基础的,并将之命名为 Ray tracing,被翻译成中文时称为光线追踪

后来又开发出来了,追踪光源所发出的光线的计算方法,由于这时Ray tracing的名称已经被使用,为了与之进行区别,取名为 Backwards Ray tracing,翻译成中文为反光线追踪,明明与光线的光向一致,却将之称为反光线追踪,结果更乱了。

为了区别,后来又对名称进行了修正,将以相机为出发点的追踪称为 eye-based Ray tracing,基于眼睛的光线追踪;将以光源为出发点的追踪称为 light-based Ray tracing,基于光源的光线追踪

如果使用直译的方式进行翻译,其名称又烦琐,又不直观,按我的想法:

将 eye-based Ray tracing 翻译成“视线追踪”

将 light-based Ray tracing翻译成“光线追踪”


即简单、直观,又使人容易理解。

不过在你明白了其算法的原理后,至于称为什么名字,也不是很重要了,一般情况下,将可这二种方法,都笼统的称为光线追踪。

现在再说一说光线投射 Ray casting

如果在进行计算时,仅从相机发出了一次采样视线,直接对采样点进行计算,而对采样点不再继续投射新的采样视线的方法,称为光线投射Ray casting,其实将之翻译为“视线投射”更为合理。

例如,对场景中漫反射的计算,使用的就是视线投射法。

关于这三种追踪方法,在V-Ray渲染器中都得到了应用。

详细的讲解及示例说明,请看视频教程!

QQ|Archiver|手机版|小黑屋|顶渲网

GMT+8, 2024-4-25 06:17 , Processed in 0.042720 second(s), 7 queries , Gzip On, Redis On.

Powered by Toprender X3.5

Copyright ? 2001-2023 顶渲网

返回顶部