7.1 光照与材质的相互作用

图7.1展示了光照和阴影在表现物体的立体感和体积感时起到的重要作用。左边的球体没有灯照射,看上去就像是一个扁平的2D圆;而右边的球体有灯照射,看上去很立体。实际上,我们的视觉能力完全取决于光照及光照与材质之间的相互作用,所以,许多超写实场景的渲染工作都是通过精确的物理光照模型(lighting model)来实现的。(译者注:本章经常会提及“光照模型”个词,请读者不要将它与“3D网格模型”的含义混淆。“光照模型”即不是说“用灯照射一个3D网格模型”,也不是指“支持光照运算的3D网格模型”。它的正确含义是“光照算法的数学模型(或者说数学公式)”。请读者一定要将“光照模型”与“3D网格模型”的含义区分开。)

图7.1
图7.1 (a)没有灯照明的球体看上去就像是一个2D圆。(b)有灯照明的球体看上去很立体。

当然,一般来讲,越精确的光照模型,花费的计算时间就越长;我们必须在真实感和速度之间寻求平衡。例如,电影中的3D特效场景可以做得非常复杂,可以使用更为写实的光照模型,因为电影中的帧是预渲染的(pre-rendered),电影制作者可以花费数小时甚至数日的时间来渲染一帧。而游戏是实时渲染应用程序,它至少要以每秒30帧的速度渲染场景。

注意,本书关于光照模型的解释和实现方法大部分来自于[Möller02]的描述。

学习目标

  1. 了解光照与材质之间的相互作用。
  2. 了解局部照明和全局照明之间的区别。
  3. 了解如何以数学方式描述平面上的点所“面对”的方向,以使我们确定线与平面之间的入射角。
  4. 学习如何正确变换法线向量。
  5. 了解环境光、漫反射和镜面光之间的区别。
  6. 学习如何实现方向光、点光和聚光灯。
  7. 了解如何通过深度来控制衰减参数,改变光照的强度。

 

当使用光照时,我们不再直接指定顶点颜色;而是指定材质和灯光,然后使用光照方程,根据灯光与材质的相互作用计算顶点颜色。这样可以产生非常逼真的物体颜色(再次比较图7.1a和7.1b中的球体)。

材质可以被认为是决定光照如何与物体表面相互作用的属性。例如,表面反射的灯光颜色、吸收的灯光颜色、反射率、透明度和光泽度都是构成表面材质的参数。不过,在本章中,我们主要讲解的是表面反射的灯光颜色、吸收的灯光颜色和光泽度。

在我们的光照模型中,光源可以发射各种强度的红、绿、蓝光;通过一方式,我们可以模拟很多灯光颜色。当光线从光源发出照射到一个物体上时,一部分光线会被物体吸收,另一部分线会被反射回来(对于透明物体,比如玻璃,还会有一部分光线会从物体中间穿过,不过在这里我们先不用考虑透明度的问题)。反射会沿着它的新路径传播,可能会照射在其他物体上,其中一部分线会被物体吸收,另一部分线会再次反射。在光线的能量完全耗尽之前,它会照射到许多物体。很可能会有一部分线最终传入人的眼睛(参见图7.2),触碰到视网膜上的视感细胞(称为视锥细胞和视杆细胞)。

图7.2
图7.2 (a)连续射入的白色光线。(b)当光线照射到圆柱体上时,一部分光线会被圆柱体吸收,另一部分光线分散传向眼睛和球体。(c)当圆柱体的反射光照射到球体上时,一部分光线会被球体吸收,另一部分光线会再次反射,传入眼睛。(d)眼睛收到入射线,看到物体。

根据三原色理论(参见[Santrock03]),视网膜包含三种类型的有色感受器,分别对红、绿、蓝光(以及某些重叠部分)敏感。根据光的波长改变射入的RGB光线强度,刺激相应的感受器。这样,感受器就会受到刺激(或者不受刺激),神经触突会通过视觉神经传送到大脑,大脑根据感受器产生的信号形成头脑中的最终图像。(当然,如果你闭上或盖上眼睛,感受器细胞就不会受到刺激,大脑就会认为是黑色。)

例如,再次考虑图7.2。假设圆柱体的材质反射75%的红和75%的绿光,其余线均被圆柱体吸收;球体反射25%的红光,其余线均被球体吸收。同时,假设光源发射的线为纯白色光线。当光线照射到圆柱体上时,所有的蓝会被吸收,只有75%的红和75%的绿光被反射回来(即,中高强度的黄色线)。这些光线会产生散射,其中一部分光线会传入眼睛,另一部分线会传向球体。传进眼睛的那一部分线主要刺激的是红色和蓝色圆锥细胞;因此,观察者看到的圆柱体为亮黄色。现在,另一部分线会传向球体,并照射在球体表面上。球体反射25%的红光,其余线均被球体吸收;那些曾被稀释过的红色(中高强度的红色线)会被再次稀释,所有射入的绿光均被吸收,只有一部分红光反射回来。然后些剩下的红光传入眼睛,对红色视锥细胞产生刺激。因此,观察者看到的球体为暗红色。

本书(和许多实时渲染应用程序)采用的光照模型都是局部光照模型(local illumination model)。在局部光照模型中,每个物体的光照都是相互独立的,所有的光线都是从光源直接照射到物体上(即,本来应该被场景中其他物体阻隔的线,仍然会照射到后面的物体上)。图7.3说明了一光照模型的特点。

图7.3
图7.3 在现实环境中,如果墙壁挡住了从灯泡射出的光线,那么球体就应该位于墙壁的阴影之中。然而,在局部光照模型中,无论墙壁是否存在,球体都会被照亮。

与之相反,全局照明模型(global illumination model)不仅会考虑光源对物体的直接照明,也会考虑场景中的其他物体反射造成的间接照明。它之所以被称为全局照明模型,就是因为它在照亮一个物体的同时,也会考虑到整个场景中的其他因素。对于实时游戏来讲,全局照明模型占用的系统资源量过大(虽然它可以渲染出接近于照片的超写实场景)。目前,实时全局照明(real-time global illumination)的实现方法还处于探索阶段。

文件下载(已下载 672 次)

发布时间:2014/8/3 21:05:38  阅读次数:5145

2006 - 2024,推荐分辨率1024*768以上,推荐浏览器Chrome、Edge等现代浏览器,截止2021年12月5日的访问次数:1872万9823 站长邮箱

沪ICP备18037240号-1

沪公网安备 31011002002865号