法线贴图技术在次世代游戏图像中的原理及应用

2012-08-15 00:52周飞
关键词:凸凹法线多边形

周飞

(湖北经济学院 艺术学院,湖北 武汉430205)

法线贴图技术在次世代游戏图像中的原理及应用

周飞

(湖北经济学院 艺术学院,湖北 武汉430205)

次世代游戏的画面表现力之所有能产生一个巨大的飞跃,其重要原因之一是法线贴图技术的发明和应用。本文从根本原理上阐释法线贴图技术的原理以及在次世代游戏图像当中的应用方法和注意事项。首先介绍了三维图形中灯光的工作原理和计算方法,然后剖析法线贴图的计算原理和方法,最后归纳了主要的法线贴图生成方法。

法线贴图;次世代三维游戏美术;全像素照明

一、引言

法线贴图技术作为次世代游戏图像技术的核心,为游戏软件用户提供了飞跃式的视觉体同时也为游戏开发商和三维艺术家提供了更多的自由空间。以往三维游戏的实际游戏画面受到硬件显示的限制,能呈现出来的多边形数量非常有限。在这种限制下,实时演算的游戏画面的细节表现力无法让人满意。当法线贴图技术引入游戏引擎之后,可以做到在多边形数量相对低下的模型上呈现出超高数量多边形模型所能表现出的细节,在没有给计算机硬件过多负荷的条件下,表现出惊人的效果。本文将深入浅出地剖析此技术的核心原理和应用方法注意事项的成因。

二、三维计算机图形中灯光的工作原理

在正式讲解法线贴图之前,对于灯光如何照亮三维模型的过程原理有一个基本了解是非常重要的,因为这是法线贴图工作原理的基础。灯光是如何工作的呢?我们是如何去区分屏幕上哪个像素应该是亮还是暗,以便于所有这些像素点集合在一起看上去好像是场景里面的物体被某种灯光照亮了呢?首先一点非常重要的是必须要去了解模型表面每一个点所指向的方向。模型表面某一点指向的方向我们把它称作改点的法线方向(normal),从该点出发沿着这个方向作出的一条射线称作法线。可以想象它就是从这一点引出的一条线[1]。这条线跟这个点所在的平面是垂直的。在一个存在光的三维场景之中,从模型表面的一点引出一条线段指向光源的位置,这条线定义为光向量”(light vector)。那么以上定义了两条向量从这个点引出,它们分别是“法线”和“光向量”。通过测量这两个向量之间的夹角,就能知道光是如何照亮这一点的,如果夹角很小,那么可以得知这个点需要被照的比较亮一点。因为基本上就是比较接近直射。如果这个夹角很大,我们就知道这个点需要被照的暗一点,因为远离光源(假设只有一个光源)。

这就是基本光照原理。这个原理的核心算法公式就是:

brightness=N dot L

N代表法线,L代表光向量,Dot是我们测量两个向量之间关系的一个测量方法。代表“点积”(数量积)通用公式:

|u||v|cos。如果点积越大,说明夹角越小,则物理离光照的轴线越近,光照越强。

三、进入法线贴图

那么这种光照是如何应用到即时渲染的模型当中的呢?到现在,大部分即时渲染的游戏模型都运用“平滑浓淡处理”明暗法(Gouraud Shading[2])。这个处理法实际上是只对顶点处的点采用NdotL的方程式进行明暗值的计算,而且其他的在顶点之间的像素采用线性填充。所以,如果我的多边形有一点是亮的,另一个相邻的点是暗的,那么他们之间的像素则呈现一种明暗渐变的调子。

这种做法是一种可以减轻计算机运算量的捷径。因为多边形上面只有一部分点进行了明暗值的精确计算,而且并非所有的。这可以对多边形表面的明暗分布进行快速的估算。这个方法很有效,但是它看上去远不如对每个像素进行明暗计算来的真实。

有时候用平滑浓淡处理可以得到想要的光照效果,但是其他时候,得到的效果不怎么样。如果模型中的三角形面很大,那么模型光照出来的效果看上去将会非常糟糕。那么只能通过添加多边形的数量来增加模型的细节,而这就受限制于游戏引擎的能力[3]P3。解决这个问题的办法是什么呢?答案是——全像素照明 (Per-pixel lighting)(Geforce2以上的显卡都可以进行逐点照明计算)。使用这种方法,虽然模型很低,但是光照效果仍然很圆润平滑,因为对每个像素进行了光照计算。全像素照明(Per-pixel lighting)使用一张RGB贴图,对需要的数据进行编码,用来将模型表面法线的数据记录在一张普通的贴图中。这个贴图包含了模型表面发现的数据,叫做法线贴图[4]P6。红,绿,蓝通道,分别对应发现的x,y,z轴向量值。

