基于图像的光照(Image-Based Lighting, IBL)概述
现代的游戏引擎或者渲染引擎在渲染光照时为了渲染的效率往往会使用一些二维纹理贴图来储存一些计算光照以及着色的影像数据,这就是基于图像的光照(Image-Based Lighting, IBL)。当然在部分教程中可能会将IBL狭义地限定为使用球面贴图(Spherical Map)或者立方体贴图(Cube Map)的环境贴图(Environment Map)。事实上,基于图像光照包含了处理光照以及着色的影像数据的一系列算法或方式,而本文则将从一个相对宏观的层面来介绍IBL。
法线贴图(Normal Map)
法线贴图是计算机图形学中处理光照增添物体表面细节的一种常用方式,而事实上,法线贴图也可以被视为广义上的基于图像光照的一种。无论是传统的布林冯模型(Blinn-Phong)还是基于物理的渲染(Physically-Based Rendering, PBR)也好,当物体表面的属性(材质)确定时,影响光照效果的最主要的因素就是物体表面的法向量,而法线贴图则是使用了一张二维的图像来记录物体表面的法向量,使用图片的RGB通道记录法向量的值(这也是为什么法线贴图看起来通常是蓝紫色的),在计算光照时在法线贴图上进行采样从而计算光照,而非使用模型的三角形面或顶点的真实法向量值。这样做的好处是可以在相对简单的物体表面呈现出复杂的细节,而不用真正地使用细节更加复杂的模型。
高度贴图(Height Map):凹凸贴图(Bump Map)、视差贴图(Parallax Map)、位移贴图(Displacement Map)
高度贴图的作用是记录一个公寓或低于三角形面的高度,因此只需要使用一个值来记录该高度数据,所以高度贴图往往呈现出灰度图的效果。目前来说,高度贴图一般有三种实现的手段即凹凸贴图(Bump Map)、视差贴图(Parallax Map)和位移贴图(Displacement Map)。
凹凸贴图是一种相对早期的技术,它记录高度值以此来生成物体表面的法向量,目前来说,往往会采用前文提及的法线贴图来显式地处理记录法向量的问题。
视差遮挡贴图使用高度贴图中的信息来人工调整渲染平面时使用的纹理坐标,从而使曲面看起来包含随着摄影机移动而半正确移动的曲面细节。
位移贴图将会实际的修改模型来进行曲面细分,顶点将会按照位移贴图中记录的法向量进行移动,从而使得模型拥有更加丰富的细节,这也是效果最好的的一种方式,但这就意味着更高的开销,这也是计算机图形学中不可避免的Trade-Off(即取舍、权衡、协调)的问题。
环境贴图(Environment Map)
环境贴图看起来像是从场景中对象的角度拍摄的环境全景照片,水平方向覆盖360度,垂直方向覆盖180度或360度。环境贴图的作用类似于对象周围一般照明环境的描述,通常用于以低成本渲染反射或者处理间接光照,最常见的两种格式是球形贴图(Spherical Map)和立方体贴图(Cubic Map)。
球面贴图(Spherical Map)看起来像是通过鱼眼镜头拍摄的照片,它被视为被映射到一个半径无限的球体内部,以被渲染对象为中心。球坐标是用球坐标来解决的。在赤道附近,有很多水平和垂直分辨率。但是,当垂直(方位角)角接近垂直时,纹理沿水平(天顶)轴的分辨率降低到单个texel。立方体地图是为了避免这个问题而设计的。
立方体贴图(Cubic Map)看起来像是由六个主要方向(上、下、左、右、前和后)拍摄的照片拼凑而成的合成照片。在渲染过程中,立方体贴图被视为以正在渲染的对象为中心,在无限远处映射到长方体的六个内表面。要读取与对象表面上的点P相对应的环境贴图纹理,我们将光线从摄影机移到点P,并围绕P处的曲面法线反射它。反射光线将一直跟踪,直到它与环境贴图的球体或立方体相交。对点P着色时,将使用此交点处的纹素值。
在实际的应用当中,UE4引擎使用了反射捕获(Reflection Capture)技术来处理反射,这事实上也是一种环境贴图贴图技术,即通过在场景中放置SphereReflectionCapture这样的Actor来记录反射。此外,UE4中还使用了体积光照贴图(Volumetric Lightmap)来记录环境中的间接光照,该技术在空间中均匀的分布球体来记录反射的间接光。
小结
除了以上提及的集中IBL外还有许多其他类型的光照贴图,如UE4引擎中就存在大量预先生成的光照贴图,使用IBL的目的就是为了预先的处理尽可能多的光照信息从而在游戏事实渲染的过程中提高效率。
本文地址:https://blog.csdn.net/qq_39598188/article/details/109251478