灯光反射理论

01.概述
    CGI技术是一门非常年轻而且发展迅速的科学。其它相关的还有许多技术也在很短的时间内迅速的壮大,用于模拟自然现象,但它们只限于解决某一方面的问题,对我们来说选择合适的技术来解决相应的问题比较困难。出于人们认识光与物质相互作用的方式,一些主要的技术脱颖而出,这其中最常用的是工作于物体表面的技术,另外就是CGI技术的到来。它的原理是向场景里发射光线来收集必要的信息,重建真实自然现象的一个关键问题是需要大量的信息。假设在我们所处的环境里,包括看不见的地方,有大量带有能量的光线穿过,它们在场景中哪怕是最狭小的地方以某种方式相互作用,这些光线的能量以不连续的形式存在(爱因斯坦光子说)。物体表面的原子会吸收光子使自已的能级升高,受到激发的不稳定原子会自发的地回到最低能级,并将减少的那部分能量以光子的形式释放出来,这些光子根据发射它原子的种类有特定的波长。打个比方吧,太阳光包含很多不同波长的电磁波,但这里面只有一小部分能被我们的眼睛所识别。人造光源一般都有特定的颜,因为它们含有各自特定的元素。一个典型的钨极光源发出的光有一定的频率范围,这就是我们看到的橙。同样,氖光源发出的光是绿。
    自然界的这种吸收和发出光能的现象无时无刻不在我们的身边出现。我们的眼睛扮演着摄
像机的角,收集和识别从四面八方射过来的光线的波长(颜)和光子数量(强度)。我们看到的图像正是在空间的某一点处众多光线的静止状态。前面的内容仅仅从物理学的角度粗略的介绍了一下,但这样就足够了,我们没有必要考虑更深一层的物理知识。这些内容足已解释我们看到的真实世界,今后的学习制作过程也足够用了
02.CGI技术重现生活中的例子
    前面说过每个原子都会吸收和发射光线,物体的颜决定于反射光线的波长和物质原子的种类。入射光线反射后向四面八方散射,但要根据入射光线方向反射(否则反射也不会进行),也许多物体不会直接在表面反射光线,像气体。光线会在大多数物质里传播,并被物质内部的原子吸收和反射掉。像下图中的蜡球,这种蜡物质吸收除了绿和黄之外的所有波长的光线(至少除黄绿外的绝大多数光线),然后像大多数物体一样作为绿光的发射物体(除了黑洞之外)。你们可以看到当蜡球靠近光源后它显现出黄绿。
相东佛像艺术馆
你们当中很多人可能都知道,在过去的几年中出现的很多光线跟踪渲染器都能模拟在电脑产生的表面内部散射光线,也叫做SSSSub Surface scattering)。很多渲染器都使用相似的原理,像GI中的采样方式,在某一点发射多条光线到场景中,这些光线经反射后携带了物体表面的颜信息,以此来确采样点的颜,典型的例子-Monte Carlo。不同的渲染器在保证图像质量不变的前提下有不同的缩短渲染时间的方式,因为有大量的光线信息需要收集。这之中有简单的采样点插值算法过滤器;也有智能化的能识别物体边缘尖锐部分的高级插值算法过滤器,它能在需要的地方放置合适的采样点;还有适用于动画的采样引擎。听起来这些算法都很高深,其实我们只要知道我们的工作是要到合适的方法对付巨长的渲染时间就行了。我在9596年第一次接触3D软件的时候试着用一个光源照亮一个镜面属性的球体,但失败了。当我用手电照射整个卧室的时候,卧室会有一点亮光,但在3D美国越战片中除了聚光灯的圆锥范围内其它的地方一片黑暗。我想,为什么会这样呢?后来我知道了,因为所有的物体都是反光体,我们平时看到光大多数光线都是反射光线。
    朋友们你们是否知道,BlinnPhong这些表面Saders是怎样工作的吗?固有,高光到底是什么呢?在很长的一段时间里,我只知道怎样使用它们,怎样用它们达到预期的效果,但我从不知道它们真正代表着什么。
    上面提到过,所有的物体都会吸收和发出光线。一个全反射材质,也就是反射全部光线的材质,像表面镀了金属的玻璃,它表面的每一个点都包含了环境的信息。当光线在物体表面反射后一部分光线被吸收,反射光线变弱且被。因此过渡就是物体表面除吸收的那一部分的带有表面颜的反射光线。在现实中绝大多数表面都会有一定程度的粗糙度,我不是说肉眼可以看到的凹凸不平,而是微观上的表面粗糙。不同的Saders能够快速有效地模拟表面的粗糙方式。高光就是反射最多,光线聚集最强烈的那一部分表面产生的。地过渡区域也会有小面积的高光,但随着表面和光源的距离拉大高光也渐渐地变的不明显了。这样的高光在现实世界并不存在,这是因为现实世界不存在3D软件中的理想光源(点光源和面光源)。现实世界中的光源总会有一定的形状,这样高光区会表现有一定的细节而且可以看到光源的形态。参考下图中的皮革,射到高光区的光线来自窗外的阳光,可以看到真实表面的细节是很复杂的。可以说高光区只是过渡区域中反射较强的表面。像这样的反光表面只用一个简单的Sader是不可能实现的,我们必需用真正的光源来模拟窗外的光线。或许还要用反射模糊来模拟过渡区域的光线散射,用一点过滤模拟表面吸收不同的光线产生的颜。这可能就是这几年来HDRI如此流行的缘故吧。HDRI不仅可以产生高质量的间接照明,还可以用渲染出真实的反射和高光区的精彩细节。
