摘 要:本文就當(dāng)前動(dòng)畫(huà)及游戲領(lǐng)域應(yīng)用非常廣泛的法線貼圖進(jìn)行了詳盡的原理分析,希望對(duì)相關(guān)從業(yè)人員有所啟示。
關(guān)鍵詞:法線貼圖;光照原理;顏色分析
法線貼圖技術(shù)在為游戲用戶提供了超強(qiáng)的觀感享受的同時(shí)也為三維藝術(shù)家提供了更多的自由創(chuàng)作空間。早期三維游戲由于受到硬件顯示的限制,游戲畫(huà)面能呈現(xiàn)出來(lái)的多邊形數(shù)量非常有限,在這種情況下實(shí)時(shí)演算的畫(huà)面細(xì)節(jié)無(wú)法讓人滿意。可是當(dāng)法線貼圖技術(shù)被引入游戲引擎之后,由于其可以做到在多邊形數(shù)量相對(duì)低下的模型上呈現(xiàn)出超高數(shù)量多邊形模型所能表現(xiàn)出的細(xì)節(jié),而更重要的這是在沒(méi)有給計(jì)算機(jī)硬件帶來(lái)任何過(guò)多負(fù)荷的條件下就能表現(xiàn)出驚人的效果。因此,該技術(shù)得以在游戲、動(dòng)畫(huà)、虛擬現(xiàn)實(shí)等行業(yè)中獲得廣泛普及與應(yīng)用。如(圖1)中低模通過(guò)法線貼圖而獲得的高細(xì)節(jié)顯示。
1 三維空間模型表面的光照原理
在圖形學(xué)領(lǐng)域針對(duì)三維空間中某一模型將來(lái)被渲染器渲染并呈現(xiàn)在屏幕上,有著眾多信息需要計(jì)算。例如,物體自發(fā)光信息、環(huán)境光信息、漫反射信息、鏡面反射信息等,這些因素都可以用如下公式來(lái)綜合計(jì)算,即物體的光照顏色=發(fā)射顏色+全局環(huán)境顏色+(環(huán)境顏色+漫反射顏色+鏡面反射顏色)×聚光燈效果×衰減因子。如果場(chǎng)景中有多個(gè)光源(包括環(huán)境光),那么分別計(jì)算來(lái)每個(gè)光源的光照顏色,然后把這些光照顏色累加即可。如果物體不發(fā)射光,則沒(méi)有發(fā)射顏色這一成分。我們可以拿對(duì)物體本身影響最大的漫反射顏色的計(jì)算來(lái)進(jìn)行解釋?zhuān)@也是貼圖能改變模型表面的細(xì)節(jié)的關(guān)鍵所在,(圖2)展示的是物體表面漫反射顏色計(jì)算原理。
物體漫反射顏色=光源的漫反射光顏色×物體的漫反射材質(zhì)顏色×DiffuseFactor,其中漫反射因子DiffuseFactor是光線與頂點(diǎn)法線向量的點(diǎn)積:DiffuseFactor=max(0,dot(N,L))。
上面公式中N表示的是物體表面某一點(diǎn)的法線,即Normal。而L表示在存在光的三維場(chǎng)景之中從模型表面的一點(diǎn)引出一條線段指向光源的位置,這條線定義為光向量,即Light Vector,通過(guò)測(cè)量這兩個(gè)矢量之間的夾角我們就可以知道該點(diǎn)是如何被照亮的。并且在圖形學(xué)中,點(diǎn)積的幾何意義其實(shí)就是表示兩個(gè)向量之間夾角的cos值。因此,這個(gè)公式直觀直接地揭示了漫反射的規(guī)律:頂點(diǎn)法線正對(duì)入射光線,漫反射效果最強(qiáng),頂點(diǎn)法線背對(duì)入射光線(角度大于等于90度)就完全沒(méi)有漫反射效果。另外需要注意的是在光照計(jì)算中,頂點(diǎn)法線與光向量必須是經(jīng)過(guò)規(guī)范化的(normalize)。
另外在光照顏色計(jì)算中還有一個(gè)關(guān)于鏡面反射顏色的計(jì)算,其在鏡面反射因子計(jì)算中所也要考慮兩個(gè)向量,其一是模型表面點(diǎn)的法線向量。其二是視線向量與光線向量的半角向量,關(guān)于鏡面反射顏色的計(jì)算請(qǐng)參考相關(guān)資料,在這里我們需要了解的是模型表面法線對(duì)模型將來(lái)被渲染呈現(xiàn)非常重要就可以了。
2 法線貼圖相關(guān)概念解析
在素描學(xué)習(xí)中各種物體的空間立體感是在一個(gè)基本的、簡(jiǎn)單的輪廓線條基礎(chǔ)上不斷通過(guò)添加明暗關(guān)系來(lái)體現(xiàn)的,如(圖3)的素描靜物展示。
在三維空間物體光照顏色的計(jì)算公式中可以得知:如果物體表面被渲染點(diǎn)的法線信息被更改,那么光向量與頂點(diǎn)法線向量點(diǎn)積而得到的漫反射因子(DiffuseFactor)會(huì)發(fā)生改變,則模型在渲染中就會(huì)有更多明暗變化,期間由于眼睛的欺騙作用則會(huì)使觀者感覺(jué)到模型有了更多的細(xì)節(jié),那么貼圖手段如凹凸貼圖、法線貼圖、視差貼圖更改法線成為最常用方法,又由于法線貼圖在當(dāng)前行業(yè)中應(yīng)用最為廣泛,本文在此做深入分析。
首先法線貼圖與凹凸貼圖(Bump)非常相似,但是法線貼圖的優(yōu)勢(shì)在于即使在燈光位置和模型角度改變的情況下,依然可以得到正確的shading,從而為低多邊形模型帶來(lái)更多的細(xì)節(jié)效果。并且凹凸貼圖(Bump)只使用單通道圖像(灰度圖像)來(lái)計(jì)算,而法線貼圖使用多通道圖像(RGB)來(lái)體現(xiàn)法線信息。凹凸貼圖改變的是法線向量的大小,而法線貼圖能同時(shí)改變法線向量的大小和方向。
我們?cè)诖酥挥懻撉芯€空間法線貼圖(tangent space normal map),因?yàn)閣orld space normal map和object space normal map 不適合可變形物體,因此,實(shí)際應(yīng)用較少,故除非特別指明我們?cè)谙旅嫠v述的所有法線貼圖都指的是tangent space normal maps(切線空間法線貼圖)。Tangent space切線空間由3個(gè)向量組成:一個(gè)是normal(法線與表面正交垂直)。另外兩個(gè)與法線垂直,稱為tangent(切線)和bitangent(雙切線),也有將bitangent(雙切線)稱為binormal(副法線)之說(shuō),我們?cè)谶@里主要目的是將問(wèn)題說(shuō)明白就可以了。
一個(gè)三角形面的切線空間通常按下述方法計(jì)算:Normal Vector法線向量與三角形面垂直,用藍(lán)色表示,儲(chǔ)存在法線貼圖的藍(lán)色通道里;Tangent Vector切線向量用紅色表示,儲(chǔ)存在法線貼圖的紅色通道里,切線為左右向,即為貼圖空間中的U坐標(biāo);Binormal Vector副法線向量用綠色表示,儲(chǔ)存在綠色通道里,副法線為上下向,是貼圖空間中的V坐標(biāo)。如(圖4)所示。
圖4是在Maya軟件中所做的分析示意:左側(cè)模型三角面上顯示紅、綠、藍(lán)箭頭表示的是切線空間的三個(gè)向量,而右側(cè)標(biāo)注Ucoord和Vcoord則是該平面的UV展開(kāi)圖,注意切線空間向量與UV坐標(biāo)平面中顏色的對(duì)應(yīng)關(guān)系。
3 法線貼圖顏色構(gòu)成分析
下面來(lái)詳細(xì)分析法線貼圖的顏色構(gòu)成。在圖4所示的場(chǎng)景基礎(chǔ)之上繼續(xù)創(chuàng)建一圓柱體并保留一半,高度細(xì)分段數(shù)為1,圓周細(xì)分段數(shù)為7,并確保圓柱體為硬邊顯示狀態(tài),可以在選中圓柱體狀態(tài)下執(zhí)行Polygons模塊下Normals\Harden Edge,整個(gè)場(chǎng)景調(diào)整狀態(tài)如(圖5)所示。
此時(shí)將圓柱模型的頂點(diǎn)信息通過(guò)Maya渲染模塊(Rendering)下的Lighting/Shading\Transfer Maps...貼圖烘焙工具烘焙到平面上,該工具的詳細(xì)使用在此掠過(guò)略過(guò)。
圖6所示上方有一組配色表:高分辨率模型為白色,它的法線用青色表示,低多邊形和低多邊形包裹模型為紫色,法線用黃色表示(因?yàn)榈投噙呅伪砻嫔纤悬c(diǎn)的法線方向都是一樣的)。
現(xiàn)在,高分辨率模型上的每個(gè)多邊形面的法線(青色)都應(yīng)該按照下面平面物體的UV空間進(jìn)行分解:切線向量——紅色,法線向量——藍(lán)色,副法線向量——綠色(在本示意中看不見(jiàn),由于其與UV坐標(biāo)的V軸向平行,均為0),圓柱兩端的三角形面在法線貼圖中將不可見(jiàn)。
綠色的虛線用于輔助觀察面和面之間的顏色過(guò)渡以及它們對(duì)應(yīng)的模型位置。
灰色箭頭用于表示在計(jì)算法線貼圖時(shí)低分辨率多邊形上的點(diǎn)與高分辨率模型上的點(diǎn)的對(duì)應(yīng)關(guān)系?,F(xiàn)在我們要將高分辨率模型上的點(diǎn)的法線纖細(xì)烘焙到低多邊形上,首先從低多邊形的A、B、C、D、E、F和G發(fā)射了白色光線,并以包裹物體為范圍,方向?yàn)锳A、BB、CC、DD、EE和FF,光線在與高分辨率模型的相交點(diǎn)即為低多邊形在空間中要尋找的即將分解法線向量的點(diǎn)。
如圖6所示,將青色的法線向量分解為切線空間結(jié)構(gòu),以向量為對(duì)角線,單位為1,那么切線和副法線都會(huì)按正反方向生成一個(gè)矩形相鄰的兩條直角邊,數(shù)值為-1~1之間,并可按比例轉(zhuǎn)換為正整數(shù),以灰度值儲(chǔ)存在法線貼圖的RGB通道中。
對(duì)于切線(紅色通道)負(fù)方向區(qū)間(-1,0),那么它的灰度值范圍就在0~127之前,0是128的中灰色,反之,正方向(0,1)的范圍就在129~255之間,同理適用于副法線的綠色通道。由于法線向量的值永遠(yuǎn)為正,灰度值范圍總是在128~255之間。因?yàn)榍芯€域法線貼圖的法線向量不能指向負(fù)方向,所以以它為標(biāo)準(zhǔn)單位,可以很方便地計(jì)算出其余兩個(gè)數(shù)值。
例如,D點(diǎn)與高分辨率模型的4號(hào)面相對(duì)應(yīng),因?yàn)閮烧叩姆ň€平行,所以切線的值為0,在紅色通道表示為128的中灰;F點(diǎn)與6號(hào)面相交,可以看到這個(gè)面的法線向量(青色)為1個(gè)單位,分解出切線(紅色)長(zhǎng)度約為正方向0.78,對(duì)應(yīng)的法線貼圖的紅色通道灰度值是227;藍(lán)色的副法線長(zhǎng)度約為正方向0.625,對(duì)應(yīng)的法線貼圖的藍(lán)色通道灰度值為207。B點(diǎn)與2號(hào)面相交,青色的法線向量可分解為紅色的切線,長(zhǎng)度-0.78單位,對(duì)應(yīng)灰度值為28;藍(lán)色的副法線長(zhǎng)度為0.625單位,對(duì)應(yīng)藍(lán)色通道的灰度值為207。
如果將圓柱沿Y軸順時(shí)針旋轉(zhuǎn)90度如(圖7)所示那樣,讀者可自行分析一下法線顏色變化情況。
4 結(jié)論
三維物體表面法線信息發(fā)生變化可以使低模物體在渲染時(shí)獲得更高的細(xì)節(jié),這是三維動(dòng)畫(huà)與游戲領(lǐng)域?yàn)榱烁呒?xì)節(jié)以存儲(chǔ)空間換計(jì)算時(shí)間的典型做法,但由于以顏色(RGB)為存儲(chǔ)通道進(jìn)行信息的存儲(chǔ),決定了法線貼圖的局限性:其一是不適合劇烈、高強(qiáng)度的模型細(xì)節(jié)展示。其二是法線效果會(huì)隨著物體表面與攝像機(jī)視線成角的增加而減弱,但無(wú)論如何,法線貼圖的應(yīng)用還是為CG行業(yè)的整體效果提升起到了極為關(guān)鍵的作用,并且還會(huì)在相當(dāng)長(zhǎng)的一段時(shí)間內(nèi)繼續(xù)使用。
參考文獻(xiàn):
[1] 劉永剛.動(dòng)畫(huà)模型制作技法及應(yīng)用[M].南京:東南大學(xué)出版社,2010:89-106.