周飛
(湖北經(jīng)濟(jì)學(xué)院 藝術(shù)學(xué)院,湖北 武漢430205)
法線貼圖技術(shù)在次世代游戲圖像中的原理及應(yīng)用
周飛
(湖北經(jīng)濟(jì)學(xué)院 藝術(shù)學(xué)院,湖北 武漢430205)
次世代游戲的畫面表現(xiàn)力之所有能產(chǎn)生一個巨大的飛躍,其重要原因之一是法線貼圖技術(shù)的發(fā)明和應(yīng)用。本文從根本原理上闡釋法線貼圖技術(shù)的原理以及在次世代游戲圖像當(dāng)中的應(yīng)用方法和注意事項。首先介紹了三維圖形中燈光的工作原理和計算方法,然后剖析法線貼圖的計算原理和方法,最后歸納了主要的法線貼圖生成方法。
法線貼圖;次世代三維游戲美術(shù);全像素照明
法線貼圖技術(shù)作為次世代游戲圖像技術(shù)的核心,為游戲軟件用戶提供了飛躍式的視覺體同時也為游戲開發(fā)商和三維藝術(shù)家提供了更多的自由空間。以往三維游戲的實際游戲畫面受到硬件顯示的限制,能呈現(xiàn)出來的多邊形數(shù)量非常有限。在這種限制下,實時演算的游戲畫面的細(xì)節(jié)表現(xiàn)力無法讓人滿意。當(dāng)法線貼圖技術(shù)引入游戲引擎之后,可以做到在多邊形數(shù)量相對低下的模型上呈現(xiàn)出超高數(shù)量多邊形模型所能表現(xiàn)出的細(xì)節(jié),在沒有給計算機硬件過多負(fù)荷的條件下,表現(xiàn)出驚人的效果。本文將深入淺出地剖析此技術(shù)的核心原理和應(yīng)用方法注意事項的成因。
在正式講解法線貼圖之前,對于燈光如何照亮三維模型的過程原理有一個基本了解是非常重要的,因為這是法線貼圖工作原理的基礎(chǔ)。燈光是如何工作的呢?我們是如何去區(qū)分屏幕上哪個像素應(yīng)該是亮還是暗,以便于所有這些像素點集合在一起看上去好像是場景里面的物體被某種燈光照亮了呢?首先一點非常重要的是必須要去了解模型表面每一個點所指向的方向。模型表面某一點指向的方向我們把它稱作改點的法線方向(normal),從該點出發(fā)沿著這個方向作出的一條射線稱作法線。可以想象它就是從這一點引出的一條線[1]。這條線跟這個點所在的平面是垂直的。在一個存在光的三維場景之中,從模型表面的一點引出一條線段指向光源的位置,這條線定義為光向量”(light vector)。那么以上定義了兩條向量從這個點引出,它們分別是“法線”和“光向量”。通過測量這兩個向量之間的夾角,就能知道光是如何照亮這一點的,如果夾角很小,那么可以得知這個點需要被照的比較亮一點。因為基本上就是比較接近直射。如果這個夾角很大,我們就知道這個點需要被照的暗一點,因為遠(yuǎn)離光源(假設(shè)只有一個光源)。
這就是基本光照原理。這個原理的核心算法公式就是:
brightness=N dot L
N代表法線,L代表光向量,Dot是我們測量兩個向量之間關(guān)系的一個測量方法。代表“點積”(數(shù)量積)通用公式:
|u||v|cos。如果點積越大,說明夾角越小,則物理離光照的軸線越近,光照越強。
那么這種光照是如何應(yīng)用到即時渲染的模型當(dāng)中的呢?到現(xiàn)在,大部分即時渲染的游戲模型都運用“平滑濃淡處理”明暗法(Gouraud Shading[2])。這個處理法實際上是只對頂點處的點采用NdotL的方程式進(jìn)行明暗值的計算,而且其他的在頂點之間的像素采用線性填充。所以,如果我的多邊形有一點是亮的,另一個相鄰的點是暗的,那么他們之間的像素則呈現(xiàn)一種明暗漸變的調(diào)子。
這種做法是一種可以減輕計算機運算量的捷徑。因為多邊形上面只有一部分點進(jìn)行了明暗值的精確計算,而且并非所有的。這可以對多邊形表面的明暗分布進(jìn)行快速的估算。這個方法很有效,但是它看上去遠(yuǎn)不如對每個像素進(jìn)行明暗計算來的真實。
有時候用平滑濃淡處理可以得到想要的光照效果,但是其他時候,得到的效果不怎么樣。如果模型中的三角形面很大,那么模型光照出來的效果看上去將會非常糟糕。那么只能通過添加多邊形的數(shù)量來增加模型的細(xì)節(jié),而這就受限制于游戲引擎的能力[3]P3。解決這個問題的辦法是什么呢?答案是——全像素照明 (Per-pixel lighting)(Geforce2以上的顯卡都可以進(jìn)行逐點照明計算)。使用這種方法,雖然模型很低,但是光照效果仍然很圓潤平滑,因為對每個像素進(jìn)行了光照計算。全像素照明(Per-pixel lighting)使用一張RGB貼圖,對需要的數(shù)據(jù)進(jìn)行編碼,用來將模型表面法線的數(shù)據(jù)記錄在一張普通的貼圖中。這個貼圖包含了模型表面發(fā)現(xiàn)的數(shù)據(jù),叫做法線貼圖[4]P6。紅,綠,藍(lán)通道,分別對應(yīng)發(fā)現(xiàn)的x,y,z軸向量值。
上文提到過,法線跟改點所在切面垂直。這其實并不是絕對的。當(dāng)使用法線貼圖的時候,可以讓每一個像素上的法線指向所想要的方向。在上面的的圖中我們可以看到藍(lán)色的像素(R127,G127,B255)所代表的法線是垂直指出屏幕的。粉色的像素所代表的法線是往右邊扭曲的,綠色像素代表的法線則是往上扭曲的。紫色像素代表的法線是往下扭曲的,深藍(lán)色和綠色像素是往左扭曲的??梢宰屇P捅砻婵瓷先ズ孟裼趾芏囝~外的凸凹細(xì)節(jié),或者劃傷,或者任何其他的表面細(xì)節(jié),僅僅通過簡單的去編輯法線貼圖上的信息。這樣就能讓表面看上去是指向不同方向的而實際上不是。扭曲的法線愚弄了視覺,通過模型上每個像素和燈光互動的結(jié)果,讓人相信模型的表面擁有很多細(xì)節(jié),而實際上并非如此。這個過程可以用法線貼圖去實現(xiàn)相同的效果,但是是在即時渲染當(dāng)中。實際上,為即時渲染用的模型繪制一張老的凸凹貼圖,然后再把它轉(zhuǎn)換成法線貼圖,很容易做到[5]P7。然后將法線貼圖應(yīng)用在即時渲染模型上。
法線貼圖更強的一個應(yīng)用方法是,創(chuàng)造一個低模,和一個相應(yīng)的高模。然后通過計算機對這兩個相應(yīng)的高低模型進(jìn)行計算,解算出法線貼圖。先創(chuàng)造一個低模,用于實際渲染用。再創(chuàng)造一個跟它對齊的高模,可以添加任何想要的細(xì)節(jié)和多邊形數(shù)量。但是要注意兩者要完全對照對齊對應(yīng)。接下來運行特殊的解算程序,來運算法線貼圖。這個程序?qū)⒁粡埧瞻椎馁N圖放在低模的表面。程序沿著地膜的表面發(fā)現(xiàn)方向朝高模表面畫出一條線,這條線和高模表面相交的點,程序找到高模表面這一點的法線方向。記錄改點的法線方向,然后放置到那張法線貼圖中。
一旦程序找到了這一點高模的法線方向,就把信息編碼到RGB色彩中,并放置到貼圖中對應(yīng)的點上面[6]P320。貼圖上每一點都重復(fù)這個步驟。當(dāng)全部完成后,就得到一張包含了從高模上計算出的法線貼圖。這就可以應(yīng)用到低模上了。
(一)從凸凹貼圖創(chuàng)建出法線貼圖
讓即時渲染模型看上去有更多細(xì)節(jié)的一個簡單做法是用一張由凸凹貼圖直接生成的法線貼圖。這種做法中,法線貼圖在即時渲染中提供的凸凹信息和凸凹貼圖在軟件預(yù)渲染中起到的功能作用是一致的。基本做法是這樣的:首先創(chuàng)建一個即時演算用的多邊形較少的模型,然后將這張法線貼圖應(yīng)用到模型上,現(xiàn)在,就得到了一個擁有很多細(xì)節(jié)的模型。這個過程非常簡單。很容易理解,就是直接將凸凹貼圖轉(zhuǎn)換成法線貼圖并應(yīng)用在模型上。
(二)把法線貼圖用于高模細(xì)節(jié)表現(xiàn)
把凸凹貼圖直接轉(zhuǎn)換成法線貼圖來使用,最大的弊端是沒有讓這個模型顯得更圓潤,看上去有更多的多邊形。一個凸凹貼圖只是僅僅讓模型表面看上去更高或者更低。凸凹貼圖允許添加更多的緊湊的表面細(xì)節(jié),但無法讓模型看上去擁有幾千倍多的多邊形數(shù)量的假象。接下來介紹的技術(shù)會比之前的要復(fù)雜,但是得到的結(jié)果會讓人覺得震驚。運用這種技術(shù)可以讓低??瓷先ジ吣:芟嗨?。這里是從高模創(chuàng)建法線貼圖的步驟:
第一步:創(chuàng)建一個高模,包含了豐富的細(xì)節(jié)。不需要任何uv或者材質(zhì)的處理,僅僅只需要包含豐富細(xì)節(jié)的高模。第二步:為這個高模創(chuàng)建一個相匹配的底模。需要分好UV,例如有一個底模,其多邊形在632個左右。第三步:用某種程序,從高模提供的信息烘培法線貼圖,烘培的過程是基于底模的UV分布的。第四步:打開低模,將法線貼圖運用到底模上。記住這個模型現(xiàn)在仍然只有632個多邊形。但是得到的結(jié)果是非常漂亮的。尤其是跟運用法線貼圖之前進(jìn)行對比,效果很明顯。
法線貼圖技術(shù)如今已經(jīng)廣泛應(yīng)用在各類大型游戲中,成為游戲制作不可或缺的重要的利用有限數(shù)量多邊形表現(xiàn)豐富細(xì)節(jié)的技術(shù)手段。其計算主要參數(shù)為模型表面的法線夾角,制作涉及到多邊形較少和較多的兩類模型,應(yīng)用時的注意事項也是基于如何更加清晰的計算夾角值來展開的。掌握并懂得應(yīng)用法線貼圖技術(shù),即掌握了次時代游戲畫面飛躍進(jìn)步的核心。
[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]游藝網(wǎng)教育部.Zbrush+Maya全案塑造次世代游戲人物及機械[M].清華大學(xué)出版社,2011.
[4]馬驍,蒲福貴.ZBrush次世代角色建?;鹦钦n堂[M].人民郵電出版社,2010.
[5]王偉,姚勇.3ds max&Photoshop&ZBrush次世代游戲美術(shù)制作實例詳解[M].電子工業(yè)出版社,2008.
[6]次世代工作室.游戲的設(shè)計與開發(fā)[M].航空工業(yè)出版社,2011.