中法线如何反转_凹凸贴图、法线贴图、置换贴图傻傻分不清?
太長不看全文版:
凹凸貼圖:適用于凹凸起伏小的材質,不影響模型外觀。
法線貼圖:適用于有起伏,但起伏不是很大的材質,用于表現如面部細節、小衣服紋理等細節,可以高效節約資源,不影響模型外觀。
置換貼圖:什么樣的起伏都可以表現模擬,但是渲染耗費資源。
1.Bump Mapping(凹凸貼圖)做過CG的朋友一定比包子的海里還要更早的認識Bump Map。這種貼圖是一種灰度圖,用表面上灰度的變化來描述目標表面的凹凸,因此這種貼圖是黑白的,如果節省空間,甚至可以把貼圖的Alpha通道征用來用作Bump。值得注意的是,這種貼圖表面上存儲的東西是高度域即每個點和原始表面的高度差,記住,每個點的顏色不是色彩,是高度,一個數值!因此,對這個貼圖做任何的操作都會影響到這個物體3D的外觀質感。不能憑感覺用事。而在不同的渲染引擎中對于
渲染中,Bump Map并沒有改變物體的表面的頂點起伏而只是影響光照的結果,欺騙眼睛而已。比如把一面白色的墻面貼上細小的紋理,可以產生出起伏的效果。在MAYA中,通常黑色代表凹,白色代表凸,當然,貼圖的效果是靠黑白顏色之間的對比度來體現的。在體現水泥墻、皮革等之類的有凹凸,但是起伏并不明顯的材質上運用較多,也可以通過對凹凸的編輯改變對象的粗糙度效果。仔細觀察下圖,從磚墻的中間部分感受到起伏,但是對象模型的邊緣不會受到影響,依舊是很平整。
2.Normal Mapping(法線貼圖)
Normal Mapping在游戲領域中的實踐是一個非常值得記住的時期--Geforce3上市,GPU概念出現,硬件可編程流水線的出現(Shaders),Normal Mapping是一種凹凸貼圖技術,它的另外一個名字叫做Dot3 bump mapping。
光與影,法線貼圖技術的物理學基礎
我們知道,人之所以能夠對景物看出立體感的主要原因是因為人有兩只眼睛。兩只眼睛看的景象是不同的,所以人們才能分辨出立體感來。但是,由于電腦的屏幕是一個平面,分辨3D效果就只能靠光影效果來實現了。
舉個簡單的例子,這就像我們畫素描的時候,為了不讓一個球體看起來像是一個圓圈,必須讓球體的一些區域是亮的,一些區域是暗的。而且從亮部轉向暗部的時候是一個均勻的按照物理模型特點的過渡,這樣畫出來的球體才像個球體,電腦為我們繪制的過程也是一樣。
因為有明暗,我們才能將平面理解成立體
基于這個道理,我們就不難理解可以通過貼圖局部的亮暗變化來實現假的3D效果。換一種說法就是說我們可以通過在貼圖上的局部做一些亮暗的變化來做到一種假的3D效果。
光照因角度不同而呈現不同的明暗
那么如何實時的對貼圖進行轉換呢?如果要實現虛擬的光影變換,我們最起碼需要知道在一個平面上真正的凹凸的情況,這樣才能讓顯示芯片進行運算,生成一種假的凹凸的效果。
顯然,記錄真實的凹凸模型是得不償失的——如果那樣的話就沒有任何意義了,我們需要用一種非常簡單的方法來記錄一個貼圖的凹凸情況,于是就誕生了一種全新的方法,法線貼圖技術。
接下來,我們再回到我們剛才談到的法線貼圖的話題上。
法線貼圖就是記錄了一個需要進行光影變換的貼圖上的各個點的凹凸情況的貼圖,顯示芯片根據這個貼圖的內容,來實時的生成新的有過光影變化的貼圖,從而實現立體效果。
那么,究竟是怎樣利用法線貼圖記錄一個平面或者說是一個貼圖的凹凸情況呢?我們知 道,物體表面產生明暗變化的直接原因,就是光線照射角度的不同,光線垂直于平面的地方就亮,光線斜射到平面的地方就暗,光線照不到的地方就更暗(應該是黑 色,但是由于環境光照所以不會有陰影是真正的黑色)。
借色彩之值存法線之向,巧妙的存儲
學過初中物理的朋友一定還都記得,表示光線射向平面的角度時通常使用光線和該點法線角度來表示。這也就意味著,如果我們將一個貼圖上所有點的法線記錄起來的話,就不難再利用這些信息實現后期的假的凹凸效果了。
記錄這些法線的載體就被我們稱為法線貼圖。為什么稱之為貼圖呢?我們知道,一條法線 是一個三維向量,一個三維向量由X、Y、Z等3個分量組成,于是人們想出了一個聰明的方法,就是以這3個分量當作紅綠藍3個顏色的值存儲,這樣的話就生成 一張新的貼圖了,這就是法線貼圖的來歷。
采用色彩通道存儲法線向量
法線貼圖其實并不是真正的貼圖,所以也不會直接貼到物體的表面,它所起的作用就是記錄每個點上的法線的方向。所以這個貼圖如果看起來也會比較詭異,經常呈現一種偏藍紫色的樣子。
法線貼圖的生成過程
采用法線貼圖技術的優勢就是利用很少的資源實現了效果非常好的凹凸效果,而且可以利用我們在開篇的時候提到的紋理壓縮技術對法線貼圖進行壓縮,進一步節省資源。
前面的那張圓球圖案的法線貼圖
? ? ? ?NormalMap看來可以增加細節,但是它的缺點也很明顯。不過在說缺點之前,要提前說一句--NormalMap帶來的優勢是遠遠大于它的缺點的。因此仍然是個極好的東西,不要對它有偏見,特別是在我們后面介紹的更牛的技術前面,千萬不要。最大的也是最明顯的缺點應該就是它的視角問題。因為NormalMap只是改變的表面上的光照結果,并沒有改變表面上的形狀。因此,表面上看來,似乎只要是不接近水平,NormalMap就不會有視角問題。其實不然,NormalMap因為不能實現自身內部的遮擋,因此不能表現平面上凹凸起伏比較大的場合。比如說我們一個桌面上突出一塊,然后在突出的這塊東西邊上放一支牙簽。如果用NormalMap表現,會發現。根據經驗,這個凸起會很輕易的擋住我們的視線,讓我們看不見那支牙簽。可是NormalMap卻不會這么做。因此我們一直能看見障礙物背后的東西,這一點是個問題--也就是說只有在垂直于平面的時候NormalMap才會發揮最好的作用。這樣一來,NormalMap只能用在大家對遮擋關系不敏感的場合,比如場景等,不是不能用于人物,而是用NormalMap的人物不太經得起特寫,放大了,角度刁鉆了都容易穿幫。
P.S.關于NormalMap的一點秘籍。注意理解……NormalMap其實并不是從低模的表面凸出高模的細節的,而是把高模中比最高點的位置低的地方凹進去的!因此低模要比高模大一點點才會很準。大家可以想像成我們是用一個比高模稍微大一點點尺寸的低模石膏模型來把高模雕刻出來的。
Displacement mapping 位移貼圖(置換貼圖) 和前面說的幾種方式不同,DisplacementMapping是一種真正改變物體表面的方式。通過一種稱為micropolygons(微多邊形)tessellate(鑲嵌)的技巧來實現真正的改變物體表面的細節。 具體流程是這樣的。首先,根據屏幕的分辨率,在模型的可見面上鑲嵌和最終象素尺寸相同的微多邊形。這個過程叫做鑲嵌。然后讀取一張Bump貼圖。根據表面的灰度確定高度。然后根據鑲嵌所得到的多邊形,沿著原先的表面法線方向移動微多邊形。接著再為新的多邊形確定好新的法線方向。此時,物體的表面確實已經真的增加出了細節。 其實這種技巧,我們在使用ZBrush的時候就可以看見了。大家用過Zbrush的時候會知道,在表面刷過的細節,只有在畫面靜止下來之后才會越來越清晰。而微多邊形鑲嵌起到的就是類似的作用。只增強面對屏幕的多邊形的表面粗糙細節,而不是整個模型。因此性能代價并不會像直接上高模那么大。相比來說位移貼圖在效果上是沒有任何瑕疵的,但是也未必沒有缺點。 首先就是,對硬件的要求很高,必須支持ShaderMode3.0才可以,因為只有支持SM3才可以在頂點階段進行紋理操作。同時鑲嵌對于性能的消耗也不小。不過其實就對于GPU的壓力而言,反而似乎要更合理一些(因為對頂點的運算要求提高,對象素級別的運算要求反而沒有影響)想必在將來的DX10統一渲染構架中會更有價值。 和我們介紹的所有凹凸貼圖技術相比,位移貼圖是唯一真正改變多邊形表面幾何形狀的方法。相比之后將要介紹的切空間光線追蹤算法,這種算法的性能消耗雖然并不占優,但其實要更為合理。給予畫面更多特效的機會,同時更有趣的是,其實他和其他基于象素著色的凹凸貼圖并沒有什么沖突。其實這種位移貼圖在新世代主機的游戲中大家都有可能見到。只是可能不是大家想得到的地方。 它可以用來實時生成大面積的戶外地形!這是其他任何凹凸貼圖方式所不能比擬的!
下圖最后一個就是通過置換貼圖表現,非常真實。
總結
以上是生活随笔為你收集整理的中法线如何反转_凹凸贴图、法线贴图、置换贴图傻傻分不清?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软骨发育不良怎么办
- 下一篇: ttf能改成gfont吗_如何编辑ttf