法线贴图原理与分析

2015-05-30 14:25刘永刚
艺术科技 2015年9期

摘 要:本文就当前动画及游戏领域应用非常广泛的法线贴图进行了详尽的原理分析,希望对相关从业人员有所启示。

关键词:法线贴图;光照原理;颜色分析

法线贴图技术在为游戏用户提供了超强的观感享受的同时也为三维艺术家提供了更多的自由创作空间。早期三维游戏由于受到硬件显示的限制,游戏画面能呈现出来的多边形数量非常有限,在这种情况下实时演算的画面细节无法让人满意。可是当法线贴图技术被引入游戏引擎之后,由于其可以做到在多边形数量相对低下的模型上呈现出超高数量多边形模型所能表现出的细节,而更重要的这是在没有给计算机硬件带来任何过多负荷的条件下就能表现出惊人的效果。因此,该技术得以在游戏、动画、虚拟现实等行业中获得广泛普及与应用。如(图1)中低模通过法线贴图而获得的高细节显示。

1 三维空间模型表面的光照原理

在图形学领域针对三维空间中某一模型将来被渲染器渲染并呈现在屏幕上,有着众多信息需要计算。例如,物体自发光信息、环境光信息、漫反射信息、镜面反射信息等,这些因素都可以用如下公式来综合計算,即物体的光照颜色=发射颜色+全局环境颜色+(环境颜色+漫反射颜色+镜面反射颜色)×聚光灯效果×衰减因子。如果场景中有多个光源(包括环境光),那么分别计算来每个光源的光照颜色,然后把这些光照颜色累加即可。如果物体不发射光,则没有发射颜色这一成分。我们可以拿对物体本身影响最大的漫反射颜色的计算来进行解释,这也是贴图能改变模型表面的细节的关键所在,(图2)展示的是物体表面漫反射颜色计算原理。

物体漫反射颜色=光源的漫反射光颜色×物体的漫反射材质颜色×DiffuseFactor,其中漫反射因子DiffuseFactor是光线与顶点法线向量的点积:DiffuseFactor=max(0,dot(N,L))。

上面公式中N表示的是物体表面某一点的法线,即Normal。而L表示在存在光的三维场景之中从模型表面的一点引出一条线段指向光源的位置,这条线定义为光向量,即Light Vector,通过测量这两个矢量之间的夹角我们就可以知道该点是如何被照亮的。并且在图形学中,点积的几何意义其实就是表示两个向量之间夹角的cos值。因此,这个公式直观直接地揭示了漫反射的规律:顶点法线正对入射光线,漫反射效果最强,顶点法线背对入射光线(角度大于等于90度)就完全没有漫反射效果。另外需要注意的是在光照计算中,顶点法线与光向量必须是经过规范化的(normalize)。

另外在光照颜色计算中还有一个关于镜面反射颜色的计算,其在镜面反射因子计算中所也要考虑两个向量,其一是模型表面点的法线向量。其二是视线向量与光线向量的半角向量,关于镜面反射颜色的计算请参考相关资料,在这里我们需要了解的是模型表面法线对模型将来被渲染呈现非常重要就可以了。

2 法线贴图相关概念解析

在素描学习中各种物体的空间立体感是在一个基本的、简单的轮廓线条基础上不断通过添加明暗关系来体现的,如(图3)的素描静物展示。

在三维空间物体光照颜色的计算公式中可以得知:如果物体表面被渲染点的法线信息被更改,那么光向量与顶点法线向量点积而得到的漫反射因子(DiffuseFactor)会发生改变,则模型在渲染中就会有更多明暗变化,期间由于眼睛的欺骗作用则会使观者感觉到模型有了更多的细节,那么贴图手段如凹凸贴图、法线贴图、视差贴图更改法线成为最常用方法,又由于法线贴图在当前行业中应用最为广泛,本文在此做深入分析。

首先法线贴图与凹凸贴图(Bump)非常相似,但是法线贴图的优势在于即使在灯光位置和模型角度改变的情况下,依然可以得到正确的shading,从而为低多边形模型带来更多的细节效果。并且凹凸贴图(Bump)只使用单通道图像(灰度图像)来计算,而法线贴图使用多通道图像(RGB)来体现法线信息。凹凸贴图改变的是法线向量的大小,而法线贴图能同时改变法线向量的大小和方向。

我们在此只讨论切线空间法线贴图(tangent space normal map),因为world space normal map和object space normal map 不适合可变形物体,因此,实际应用较少,故除非特别指明我们在下面所讲述的所有法线贴图都指的是tangent space normal maps(切线空间法线贴图)。Tangent space切线空间由3个向量组成:一个是normal(法线与表面正交垂直)。另外两个与法线垂直,称为tangent(切线)和bitangent(双切线),也有将bitangent(双切线)称为binormal(副法线)之说,我们在这里主要目的是将问题说明白就可以了。