上文提到过,法线跟改点所在切面垂直。这其实并不是绝对的。当使用法线贴图的时候,可以让每一个像素上的法线指向所想要的方向。在上面的的图中我们可以看到蓝色的像素(R127,G127,B255)所代表的法线是垂直指出屏幕的。粉色的像素所代表的法线是往右边扭曲的,绿色像素代表的法线则是往上扭曲的。紫色像素代表的法线是往下扭曲的,深蓝色和绿色像素是往左扭曲的。可以让模型表面看上去好像又很多额外的凸凹细节,或者划伤,或者任何其他的表面细节,仅仅通过简单的去编辑法线贴图上的信息。这样就能让表面看上去是指向不同方向的而实际上不是。扭曲的法线愚弄了视觉,通过模型上每个像素和灯光互动的结果,让人相信模型的表面拥有很多细节,而实际上并非如此。这个过程可以用法线贴图去实现相同的效果,但是是在即时渲染当中。实际上,为即时渲染用的模型绘制一张老的凸凹贴图,然后再把它转换成法线贴图,很容易做到[5]P7。然后将法线贴图应用在即时渲染模型上。

法线贴图更强的一个应用方法是,创造一个低模,和一个相应的高模。然后通过计算机对这两个相应的高低模型进行计算,解算出法线贴图。先创造一个低模,用于实际渲染用。再创造一个跟它对齐的高模,可以添加任何想要的细节和多边形数量。但是要注意两者要完全对照对齐对应。接下来运行特殊的解算程序,来运算法线贴图。这个程序将一张空白的贴图放在低模的表面。程序沿着地膜的表面发现方向朝高模表面画出一条线,这条线和高模表面相交的点,程序找到高模表面这一点的法线方向。记录改点的法线方向,然后放置到那张法线贴图中。

一旦程序找到了这一点高模的法线方向,就把信息编码到RGB色彩中,并放置到贴图中对应的点上面[6]P320。贴图上每一点都重复这个步骤。当全部完成后,就得到一张包含了从高模上计算出的法线贴图。这就可以应用到低模上了。

四、法线贴图的创建方法

(一)从凸凹贴图创建出法线贴图

让即时渲染模型看上去有更多细节的一个简单做法是用一张由凸凹贴图直接生成的法线贴图。这种做法中,法线贴图在即时渲染中提供的凸凹信息和凸凹贴图在软件预渲染中起到的功能作用是一致的。基本做法是这样的:首先创建一个即时演算用的多边形较少的模型,然后将这张法线贴图应用到模型上,现在,就得到了一个拥有很多细节的模型。这个过程非常简单。很容易理解,就是直接将凸凹贴图转换成法线贴图并应用在模型上。

(二)把法线贴图用于高模细节表现

把凸凹贴图直接转换成法线贴图来使用,最大的弊端是没有让这个模型显得更圆润,看上去有更多的多边形。一个凸凹贴图只是仅仅让模型表面看上去更高或者更低。凸凹贴图允许添加更多的紧凑的表面细节,但无法让模型看上去拥有几千倍多的多边形数量的假象。接下来介绍的技术会比之前的要复杂,但是得到的结果会让人觉得震惊。运用这种技术可以让低模看上去跟高模很相似。这里是从高模创建法线贴图的步骤:

第一步:创建一个高模,包含了丰富的细节。不需要任何uv或者材质的处理,仅仅只需要包含丰富细节的高模。第二步:为这个高模创建一个相匹配的底模。需要分好UV,例如有一个底模,其多边形在632个左右。第三步:用某种程序,从高模提供的信息烘培法线贴图,烘培的过程是基于底模的UV分布的。第四步:打开低模,将法线贴图运用到底模上。记住这个模型现在仍然只有632个多边形。但是得到的结果是非常漂亮的。尤其是跟运用法线贴图之前进行对比,效果很明显。

五、小结

法线贴图技术如今已经广泛应用在各类大型游戏中,成为游戏制作不可或缺的重要的利用有限数量多边形表现丰富细节的技术手段。其计算主要参数为模型表面的法线夹角,制作涉及到多边形较少和较多的两类模型,应用时的注意事项也是基于如何更加清晰的计算夹角值来展开的。掌握并懂得应用法线贴图技术,即掌握了次时代游戏画面飞跃进步的核心。

[1]Krishnamurthy and Levoy.Fitting Smooth Surfaces to Dense Polygon Meshes[R].Proceedings of SIGGRAPH,1996.

[2]Cignoni et al.A general method for preserving attribute values on simplified meshes[J].Visualization'98.Proceedingsl,1998.59-66.

[3]游艺网教育部.Zbrush+Maya全案塑造次世代游戏人物及机械[M].清华大学出版社,2011.

[4]马骁,蒲福贵.ZBrush次世代角色建模火星课堂[M].人民邮电出版社,2010.

[5]王伟,姚勇.3ds max&Photoshop&ZBrush次世代游戏美术制作实例详解[M].电子工业出版社,2008.

[6]次世代工作室.游戏的设计与开发[M].航空工业出版社,2011.

猜你喜欢
凸凹法线多边形
草 原
多边形中的“一个角”问题
基于定位法线的工件自由度判定方法及应用
草原
可换凸凹模技术的应用研究
多边形的艺术
解多边形题的转化思想
多边形的镶嵌
椭圆法线定理的逆定理
蚯蚓之舞