这是一幅勺子的照片,主光来自上方。勺子的中心有非常强烈的高光,有趣的是周围还有一圈圈的刮痕。每一圈刮痕可以看成在它边缘处反光的圆柱形凸痕。光线在它们之间反射,这样反射光线在某个方向上散射开来,也就是CGI里所谓反射的各向异性。
在这张图片中我们看到主光在高光区的中心形成一个十字。像打磨过的金属和毛发这类物质常发生这种现象,而且针对这种高光已经有不同的Shaders算法了。我要指出的是这些算法都必需能快速的产生各向异性的高光。如果想渲染出正确的高光就必需用真实的物体,或者至少用凹凸贴图模拟刮痕(这个Shaders用在CGI毛发上一点意义都没有,因为这种现象是由许多许多细小的圆柱体产生的)。我只发现在使用不透明贴图的时候这种Shaders才管用。
光线还可以表现出另一种特性。当光线与表面的夹角很小的时候光线趋向于在表面反射,但当光线跟表面接近垂直时趋向于穿透表面介质。这也是一种很重要的特性,叫做Fresnel(菲涅耳效应)光学纤维这种物质常发生这种现象。许多渲染器都支持这个特效。下面的图我们能很清楚地看到这个效应,在角度很小的情下况液晶屏反射很强烈,但垂直看时大多光线都穿过了塑料壳而被黑的LCD吸收了。几乎所有的材质都或多或少的表现出这种特性,特别是透明物体(几乎所有的物体都是透明的,只不过这取决于物体原子吸收光线的多少罢了)。
好,我想到现在为止我已向你们介绍了光线的反射原理。我希望你们能在这里学到一些有用的东西。下面的是一些焦散(Caustics)和散射(Dispersion)的图片。还有一张图片,上面是一个物体和阴影,我想告诉你们的是这个透明物体的阴影和我的手一样也是不透明的,
这是初学者对透明物体使用光线跟踪阴影时常犯的一个毛病。
    如果你们有问题的话尽管问吧。请睁大眼睛随时留心你的身边,发觉周围不经意的小事,有时它也是美丽的。作为一个艺术家这样有助于提高你技术方面的理解。
01.反射的奥秘俄罗斯素描技法-第二部分
    在第二部分中Philipp Zaufel用通俗的语言描述了BRDF(双向反射分布函数)--一个CG中最常用的用来描述材质反射行为的数学模型。
