本文共 1031 字,大约阅读时间需要 3 分钟。
光照与材质的相互作用
1. 为什么需要光照? 下图展示了光照和阴影在表现物体的立体感和体积感时起到的重要作用。左边的球体没有灯照射,看上去就像是一个扁平的2D圆;而右边的球体有灯照射,看上去很立体。实际上,我们的视觉能力完全取决于光照及光照与材质之间的相互作用,所以,许多超写实场景的渲染工作都是通过精确的物理光照模型(lighting model)来实现的。(译者注:本章经常会提及“光照模型”个词,请读者不要将它与“3D网格模型”的含义混淆。“光照模型”不是指“用灯照射一个3D网格模型”,也不是指“支持光照运算的3D网格模型”。它的正确含义是“光照算法的数学模型(或者说数学公式)”。请读者一定要将“光照模型”与“3D网格模型”的含义区分开。)(a)没有灯照明的球体看上去就像是一个2D圆。(b)有灯照明的球体看上去很立体。 当然,一般来讲,越精确的光照模型,花费的计算时间就越长;我们必须在真实感和速度之间寻求平衡。例如,电影中的3D特效场景可以做得非常复杂,可以使用更为写实的光照模型,因为电影中的帧是预渲染的(pre-rendered),电影制作者可以花费数小时甚至数日的时间来渲染一帧。而游戏是实时渲染应用程序,它至少要以每秒30帧的速度渲染场景。
注意,本书关于光照模型的解释和实现方法大部分来自于[Möller02]的描述。
2. 局部光照模型与全局光照模型
本书(和许多实时渲染应用程序)采用的光照模型都是局部光照模型(local illumination model)。在局部光照模型中,每个物体的光照都是相互独立的,所有的光线都是从光源直接照射到物体上(即,本来应该被场景中其他物体阻隔的线,仍然会照射到后面的物体上)。下图说明了局部光照模型的特点。
在现实环境中,如果墙壁挡住了从灯泡射出的光线,那么球体就应该位于墙壁的阴影之中。然而,在局部光照模型中,无论墙壁是否存在,球体都会被照亮。
与之相反,全局照明模型(global illumination model)不仅会考虑光源对物体的直接照明,也会考虑场景中的其他物体反射造成的间接照明。它之所以被称为全局照明模型,就是因为它在照亮一个物体的同时,也会考虑到整个场景中的其他因素。对于实时游戏来讲,全局照明模型占用的系统资源量过大(虽然它可以渲染出接近于照片的超写实场景)。目前,实时全局照明(real-time global illumination)的实现方法还处于探索阶段。