在学习法线贴图的过程中,有几个比较难以理解的概念,这里记录一下。特别说一下,本文的法线贴图是切线空间下的法线贴图。
空间变换如上图所示,简单表达了在使用法线贴图的过程中,涉及到的几个空间变换:
切线空间:从法线贴图中采样得到的法线,在切线空间中;
对象空间:物体的本地坐标空间,顶点的相关信息,在对象空间;
世界空间:光源位置、观察者位置等,在世界空间中。
在空间变换的过程中,主要涉及到了两个变换矩阵:
\(TBN\)矩阵:从切线空间变换到对象空间;
\(Model\)矩阵:从对象空间变换到世界空间。
对于上述概念,大部分都是比较熟悉的,只有法线贴图、切线空间和\(TBN\)矩阵比较陌生。下面,将分别介绍一下。
法线贴图在3D计算机图形学中,法线贴图是一种用于伪造凹凸光照的技术,是凹凸贴图的一种实现。它用于添加细节,而不使用更多的多边形。这种技术的一个常见用途是,通过从高精度多边形或高度图生成法线贴图,来极大地增强低精度多边形的外观和细节。下图来自Paolo Cignoni,图中对比了两种方式:
法线贴图通常存储为常规RGB图像,其中RGB分量分别对应于表面法线的X,Y和Z坐标。
法线的每个分量的值的范围是\([-1,1]\),而RGB分量的值的范围是\([0,1]\)。所以,在将法线存储为RGB图像时,需要对每个分量做一个映射:
\[vec3 \quad rgb\_normal = normal * 0.5 + 0.5 \]