反射的奥秘(3D反射理论概述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
01.概述
CGI技术是一门非常年轻而且发展迅速的科学。其它相关的还有许多技术也在很短的时间内迅速的壮大,用于模拟自然现象,但它们只限于解决某一方面的问题,对我们来说选择合适的技术来解决相应的问题比较困难。出于人们认识光与物质相互作用的方式,一些主要的技术脱颖而出,这其中最常用的是工作于物体表面的技术,另外就是CGI技术的到来。它的原理是向场景里发射光线来收集必要的信息,重建真实自然现象的一个关键问题是需要大量的信息。假设在我们所处的环境里,包括看不见的地方,有大量带有能量的光线穿过,它们在场景中哪怕是最狭小的地方以某种方式相互作用,这些光线的能量以不连续的形式存在(爱因斯坦光子说)。物体表面的原子会吸收光子使自已的能级升高,受到激发的不稳定原子会自发的地回到最低能级,并将减少的那部分能量以光子的形式释放出来,这些光子根据发射它原子的种类有特定的波长。打个比方吧,太阳光包含很多不同波长的电磁波,但这里面只有一小部分能被我们的眼睛所识别。人造光源一般都有特定的颜色,因为它们含有各自特定的元素。一个典型的钨极光源发出的光有一定的频率范围,这就是我们看到的橙色。同样,氖光源发出的光是绿色。
自然界的这种吸收和发出光能的现象无时无刻不在我们的身边出现。我们的眼睛扮演着摄像机的角色,收集和识别从四面八方射过来的光线的波长(颜色)和光子数量(强度)。我们看到的图像正是在空间的某一点处众多光线的静止状态。前面的内容仅仅从物理学的角度粗略的介绍了一下,但这样就足够了,我们没有必要考虑更深一层的物理知识。这些内容足已解释我们看到的真实世界,今后的学习制作过程也足够用了。
02.用CGI技术重现生活中的例子
前面说过每个原子都会吸收和发射光线,物体的颜色决定于反射光线的波长和物质原子的种类。入射光线反射后向四面八方散射,但要根据入射光线方向反射(否则反射也不会进行),也许多物体不会直接在表面反射光线,像气体。光线会在大多数物质里传播,并被物质内部的原子吸收和反射掉。像下图中的蜡球,这种蜡物质吸收除了绿色和黄色之外的所有波长的光线(至少除黄绿色外的绝大多数光线),然后像大多数物体一样作为绿光的发射物体(除了黑洞之外)。你们可以看到当蜡球靠近光源后它显现出黄绿色。
你们当中很多人可能都知道,在过去的几年中出现的很多光线跟踪渲染器都能模拟在“电脑产生的表面内部散射光线”,也叫做SSS(Sub Surface scattering)。很多渲染器都使用相似的原理,像GI中的采样方式,在某一点发射多条光线到场景中,这些光线经反射后携带了物体表面的颜色信息,以此来确采样点的颜色,典型的例子-Monte Carlo。不同的渲染器在保证图像质量不变的前提下有不同的缩短渲染时间的方式,因为有大量的光线信息需要收集。这之中有简单的采样点插值算法过滤器;也有智能化的能识
别物体边缘尖锐部分的高级插值算法过滤器,它能在需要的地方放置合适的采样点;还有适用于动画的采样引擎。听起来这些算法都很高深,其实我们只要知道我们的工作是要找到合适的方法对付巨长的渲染时间就行了。我在95到96年第一次接触3D软件的时候试着用一个光源照亮一个镜面属性的球体,但失败了。当我用手电照射整个卧室的时候,卧室会有一点亮光,但在3D中除了聚光灯的圆锥范围内其它的地方一片黑暗。我想,为什么会这样呢?后来我知道了,因为所有的物体都是反光体,我们平时看到光大多数光线都是反射光线。
朋友们你们是否知道,Blinn和Phong这些表面Saders是怎样工作的吗?固有色,高光到底是什么呢?在很长的一段时间里,我只知道怎样使用它们,怎样用它们达到预期的效果,但我从不知道它们真正代表着什么。
上面提到过,所有的物体都会吸收和发出光线。一个全反射材质,也就是反射全部光线的材质,像表面镀了金属的玻璃,它表面的每一个点都包含了环境的信息。当光线在物体表面反射后一部分光线被吸收,反射光线变弱且被“染色”。因此过渡色就是物体表面除吸收的那一部分的带有表面颜色的反射光线。在现实中绝大多数表面都会有一定程度的粗糙度,我不是说肉眼可以看到的凹凸不平,而是微观上的表面粗糙。不同的Saders能够快速有效地模拟表面的粗糙方式。高光就是反射最多,光线聚集最强烈的那一部分表面产生的。地过渡色区域也会有小面积的高光,但随着表面和光源的距离拉大高光也渐渐地变的不明显了。这样的高光在现实世界并不存在,这是因为现实世界不存在3D软件中的理想光源(点光源和面光源)。现实世界中的光源总会有一定的形状,这样高光区会表现有一定的细节而且可以看到光源的形态。参考下图中的皮革,射到高光区的光线来自窗外的阳光,可以看到真实表面的细节是很复杂的。可以说高光区只是过渡色区域中反射较强的表面。像这样的反光表面只用一个简单的Sader是不可能实现的,我们必需用真正的光源来模拟窗外的光线。或许还要用反射模糊来模拟过渡色区域的光线散射,用一点过滤色模拟表面吸收不同的光线产生的颜色。这可能就是这几年来HDRI如此流行的缘故吧。HDRI不仅可以产生高质量的间接照明,还可以用渲染出真实的反射和高光区的精彩细节。
这是一幅勺子的照片,主光来自上方。勺子的中心有非常强烈的高光,有趣的是周围还有一圈圈的刮痕。每一圈刮痕可以看成在它边缘处反光的圆柱形凸痕。光线在它们之间反射,这样反射光线在某个方向上散射开来,也就是CGI里所谓反射的各向异性。
在这张图片中我们看到主光在高光区的中心形成一个十字。像打磨过的金属和毛发这类物质常发生这种现象,而且针对这种高光已经有不同的Shaders算法了。我要指出的是这些算法都必需能快速的产生各向异性的高光。如果想渲染出正确的高光就必需用真实的物体,或者至少用凹凸贴图模拟刮痕(这个Shaders
用在CGI毛发上一点意义都没有,因为这种现象是由许多许多细小的圆柱体产生的)。我只发现在使用不透明贴图的时候这种Shaders才管用。
光线还可以表现出另一种特性。当光线与表面的夹角很小的时候光线趋向于在表面反射,但当光线跟表面接近垂直时趋向于穿透表面介质。这也是一种很重要的特性,叫做Fresnel(菲涅耳效应)光学纤维这种物质常发生这种现象。许多渲染器都支持这个特效。下面的图我们能很清楚地看到这个效应,在角度很小的情下况液晶屏反射很强烈,但垂直看时大多光线都穿过了塑料壳而被黑色的LCD吸收了。几乎所有的材质都或多或少的表现出这种特性,特别是透明物体(几乎所有的物体都是“透明”的,只不过这取决于物体原子吸收光线的多少罢了)。