(轉)法線貼圖Nomal mapping 原理

法線貼圖多用在CG動畫的渲染以及遊戲畫面的製作上,將具有高細節的模型通過映射烘焙出法線貼圖,貼在低端模型的法線貼圖通道上,使之擁有法線貼圖的渲染效果,卻可以大大降低渲染時需要的面數和計算內容,從而達到優化動畫渲染和遊戲渲染的效果。
 
現在好多3d網遊都沒有法線貼圖啊,呵呵,《giant》就沒有。

維基百科:
法線貼圖

法線貼圖
 什麼是法線貼圖技術呢?這是一種用來實現3D效果的一種技術,要想理解這種技術還請您聽我慢慢道來。

  我們知道,在遊戲中經常會有這樣的情況,就是一個平面——這個平面在現實中並不是一個“平”面,例如磚牆的表面帶有石質浮雕等等。這樣的情況如果要求遊戲開發人員將複雜的3D細節都做出來是不現實的,因爲即使不計較在建模時候的複雜度,過多的3D細節也同樣會大量消耗顯示芯片的性能,讓遊戲根本沒有可玩性。


                如何利用貼圖實現凹凸效果呢?

  可行的方法就是將這個平面用一個貼圖覆蓋,用貼圖的紋理實現一定的凹凸效果。但是這種方法實現的效果並不是很好,因爲如果視角一變化,看起來就會像一張簡單的畫有圖案的平面了。

  後來,聰明的遊戲開發者想出了一種方法,就是在貼圖過程中對貼圖進行一定的處理,從而保證了在視角變換以後仍然保證有較爲明顯的凹凸效果。

  光與影,法線貼圖技術的物理學基礎

  我們知道,人之所以能夠對景物看出立體感的主要原因是因爲人有兩隻眼睛。兩隻眼睛看的景象是不同的,所以人們才能分辨出立體感來。但是,由於電腦的屏幕是一個平面,分辨3D效果就只能靠光影效果來實現了。

  舉個簡單的例子,這就像我們畫素描的時候,爲了不讓一個球體看起來像是一個圓圈,必須讓球體的一些區域是亮的,一些區域是暗的。而且從亮部轉向暗部的時候是一個均勻的按照物理模型特點的過渡,這樣畫出來的球體纔像個球體,電腦爲我們繪製的過程也是一樣。


因爲有明暗,我們才能將平面理解成立體

  基於這個道理,我們就不難理解可以通過貼圖局部的亮暗變化來實現假的3D效果。換一種說法就是說我們可以通過在貼圖上的局部做一些亮暗的變化來做到一種假的3D效果。


光照因角度不同而呈現不同的明暗

  那麼如何實時的對貼圖進行轉換呢?如果要實現虛擬的光影變換,我們最起碼需要知道在一個平面上真正的凹凸的情況,這樣才能讓顯示芯片進行運算,生成一種假的凹凸的效果。

  顯然,記錄真實的凹凸模型是得不償失的——如果那樣的話就沒有任何意義了,我們需要用一種非常簡單的方法來記錄一個貼圖的凹凸情況,於是就誕生了一種全新的方法,法線貼圖技術。

  接下來,我們再回到我們剛纔談到的法線貼圖的話題上。

  法線貼圖就是記錄了一個需要進行光影變換的貼圖上的各個點的凹凸情況的貼圖,顯示芯片根據這個貼圖的內容,來實時的生成新的有過光影變化的貼圖,從而實現立體效果。

  那麼,究竟是怎樣利用法線貼圖記錄一個平面或者說是一個貼圖的凹凸情況呢?我們知道,物體表面產生明暗變化的直接原因,就是光線照射角度的不同,光線垂直於平面的地方就亮,光線斜射到平面的地方就暗,光線照不到的地方就更暗(應該是黑色,但是由於環境光照所以不會有陰影是真正的黑色)。

  借色彩之值存法線之向,巧妙的存儲

  學過初中物理的朋友一定還都記得,表示光線射向平面的角度時通常使用光線和該點法線角度來表示。這也就意味着,如果我們將一個貼圖上所有點的法線記錄起來的話,就不難再利用這些信息實現後期的假的凹凸效果了。

  記錄這些法線的載體就被我們稱爲法線貼圖。爲什麼稱之爲貼圖呢?我們知道,一條法線是一個三維向量,一個三維向量由X、Y、Z等3個分量組成,於是人們想出了一個聰明的方法,就是以這3個分量當作紅綠藍3個顏色的值存儲,這樣的話就生成一張新的貼圖了,這就是法線貼圖的來歷。


採用色彩通道存儲法線向量

  法線貼圖其實並不是真正的貼圖,所以也不會直接貼到物體的表面,它所起的作用就是記錄每個點上的法線的方向。所以這個貼圖如果看起來也會比較詭異,經常呈現一種偏藍紫色的樣子。


法線貼圖的生成過程


Doom3中的一張紋理貼圖和這張貼圖對應的法線貼圖

  『小提示-05:事實上,真正的法線貼圖並不是記錄貼圖上每個點的法線的絕對角度,而是記錄的是相對於平面的一個差值。這樣的話,隨着平面的3D變換都能夠實現即時的法線運算了。』

  傳統紋理壓縮,法線貼圖不再適用

  採用法線貼圖技術的優勢就是利用很少的資源實現了效果非常好的凹凸效果,而且可以利用我們在開篇的時候提到的紋理壓縮技術對法線貼圖進行壓縮,進一步節省資源。


前面的那張圓球圖案的法線貼圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章