一个三角形面的切线空间通常按下述方法计算:Normal Vector法线向量与三角形面垂直,用蓝色表示,储存在法线贴图的蓝色通道里;Tangent Vector切线向量用红色表示,储存在法线贴图的红色通道里,切线为左右向,即为贴图空间中的U坐标;Binormal Vector副法线向量用绿色表示,储存在绿色通道里,副法线为上下向,是贴图空间中的V坐标。如(图4)所示。

图4是在Maya软件中所做的分析示意:左侧模型三角面上显示红、绿、蓝箭头表示的是切线空间的三个向量,而右侧标注Ucoord和Vcoord则是该平面的UV展开图,注意切线空间向量与UV坐标平面中颜色的对应关系。

3 法线贴图颜色构成分析

下面来详细分析法线贴图的颜色构成。在图4所示的场景基础之上继续创建一圆柱体并保留一半,高度细分段数为1,圆周细分段数为7,并确保圆柱体为硬边显示状态,可以在选中圆柱体状态下执行Polygons模块下Normals\Harden Edge,整个场景调整状态如(图5)所示。

此时将圆柱模型的顶点信息通过Maya渲染模块(Rendering)下的Lighting/Shading\Transfer Maps...贴图烘焙工具烘焙到平面上,该工具的详细使用在此掠过略过。

图6所示上方有一组配色表:高分辨率模型为白色,它的法线用青色表示,低多边形和低多边形包裹模型为紫色,法线用黄色表示(因为低多边形表面上所有点的法线方向都是一样的)。

现在,高分辨率模型上的每个多边形面的法线(青色)都应该按照下面平面物体的UV空间进行分解:切线向量——红色,法线向量——蓝色,副法线向量——绿色(在本示意中看不见,由于其与UV坐标的V轴向平行,均为0),圆柱两端的三角形面在法线贴图中将不可见。

绿色的虚线用于辅助观察面和面之间的颜色过渡以及它们对应的模型位置。

灰色箭头用于表示在计算法线贴图时低分辨率多边形上的点与高分辨率模型上的点的对应关系。现在我们要将高分辨率模型上的点的法线纤细烘焙到低多边形上,首先从低多边形的A、B、C、D、E、F和G发射了白色光线,并以包裹物体为范围,方向为AA、BB、CC、DD、EE和FF,光线在与高分辨率模型的相交点即为低多边形在空间中要寻找的即将分解法线向量的点。

如图6所示,将青色的法线向量分解为切线空间结构,以向量为对角线,单位为1,那么切线和副法线都会按正反方向生成一个矩形相邻的两条直角边,数值为-1~1之间,并可按比例转换为正整数,以灰度值储存在法线贴图的RGB通道中。

对于切线(红色通道)负方向区间(-1,0),那么它的灰度值范围就在0~127之前,0是128的中灰色,反之,正方向(0,1)的范围就在129~255之间,同理适用于副法线的绿色通道。由于法线向量的值永远为正,灰度值范围总是在128~255之间。因为切线域法线贴图的法线向量不能指向负方向,所以以它为标准单位,可以很方便地计算出其余两个数值。

例如,D点与高分辨率模型的4号面相对应,因为两者的法线平行,所以切线的值为0,在红色通道表示为128的中灰;F点与6号面相交,可以看到这个面的法线向量(青色)为1个单位,分解出切线(红色)长度约为正方向0.78,对应的法线贴图的红色通道灰度值是227;蓝色的副法线长度约为正方向0.625,对应的法线贴图的蓝色通道灰度值为207。B点与2号面相交,青色的法线向量可分解为红色的切线,长度-0.78单位,对应灰度值为28;蓝色的副法线长度为0.625单位,对应蓝色通道的灰度值为207。

如果将圆柱沿Y轴顺时针旋转90度如(图7)所示那样,读者可自行分析一下法线颜色变化情况。

4 结论

三维物体表面法线信息发生变化可以使低模物体在渲染时获得更高的细节,这是三维动画与游戏领域為了高细节以存储空间换计算时间的典型做法,但由于以颜色(RGB)为存储通道进行信息的存储,决定了法线贴图的局限性:其一是不适合剧烈、高强度的模型细节展示。其二是法线效果会随着物体表面与摄像机视线成角的增加而减弱,但无论如何,法线贴图的应用还是为CG行业的整体效果提升起到了极为关键的作用,并且还会在相当长的一段时间内继续使用。

参考文献:

[1] 刘永刚.动画模型制作技法及应用[M].南京:东南大学出版社,2010:89-106.