【引言】
? ? ? ?上一篇談到C4D的凹凸貼圖及其應(yīng)用。最后說(shuō)道腻扇,在現(xiàn)實(shí)使用中债热,尤其是在游戲引擎中,很少有使用凹凸貼圖的幼苛,基本上都支持法線(xiàn)貼圖窒篱。這是為什么?我在自學(xué)的時(shí)候舶沿,這個(gè)問(wèn)題也困惑很長(zhǎng)時(shí)間墙杯,看來(lái)很多CG書(shū),基本上到關(guān)鍵的地方就沒(méi)了括荡,非常不解渴高镐。我想作者也許也沒(méi)有搞懂,他可能也不是太懂圖形學(xué)畸冲,反正用就是了嫉髓。這一篇,我就和初學(xué)者分享一下邑闲,我所理解的法線(xiàn)貼圖原理以及如何應(yīng)用算行。不一定正確,拋磚引玉吧
(我的磚可沒(méi)少扔苫耸,但沒(méi)得到一塊玉爸菪稀!)
凸凹效果只能獲得一種紋理細(xì)節(jié)鲸阔,而法線(xiàn)貼圖則可以改變幾何體的光照模型偷霉,盡管模型的幾何外形不會(huì)改變。
【研究】
一褐筛、法線(xiàn)貼圖的的原理:
■法線(xiàn)貼圖(Normal map)
首先研究基于世界坐標(biāo)的法線(xiàn)貼圖(world space normal map)类少,雖不常用,但是基礎(chǔ)渔扎。法線(xiàn)貼圖是用來(lái)記錄物體表面不同的入射點(diǎn)的法線(xiàn)矢量的圖像數(shù)據(jù)信息硫狞。它是用一個(gè)RGB彩色圖像來(lái)記錄不同點(diǎn)的法線(xiàn)XYZ坐標(biāo)數(shù)據(jù)的。規(guī)則是R通道記錄X軸的數(shù)據(jù),G通道記錄的是Y軸數(shù)據(jù)残吩,B通道記錄的是Z軸的數(shù)據(jù)财忽。
法線(xiàn)貼圖的出現(xiàn),是為了低面數(shù)的模型模擬出高面數(shù)的模型的"光照信息"泣侮。(前幾篇談過(guò)即彪,低模+法線(xiàn)貼圖增加模型表面細(xì)節(jié)的優(yōu)化方法)光照信息最重要的當(dāng)然是光入射方向與入射點(diǎn)的法線(xiàn)夾角,法線(xiàn)貼圖本質(zhì)上就是記錄了這個(gè)夾角的相關(guān)信息活尊,光照的計(jì)算與某個(gè)面上的法線(xiàn)方向息息相關(guān)隶校。
1、下圖是說(shuō):用烘焙的方法蛹锰,把高模表面的光照信息(法線(xiàn)方向)和低模進(jìn)行“映射”計(jì)算深胳,再通過(guò)烘焙方法把XYZ坐標(biāo)數(shù)據(jù)轉(zhuǎn)化為RGB數(shù)據(jù)儲(chǔ)存到一個(gè)圖像的過(guò)程。
2铜犬、下圖是說(shuō):渲染器從低模的材質(zhì)中讀出法線(xiàn)貼圖舞终,然后把法線(xiàn)貼圖每點(diǎn)的RGB圖像信息轉(zhuǎn)化為XYZ法線(xiàn)方向,還原高模的表面信息癣猾。也就是說(shuō)敛劝,有了法線(xiàn)貼圖,渲染器不管真實(shí)的低模是什么 樣子煎谍,它就相信法線(xiàn)貼圖的光照信息攘蔽。這就是一個(gè)很好的視覺(jué)魔術(shù)。
■法線(xiàn)貼圖的分類(lèi):
1呐粘、world space normalmap:如果這個(gè)法線(xiàn)方向满俗,是處于世界坐標(biāo)中的(world space),那稱(chēng)為world space norma作岖。渲染器從貼圖里解壓出來(lái)后唆垃,就可以直接用了,效率很高痘儡。但是有個(gè)缺點(diǎn)辕万,這個(gè)world space normal 是固定了,如果物體沒(méi)有保持原來(lái)的方向和位置沉删,那原來(lái)生成的normal map就作廢了渐尿。
2、object space normamap:如果是處于物體本身局部坐標(biāo)中的矾瑰,那稱(chēng)為object space normal砖茸。它從貼圖里解壓,還需要乘以model-view矩陣轉(zhuǎn)換到世界坐標(biāo)殴穴,或者轉(zhuǎn)換到其他坐標(biāo)取決于計(jì)算過(guò)程及需求凉夯。object space normal生成的貼圖货葬,物體可以被旋轉(zhuǎn)和位移,基本讓人滿(mǎn)意劲够。但仍有一個(gè)缺點(diǎn)震桶,就是一張貼圖只能對(duì)應(yīng)特定的一個(gè)模型,模型不能有變形(deform)征绎。
3蹲姐、tangent space normal map:
在object space的基礎(chǔ)上,高模上object space內(nèi)的某點(diǎn)法線(xiàn)(不會(huì)是world space的,否則旋轉(zhuǎn)就露相)炒瘸,乘以這個(gè)矩陣淤堵,即得到tangent space內(nèi)的法線(xiàn)方向,再把這個(gè)值映射到rgb空間顷扩,存為貼圖。
O-TBN =
現(xiàn)在我們可以分析為什么tangent space法線(xiàn)貼圖是偏藍(lán)色了慰毅,因?yàn)閷?duì)于高模上的面來(lái)說(shuō)隘截,因?yàn)榫忍?面很小,而且周?chē)拿嫦鄬?duì)它的方向很平滑),所以這個(gè)面渲染時(shí)計(jì)算機(jī)認(rèn)為這個(gè)面的"彎曲"程度很小汹胃,即面上各個(gè)點(diǎn)插值得來(lái)的法線(xiàn)相互間偏差很小婶芭,基本跟整個(gè)面的垂直方向不會(huì)差太多。因此在tangent space里着饥,這些法線(xiàn)都跟z軸偏差較小犀农,而z軸是被保存在貼圖里的B(藍(lán)色通道)里,所以貼圖顯示出來(lái)的顏色就偏藍(lán)了。
總之宰掉,world space norma 好用呵哨,但是要求最高;object space normamap不錯(cuò)轨奄,要求不能變形孟害;tangent space normal map:最佳,旋轉(zhuǎn)挪拟、變形都可以挨务,最常用。tangent space normal map適應(yīng)變形的這種能力玉组,使它不僅能夠應(yīng)用在原來(lái)的模型上谎柄,甚至可以應(yīng)用在變形嚴(yán)重的不同模型上。即法線(xiàn)貼圖有一定的脫離原來(lái)模型使用的能力惯雳。比如你模擬出了一個(gè)高精度的粗糙花崗巖平板表面朝巫,得出的法線(xiàn)貼圖可以應(yīng)用到圓柱模型上邊。
二吨凑、法線(xiàn)貼圖的制作方法:
如何得到法線(xiàn)貼圖呢捍歪?有三種方法:
一是從高模到低模的烘焙户辱,這是最準(zhǔn)確的。
二是從一張圖片轉(zhuǎn)化過(guò)來(lái)糙臼,實(shí)際上就是把彩色的RGB轉(zhuǎn)化為灰度圖(凹凸貼圖)庐镐,又從凹凸貼圖存儲(chǔ)的表面光照信息轉(zhuǎn)化為以RGB形式存儲(chǔ)的法線(xiàn)貼圖。這用方法可用变逃,但不準(zhǔn)確必逆。
三是繪制法線(xiàn)貼圖。沒(méi)有人能直接用畫(huà)筆“直接”畫(huà)出法線(xiàn)貼圖揽乱,必須通過(guò)軟件進(jìn)行轉(zhuǎn)化而來(lái)名眉,這種方法就是靈活自如。下面簡(jiǎn)單介紹法線(xiàn)貼圖的三種制作方法凰棉,供大家參考损拢。
Ⅰ、從高模烘焙而來(lái)
我最喜歡的烘焙軟件就是xNormal撒犀。我在《一塊石頭-4》中說(shuō)明了如何做福压。
xNormal的使用非常簡(jiǎn)單,它要求:
一是必須有一個(gè)高模和一個(gè)低模(OBJ格式)或舞;
二是低模的模型必須分好UV荆姆。
為了加強(qiáng)認(rèn)識(shí),我再簡(jiǎn)單舉個(gè)例子映凳。
■實(shí)例:制作一個(gè)凹凸的木門(mén)
1胆筒、制作一個(gè)立方體,90诈豌、210仆救、3 一個(gè)正常門(mén)的尺寸。起名為DOOR队询,按C轉(zhuǎn)化多邊形派桩。
2、重新展開(kāi)DOOR的UV蚌斩。(默認(rèn):這六個(gè)面的UV是重合的)
做好以后铆惑,以DOOR_LOW.OBJ低模形式導(dǎo)出。
3送膳、然后员魏,選擇面模式,對(duì)一個(gè)面進(jìn)行編輯叠聋。這個(gè)很簡(jiǎn)單撕阎,不做分析了。
(注意:倒角的時(shí)候碌补,要有一定的坡度虏束,不要完美垂直)
做完以后棉饶,再以DOOR_HIGH.OBJ作為高模導(dǎo)出。
4镇匀、打開(kāi)xNormal軟件照藻,添加高模文件。
5汗侵、添加低模文件幸缕。
6、烘焙設(shè)置晰韵,勾選法線(xiàn)和環(huán)境吸收貼圖发乔,設(shè)置好文件夾和生成貼圖的名字。
7雪猪、點(diǎn)擊標(biāo)記處栏尚,可以進(jìn)一步設(shè)置法線(xiàn)貼圖。該軟件默認(rèn)的“切線(xiàn)”法線(xiàn)模式浪蹂。(生成的法線(xiàn)一定會(huì)偏藍(lán)的)
8抵栈、生成兩張貼圖如下:
9、把DOOR_LOW.OBJ合并到DOOR_HIGH.OBJ的場(chǎng)景中坤次,在低模的材質(zhì)賦予材質(zhì),并在法線(xiàn)通道載入烘焙的法線(xiàn)貼圖斥赋。渲染看看缰猴,喲!不錯(cuò)啊疤剑。
10滑绒、可以增強(qiáng)光影效果,在漫射通道添加環(huán)境吸收貼圖隘膘,調(diào)整混合強(qiáng)度疑故,否則邊角接縫處,太暗弯菊。
11纵势、下載,分別在兩個(gè)模型材質(zhì)的顏色通道管钳,載入之钦铁。
12、渲染才漆。你能分辨嗎牛曹?
這種方式,常用在三維游戲中醇滥,增加模型表面細(xì)節(jié)黎比,同時(shí)不增加面數(shù)超营,而欺騙眼球的一種魔術(shù)方法。
補(bǔ)充:
有朋友跟我說(shuō):C4D的烘焙紋理標(biāo)簽也能從高模向低模烘焙紋理阅虫,為什么不講呢演闭?
這是因?yàn)镃4D本身的紋理烘焙在烘焙法線(xiàn)貼圖的功能上比不過(guò)xNomal (人家不僅功能強(qiáng)大,還是免費(fèi))书妻。
C4D烘焙法線(xiàn)貼圖要求高模和低模UV應(yīng)該是一致的船响。不少人烘焙出來(lái)的法線(xiàn)貼圖不對(duì),就是因?yàn)镃4D有這一條的限制躲履。它是高對(duì)低在UV統(tǒng)一下的“一對(duì)一”的映射见间,所以法線(xiàn)不一致,導(dǎo)致錯(cuò)誤工猜。你想米诉,如果你從事高模制作,你注重的是模型細(xì)節(jié)篷帅,哪管UV笆仿隆!xNomal就是這樣好魏身,它在烘焙法線(xiàn)貼圖的時(shí)候惊橱,不管高模的UV,你只要把低模的UV分好就行箭昵。歸根結(jié)底税朴,還是算法上x(chóng)Nomal有優(yōu)勢(shì),這也是小軟件能存活的原因:好用家制,管用正林。
Ⅱ、從圖片轉(zhuǎn)化而來(lái)
第一種方法:專(zhuān)用軟件轉(zhuǎn)化
我在《一張貼圖搞定》中詳細(xì)介紹過(guò)該軟件使用方法颤殴,著重談了如何把一張貼圖轉(zhuǎn)化為法線(xiàn)貼圖觅廓。實(shí)際上這種軟件太多了,如Substance Bitmap2Material 涵但、Knald杈绸、xNormal。
1贤笆、原圖片
2蝇棉、用CRAZYBUMP進(jìn)行轉(zhuǎn)換
3、轉(zhuǎn)化保存為法線(xiàn)貼圖芥永。
4篡殷、在C4D中載入生成的法線(xiàn)貼圖。
5埋涧、使用克隆制作一片地磚板辽,光影效果還是說(shuō)得過(guò)去奇瘦。
第二種方法:用C4D把圖片轉(zhuǎn)為法線(xiàn)貼圖
C4D在法線(xiàn)通道內(nèi)不能直接使用上述彩色圖片,必須通過(guò)一個(gè)特殊功能的Shade進(jìn)行轉(zhuǎn)化劲弦,功能比上述專(zhuān)業(yè)轉(zhuǎn)化軟件差一些耳标,要求不高可以用。
1邑跪、在顏色和法線(xiàn)通道載入原圖次坡。
2、再添加紋理---效果--法線(xiàn)生成SHADE画畅。
3砸琅、點(diǎn)擊進(jìn)入“法線(xiàn)生成”進(jìn)行設(shè)置。加大強(qiáng)度等設(shè)置轴踱。
4症脂、渲染也湊合。
Ⅲ淫僻、 繪制方法
第一種是C4D繪制法線(xiàn)貼圖方法
C4D的BP 3D PAINT能否繪制法線(xiàn)貼圖呢诱篷?我認(rèn)為不太可能,因?yàn)榉ň€(xiàn)貼圖的RGB表示的是數(shù)據(jù),記錄的是每個(gè)點(diǎn)的法線(xiàn)矢量,我們?nèi)绾沃朗裁搭伾硎裁锤叨饶乩奚叮颗c凹凸貼圖完全不同。
1橙凳、而這個(gè)BP 3D paint,的確有法線(xiàn)設(shè)置笑撞。
2、 我個(gè)人認(rèn)為钓觉,它不是用來(lái)讓你繪制的茴肥,而是讓你載入一個(gè)烘焙完成的法線(xiàn)貼圖,用來(lái)輔助繪制紋理的荡灾。
(這種方法瓤狐,在SUBSTANCE PAINTER中常用。有了法線(xiàn)貼圖墊底批幌,你一筆畫(huà)下去础锐,不僅有顏色,凹凸也出來(lái)了荧缘。這個(gè)效果就是法線(xiàn)貼圖在后邊做得貢獻(xiàn)皆警。)
3、如果我們不載入現(xiàn)有的法線(xiàn)貼圖截粗,而是繪制一個(gè)信姓,我們看看鸵隧。
4、 隨便繪制一些圖案意推。
5豆瘫、球體上并沒(méi)有顯示什么,渲染也沒(méi)有什么菊值。
6外驱、我們看材質(zhì),法線(xiàn)通道的確載入這個(gè)新繪制的紋理腻窒,似乎沒(méi)有效果昵宇。
7、通過(guò)上邊所講定页,我們知道如何把一張圖片在C4D轉(zhuǎn)化為法線(xiàn)貼圖趟薄。
具體做法是:為這個(gè)新繪制的紋理,再添加一個(gè)紋理---效果--法線(xiàn)生成SHADE典徊。
8杭煎、 轉(zhuǎn)到BP 3D PAINT界面 并沒(méi)有什么顯示,但是卒落,當(dāng)你按SHIFT+R 或者 CTRL+R 渲染時(shí)羡铲,效果出現(xiàn)了。
總之儡毕,我個(gè)人認(rèn)為:在C4D中如果要繪制凹凸效果也切,最好還是使用凹凸貼圖,實(shí)時(shí)而且可控腰湾。(凹凸貼圖和法線(xiàn)貼圖記錄法線(xiàn)方式不一樣雷恃,渲染計(jì)算不一樣,在C4D內(nèi)费坊,對(duì)于普通渲染計(jì)算倒槐,個(gè)人認(rèn)為沒(méi)有什么太大區(qū)別。)
第二種是NDO插件繪制
Ndo是QUIXEL SUITE的一個(gè)功能模塊附井,原來(lái)是獨(dú)立的PS一個(gè)插件讨越,專(zhuān)門(mén)用來(lái)繪制法線(xiàn)貼圖的,功能十分強(qiáng)大和好用永毅。下面我簡(jiǎn)單地展示一下它的用法把跨。
1、在C4D建立一個(gè)立方體(門(mén))沼死,尺寸:90着逐、210、3CM。
2滨嘱、展開(kāi)它的UV
3峰鄙、烘焙它的法線(xiàn)貼圖,添加烘焙紋理標(biāo)簽太雨,設(shè)置如下:
4吟榴、第二頁(yè)設(shè)置如下:(不需要高模)
5、啟動(dòng)該軟件囊扳。它自動(dòng)打開(kāi)PHOTOSHOP吩翻,畢竟它是NDO的宿主啊锥咸!
這個(gè)軟件支持PBR物理貼圖繪制的狭瞎。
6、工具條非常小搏予。N是NDO繪制法線(xiàn)熊锭;D是DDO繪制紋理;3是3DO三維觀察窗口
7雪侥、點(diǎn)擊NDO碗殷,出現(xiàn)下面窗口,讓你建立一個(gè)項(xiàng)目速缨。
8锌妻、點(diǎn)擊它創(chuàng)建項(xiàng)目,又打開(kāi)一個(gè)窗口旬牲。載入C4D創(chuàng)建的模型和法線(xiàn)貼圖仿粹,點(diǎn)擊下面建立項(xiàng)目。
9原茅、點(diǎn)擊圖板上的轉(zhuǎn)化吭历,把法線(xiàn)貼圖轉(zhuǎn)化一下。經(jīng)過(guò)一陣運(yùn)算后擂橘,項(xiàng)目建立好了毒涧。
再點(diǎn)擊圖標(biāo)3,打開(kāi)三維顯示贝室,看到了這個(gè)門(mén)的模型。
10仿吞、注意:NDO能把選擇區(qū)滑频、鋼筆繪制圖案、外載入圖片等轉(zhuǎn)化為法線(xiàn)貼圖唤冈,厲害吧峡迷!
下面,新建一個(gè)圖層,我們用選擇工具畫(huà)一個(gè)下面的螞蟻線(xiàn)绘搞。(按SHIFT鍵矩形加圓形)
11彤避、NDO面板自動(dòng)識(shí)別,選取轉(zhuǎn)化法線(xiàn)夯辖,在中間點(diǎn)擊它琉预。
12、經(jīng)過(guò)一陣運(yùn)算蒿褂,生成法線(xiàn)貼圖圆米。在3DO窗口看看。
13啄栓、NDO生成法線(xiàn)貼圖以后娄帖,轉(zhuǎn)換成新的面板,讓你調(diào)試更改昙楚。比如是凹還是凸等近速,以后再細(xì)談吧。
14堪旧、用圓角矩形工具繪制削葱,點(diǎn)擊轉(zhuǎn)化按鈕。
15崎场、SLANT選擇凹下佩耳,CURVE選擇曲線(xiàn)。
16谭跨、再?gòu)耐廨d入一個(gè)圖片文件干厚,清除外邊,保留圓形部分螃宙,點(diǎn)擊轉(zhuǎn)化蛮瞄。
17、在繪制一個(gè)矩形選取谆扎,填充漸變挂捅,然后向下一次復(fù)制。點(diǎn)擊轉(zhuǎn)化堂湖。
18闲先、打開(kāi)3DO看看效果。然后无蜂,點(diǎn)擊PS 文件導(dǎo)出NORMAL.PSD輸出貼圖文件伺糠。
19、在C4D中斥季,建立一個(gè)材質(zhì)训桶,在材質(zhì)的法線(xiàn)通道載入這個(gè)法線(xiàn)貼圖文件累驮。
20、在材質(zhì)顏色通道載入一張木紋紋理舵揭。渲染一下谤专,效果還可以。
(如果你認(rèn)為不太好午绳,不是軟件的事情置侍,是我的技術(shù)太差,做得匆忙的原因)
【后記】
? ? ? 每次不忙的時(shí)候箱叁,就用電腦趕緊打開(kāi)三倆個(gè)軟件墅垮,然后截圖,編寫(xiě)耕漱,保存算色。有事的時(shí)候,就又忙別的去了螟够,所以每次編寫(xiě)的時(shí)候灾梦,都十分匆忙,錯(cuò)字不少妓笙。退休就好了若河,心靜不下來(lái)啊寞宫!
【感悟】
? ? ? ? 每一個(gè)熱愛(ài)CG的人萧福,剛剛?cè)腴T(mén)的時(shí)候,就是憑著有一股熱情辈赋,義無(wú)反顧地堅(jiān)持學(xué)習(xí)鲫忍。其實(shí),在自學(xué)的時(shí)候钥屈,幾乎都是一邊學(xué)習(xí)軟件的悟民,一邊學(xué)習(xí)涉及的相關(guān)理論知識(shí)。比如當(dāng)時(shí)學(xué)習(xí)法線(xiàn)貼圖和凹凸貼圖的時(shí)候篷就,總是不懂射亏,為什么要用它們,在模型制作的時(shí)候竭业,多加一些面智润,制作出細(xì)節(jié)不就可以了嗎?后來(lái)未辆,看了很多書(shū)做鹰,詢(xún)問(wèn)很多人,都沒(méi)有解釋?zhuān)±锖烤瓦@么使用了2年鼎姐,后來(lái)涉及游戲領(lǐng)域,才明白這是為了節(jié)約計(jì)算資源,即保證顯示效果炕桨,又要提高渲染速度而想出來(lái)的一個(gè)解決辦法而已饭尝。后來(lái)又想既然法線(xiàn)貼圖和凹凸貼圖效果如此相似,為什么要有兩個(gè)跋坠钥平?慢慢學(xué)才知道原來(lái)它們都是記錄模型表面法線(xiàn)方向的,只是不同的記錄算法姊途。但為什么在游戲引擎中一般都支持法線(xiàn)貼圖涉瘾?這是因?yàn)榉ň€(xiàn)貼圖在使用的時(shí)候,比凹凸貼圖效率更高捷兰,占用內(nèi)存小立叛,而且解算得更快,(這個(gè)以后有機(jī)會(huì)再詳談)所以贡茅,如果渲染靜幀圖片的時(shí)候秘蛇,用法線(xiàn)和凹凸貼圖,哪個(gè)都無(wú)所謂顶考。如果在游戲中赁还,強(qiáng)調(diào)的是渲染速度,要求對(duì)項(xiàng)目進(jìn)行徹底的優(yōu)化驹沿,當(dāng)然選擇效率更高的法線(xiàn)貼圖了艘策。
? ? ? ?隨著你深入學(xué)習(xí),你的問(wèn)題應(yīng)該越來(lái)越多渊季,推動(dòng)你不斷地走向深入朋蔫。當(dāng)然,興趣是源動(dòng)力梭域。否則斑举,你會(huì)停留在會(huì)用就行了的層次上。是不是這個(gè)道理呢病涨?