【引言】
? ? ? ?上一篇談到C4D的凹凸貼圖及其應用。最后說道,在現實使用中,尤其是在游戲引擎中,很少有使用凹凸貼圖的,基本上都支持法線貼圖。這是為什么?我在自學的時候,這個問題也困惑很長時間,看來很多CG書,基本上到關鍵的地方就沒了,非常不解渴。我想作者也許也沒有搞懂,他可能也不是太懂圖形學,反正用就是了。這一篇,我就和初學者分享一下,我所理解的法線貼圖原理以及如何應用。不一定正確,拋磚引玉吧
(我的磚可沒少扔,但沒得到一塊玉啊!)
凸凹效果只能獲得一種紋理細節,而法線貼圖則可以改變幾何體的光照模型,盡管模型的幾何外形不會改變。
【研究】
一、法線貼圖的的原理:
■法線貼圖(Normal map)
首先研究基于世界坐標的法線貼圖(world space normal map),雖不常用,但是基礎。法線貼圖是用來記錄物體表面不同的入射點的法線矢量的圖像數據信息。它是用一個RGB彩色圖像來記錄不同點的法線XYZ坐標數據的。規則是R通道記錄X軸的數據,G通道記錄的是Y軸數據,B通道記錄的是Z軸的數據。
法線貼圖的出現,是為了低面數的模型模擬出高面數的模型的"光照信息"。(前幾篇談過,低模+法線貼圖增加模型表面細節的優化方法)光照信息最重要的當然是光入射方向與入射點的法線夾角,法線貼圖本質上就是記錄了這個夾角的相關信息,光照的計算與某個面上的法線方向息息相關。
1、下圖是說:用烘焙的方法,把高模表面的光照信息(法線方向)和低模進行“映射”計算,再通過烘焙方法把XYZ坐標數據轉化為RGB數據儲存到一個圖像的過程。
2、下圖是說:渲染器從低模的材質中讀出法線貼圖,然后把法線貼圖每點的RGB圖像信息轉化為XYZ法線方向,還原高模的表面信息。也就是說,有了法線貼圖,渲染器不管真實的低模是什么 樣子,它就相信法線貼圖的光照信息。這就是一個很好的視覺魔術。
■法線貼圖的分類:
1、world space normalmap:如果這個法線方向,是處于世界坐標中的(world space),那稱為world space norma。渲染器從貼圖里解壓出來后,就可以直接用了,效率很高。但是有個缺點,這個world space normal 是固定了,如果物體沒有保持原來的方向和位置,那原來生成的normal map就作廢了。
2、object space normamap:如果是處于物體本身局部坐標中的,那稱為object space normal。它從貼圖里解壓,還需要乘以model-view矩陣轉換到世界坐標,或者轉換到其他坐標取決于計算過程及需求。object space normal生成的貼圖,物體可以被旋轉和位移,基本讓人滿意。但仍有一個缺點,就是一張貼圖只能對應特定的一個模型,模型不能有變形(deform)。
3、tangent space normal map:
在object space的基礎上,高模上object space內的某點法線(不會是world space的,否則旋轉就露相),乘以這個矩陣,即得到tangent space內的法線方向,再把這個值映射到rgb空間,存為貼圖。
O-TBN =
現在我們可以分析為什么tangent space法線貼圖是偏藍色了,因為對于高模上的面來說,因為精度太高(面很小,而且周圍的面相對它的方向很平滑),所以這個面渲染時計算機認為這個面的"彎曲"程度很小,即面上各個點插值得來的法線相互間偏差很小,基本跟整個面的垂直方向不會差太多。因此在tangent space里,這些法線都跟z軸偏差較小,而z軸是被保存在貼圖里的B(藍色通道)里,所以貼圖顯示出來的顏色就偏藍了。
總之,world space norma 好用,但是要求最高;object space normamap不錯,要求不能變形;tangent space normal map:最佳,旋轉、變形都可以,最常用。tangent space normal map適應變形的這種能力,使它不僅能夠應用在原來的模型上,甚至可以應用在變形嚴重的不同模型上。即法線貼圖有一定的脫離原來模型使用的能力。比如你模擬出了一個高精度的粗糙花崗巖平板表面,得出的法線貼圖可以應用到圓柱模型上邊。
二、法線貼圖的制作方法:
如何得到法線貼圖呢?有三種方法:
一是從高模到低模的烘焙,這是最準確的。
二是從一張圖片轉化過來,實際上就是把彩色的RGB轉化為灰度圖(凹凸貼圖),又從凹凸貼圖存儲的表面光照信息轉化為以RGB形式存儲的法線貼圖。這用方法可用,但不準確。
三是繪制法線貼圖。沒有人能直接用畫筆“直接”畫出法線貼圖,必須通過軟件進行轉化而來,這種方法就是靈活自如。下面簡單介紹法線貼圖的三種制作方法,供大家參考。
Ⅰ、從高模烘焙而來
我最喜歡的烘焙軟件就是xNormal。我在《一塊石頭-4》中說明了如何做。
xNormal的使用非常簡單,它要求:
一是必須有一個高模和一個低模(OBJ格式);
二是低模的模型必須分好UV。
為了加強認識,我再簡單舉個例子。
■實例:制作一個凹凸的木門
1、制作一個立方體,90、210、3 一個正常門的尺寸。起名為DOOR,按C轉化多邊形。
2、重新展開DOOR的UV。(默認:這六個面的UV是重合的)
做好以后,以DOOR_LOW.OBJ低模形式導出。
3、然后,選擇面模式,對一個面進行編輯。這個很簡單,不做分析了。
(注意:倒角的時候,要有一定的坡度,不要完美垂直)
做完以后,再以DOOR_HIGH.OBJ作為高模導出。
4、打開xNormal軟件,添加高模文件。
5、添加低模文件。
6、烘焙設置,勾選法線和環境吸收貼圖,設置好文件夾和生成貼圖的名字。
7、點擊標記處,可以進一步設置法線貼圖。該軟件默認的“切線”法線模式。(生成的法線一定會偏藍的)
8、生成兩張貼圖如下:
9、把DOOR_LOW.OBJ合并到DOOR_HIGH.OBJ的場景中,在低模的材質賦予材質,并在法線通道載入烘焙的法線貼圖。渲染看看,喲!不錯啊。
10、可以增強光影效果,在漫射通道添加環境吸收貼圖,調整混合強度,否則邊角接縫處,太暗。
11、下載,分別在兩個模型材質的顏色通道,載入之。
12、渲染。你能分辨嗎?
這種方式,常用在三維游戲中,增加模型表面細節,同時不增加面數,而欺騙眼球的一種魔術方法。
補充:
有朋友跟我說:C4D的烘焙紋理標簽也能從高模向低模烘焙紋理,為什么不講呢?
這是因為C4D本身的紋理烘焙在烘焙法線貼圖的功能上比不過xNomal (人家不僅功能強大,還是免費)。
C4D烘焙法線貼圖要求高模和低模UV應該是一致的。不少人烘焙出來的法線貼圖不對,就是因為C4D有這一條的限制。它是高對低在UV統一下的“一對一”的映射,所以法線不一致,導致錯誤。你想,如果你從事高模制作,你注重的是模型細節,哪管UV啊!xNomal就是這樣好,它在烘焙法線貼圖的時候,不管高模的UV,你只要把低模的UV分好就行。歸根結底,還是算法上xNomal有優勢,這也是小軟件能存活的原因:好用,管用。
Ⅱ、從圖片轉化而來
第一種方法:專用軟件轉化
我在《一張貼圖搞定》中詳細介紹過該軟件使用方法,著重談了如何把一張貼圖轉化為法線貼圖。實際上這種軟件太多了,如Substance Bitmap2Material 、Knald、xNormal。
1、原圖片
2、用CRAZYBUMP進行轉換
3、轉化保存為法線貼圖。
4、在C4D中載入生成的法線貼圖。
5、使用克隆制作一片地磚,光影效果還是說得過去。
第二種方法:用C4D把圖片轉為法線貼圖
C4D在法線通道內不能直接使用上述彩色圖片,必須通過一個特殊功能的Shade進行轉化,功能比上述專業轉化軟件差一些,要求不高可以用。
1、在顏色和法線通道載入原圖。
2、再添加紋理---效果--法線生成SHADE。
3、點擊進入“法線生成”進行設置。加大強度等設置。
4、渲染也湊合。
Ⅲ、 繪制方法
第一種是C4D繪制法線貼圖方法
C4D的BP 3D PAINT能否繪制法線貼圖呢?我認為不太可能,因為法線貼圖的RGB表示的是數據,記錄的是每個點的法線矢量,我們如何知道什么顏色代表什么高度呢?與凹凸貼圖完全不同。
1、而這個BP 3D paint,的確有法線設置。
2、 我個人認為,它不是用來讓你繪制的,而是讓你載入一個烘焙完成的法線貼圖,用來輔助繪制紋理的。
(這種方法,在SUBSTANCE PAINTER中常用。有了法線貼圖墊底,你一筆畫下去,不僅有顏色,凹凸也出來了。這個效果就是法線貼圖在后邊做得貢獻。)
3、如果我們不載入現有的法線貼圖,而是繪制一個,我們看看。
4、 隨便繪制一些圖案。
5、球體上并沒有顯示什么,渲染也沒有什么。
6、我們看材質,法線通道的確載入這個新繪制的紋理,似乎沒有效果。
7、通過上邊所講,我們知道如何把一張圖片在C4D轉化為法線貼圖。
具體做法是:為這個新繪制的紋理,再添加一個紋理---效果--法線生成SHADE。
8、 轉到BP 3D PAINT界面 并沒有什么顯示,但是,當你按SHIFT+R 或者 CTRL+R 渲染時,效果出現了。
總之,我個人認為:在C4D中如果要繪制凹凸效果,最好還是使用凹凸貼圖,實時而且可控。(凹凸貼圖和法線貼圖記錄法線方式不一樣,渲染計算不一樣,在C4D內,對于普通渲染計算,個人認為沒有什么太大區別。)
第二種是NDO插件繪制
Ndo是QUIXEL SUITE的一個功能模塊,原來是獨立的PS一個插件,專門用來繪制法線貼圖的,功能十分強大和好用。下面我簡單地展示一下它的用法。
1、在C4D建立一個立方體(門),尺寸:90、210、3CM。
2、展開它的UV
3、烘焙它的法線貼圖,添加烘焙紋理標簽,設置如下:
4、第二頁設置如下:(不需要高模)
5、啟動該軟件。它自動打開PHOTOSHOP,畢竟它是NDO的宿主啊!
這個軟件支持PBR物理貼圖繪制的。
6、工具條非常小。N是NDO繪制法線;D是DDO繪制紋理;3是3DO三維觀察窗口
7、點擊NDO,出現下面窗口,讓你建立一個項目。
8、點擊它創建項目,又打開一個窗口。載入C4D創建的模型和法線貼圖,點擊下面建立項目。
9、點擊圖板上的轉化,把法線貼圖轉化一下。經過一陣運算后,項目建立好了。
再點擊圖標3,打開三維顯示,看到了這個門的模型。
10、注意:NDO能把選擇區、鋼筆繪制圖案、外載入圖片等轉化為法線貼圖,厲害吧!
下面,新建一個圖層,我們用選擇工具畫一個下面的螞蟻線。(按SHIFT鍵矩形加圓形)
11、NDO面板自動識別,選取轉化法線,在中間點擊它。
12、經過一陣運算,生成法線貼圖。在3DO窗口看看。
13、NDO生成法線貼圖以后,轉換成新的面板,讓你調試更改。比如是凹還是凸等,以后再細談吧。
14、用圓角矩形工具繪制,點擊轉化按鈕。
15、SLANT選擇凹下,CURVE選擇曲線。
16、再從外載入一個圖片文件,清除外邊,保留圓形部分,點擊轉化。
17、在繪制一個矩形選取,填充漸變,然后向下一次復制。點擊轉化。
18、打開3DO看看效果。然后,點擊PS 文件導出NORMAL.PSD輸出貼圖文件。
19、在C4D中,建立一個材質,在材質的法線通道載入這個法線貼圖文件。
20、在材質顏色通道載入一張木紋紋理。渲染一下,效果還可以。
(如果你認為不太好,不是軟件的事情,是我的技術太差,做得匆忙的原因)
【后記】
? ? ? 每次不忙的時候,就用電腦趕緊打開三倆個軟件,然后截圖,編寫,保存。有事的時候,就又忙別的去了,所以每次編寫的時候,都十分匆忙,錯字不少。退休就好了,心靜不下來啊!
【感悟】
? ? ? ? 每一個熱愛CG的人,剛剛入門的時候,就是憑著有一股熱情,義無反顧地堅持學習。其實,在自學的時候,幾乎都是一邊學習軟件的,一邊學習涉及的相關理論知識。比如當時學習法線貼圖和凹凸貼圖的時候,總是不懂,為什么要用它們,在模型制作的時候,多加一些面,制作出細節不就可以了嗎?后來,看了很多書,詢問很多人,都沒有解釋,稀里糊涂就這么使用了2年,后來涉及游戲領域,才明白這是為了節約計算資源,即保證顯示效果,又要提高渲染速度而想出來的一個解決辦法而已。后來又想既然法線貼圖和凹凸貼圖效果如此相似,為什么要有兩個啊?慢慢學才知道原來它們都是記錄模型表面法線方向的,只是不同的記錄算法。但為什么在游戲引擎中一般都支持法線貼圖?這是因為法線貼圖在使用的時候,比凹凸貼圖效率更高,占用內存小,而且解算得更快,(這個以后有機會再詳談)所以,如果渲染靜幀圖片的時候,用法線和凹凸貼圖,哪個都無所謂。如果在游戲中,強調的是渲染速度,要求對項目進行徹底的優化,當然選擇效率更高的法線貼圖了。
? ? ? ?隨著你深入學習,你的問題應該越來越多,推動你不斷地走向深入。當然,興趣是源動力。否則,你會停留在會用就行了的層次上。是不是這個道理呢?