02.总论
    BRDF-双向反射分布函数,是用来描述材质反射行为的函数,是一个数学模型。这篇小教程是为艺术工作者写的,而不程序员。有关BRDF的技术资料有很多,但我的目的是想让你们了解如何让它正确的工作,而不是大篇幅的罗列。BRDFCG中无处不在。当你使用Phong,Blinn或者其它Shader的时候你就在使用BRDF模型。要是你用光线跟踪制作反射,阴影或者产生GI效果的时候,你也在无形中使用着BRDF模型。
    一个BRDF模型描述了一种表面上入射和反射光线的关系。因此说简单点就是光线射到表面上,表面对光线产生作用。光线可以被反射(镜面的或漫射的),吸收,或两者都有。我们可以通过测量一种真实物体表面上的反射和入射光线来描述这种材质和它形成的BRDF,测量的结果可以用在CG程序中来产生有相同表面属性的材质。但大多数情况下会使用简化的,带可调节参数的模型来产生CG表面。这些反射模型可以是精确的,也可以是经验化的。这里我们关心的是精确的分析反射模型。因为它里面的参数或者说方程是基于真实世界的,并且为了能使材质叠加产生复杂的SHADERS,它们也使用在CGI中。像Robertson-SandfordBeard-maxwell这些经验模型,它们用的是虚构的参数来构建简化的BRDF。下面我会提到一些高级的反射模型。像BTDFBSDFBDFBSSDF,这是为了澄清一个事实:一个BRDF只是依据表面属性,入射光角度(同它的参数)和视角来描
述光线的反射。
    BTDF-双向传输分布函数,描述了透明的表面属性,过程是通过矢量计算表面的两个方向(不是同一个计算过程)。BRDFBTDF合起来就是BSDF,简称BDF--双向散射分布函数,描述表面上同一点处两个方向的半球的函数。这些就是高级(镜面)光线跟踪渲染的基础函数。BSSDF--双向表面散射反射分布函数,它的发明者就是发明光子贴图的那个人,Henrik Jensen。它描述了物体内部的光线散射。好莱坞,概论就这么多,下面我们一一介绍吧。
03.完美的漫射材质错误反馈——Lambert
    这是个非常简单的模型,而且距今已有200年的历史了。在CG场景中它无处不在。这个模型描述了一个完美的漫射表面。入射光在表面上向四周等量的散开,如果从不同的角度观察表面的话会看到同样的颜(各向同性)。唯一不同的是入射的角度。入射击角为90度时表面亮,反之则暗。这种模型在生活中是很常见的,但生活中这种的完美的漫射表面非常少,这就是CG黄安炀表面看不去是电脑产生的表面的原因。就因为它的速度相当快,而且非常普及,因此它成为实时渲染表面SHADER中最常见常用的一个。
    Gourad Sading是实时渲染技术中的一员,因为它不是基于每像素计算的,而是基于顶
点的计算方法,计算顶点值后在各顶点间运用插值算法来形成多边形。(新一代的显卡都支持实时像素阴影渲染,并且这些成熟的模型都成为了今天的标准,但这不是今天我们讨论的话韪。)
    这个模型大多数情况下在物理上是正确的,这意味着一些重要的物理规则被保留了。其中有一个就是反射光线的能量总和一定小于入射光线的能量。另一条是对不同颜的吸收原则,比如说过渡为黑的物体吸收掉所有的入射光线,并不产生反射(过渡——一个Lambert模型引申出的重要参数)。
04.Lambert的例子
    上图中的个球体都被赋予了Lambert材质。第12个是同一个球休的不同视角。图中红圈表示球上的同一个点。可以看到Lambert材质在不同的视角产生相同的颜。第34个球体是同一个模型。它们反射的光线较前两个少,第三个是养护机械BRDF的典型模型——环境(ambient)。它只是在整个图像中增加了另一种颜来模拟环境的光照,但这种方法没什么大用,因为它只会让你的图像变的不真实。要模拟环境光的话试着多打几个灯或者干脆用
GI
05.简易的镜面反射模型————Phong,Blinn-Phong.
    上面的图显示的是物理上真实的境面反射--高光。左边一个是Lambert,完美的漫射。红的入射光线反射后被等量的向四周反射。第二个是完美的镜面反射,渲染器用这个原理来产生完美的镜面,像镜子等。第三个是反射模糊,反射光线由于表面的微小凹突在镜面反射的路线上产生了偏移。现在我们已经了解了许多描述表面上不同部分的模型,上面介绍的只是最简单的几个。还有一些描述不同类型镜面反射的模型(因为许多表面都有不规则的地方)。最简单的几个:
    1975Phong Bui Tong发明的Phong模型,由于它的速度相当快,成为了CG表面镜面反射应用最多最广泛的模型。它不是物理上精确的模型,你可以设置高光的强度使发送的
光线大于接收的光线,而这在现实中是不可能的。但因为CGI是一种艺术创作,那么这也是可行的。

本文发布于:2024-09-20 22:31:15,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/71453.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:光线   表面   反射   物体   产生   吸收
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议