手把手教你如何美化你的Unity3D貼圖_第1頁
手把手教你如何美化你的Unity3D貼圖_第2頁
手把手教你如何美化你的Unity3D貼圖_第3頁
手把手教你如何美化你的Unity3D貼圖_第4頁
手把手教你如何美化你的Unity3D貼圖_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

手把手教你如何美化你的Unity3D貼圖good我們都知道,一個三維場景的畫面的好壞,百分之四十取決于模型,百分之六十取決于貼圖,可見貼圖在畫面中所占的重要性。在這里我將列舉一些貼圖,并且初步闡述其概念,理解原理的基礎(chǔ)上制作貼圖,也就順手多了。

我在這里主要列舉幾種UNITY3D中常用的貼圖,與大家分享,希望對大家有幫助。

01

首先不得不說的是漫反射貼圖:

漫反射貼圖diffusemap

漫反射貼圖在游戲中表現(xiàn)出物體表面的反射和表面顏色。換句話說,它可以表現(xiàn)出物體被光照射到而顯出的顏色和強度。我們通過顏色和明暗來繪制一幅漫反射貼圖,在這張貼圖中,墻的磚縫中因為吸收了比較多的光線,所以比較暗,而墻磚的表面因為反射比較強,所以吸收的光線比較少。上面的這張圖可以看出磚塊本身是灰色的,而磚塊之間的裂縫幾乎是黑色的。

刨去那些雜糅的東西,我們只談明顯的,漫反射貼圖表現(xiàn)了什么?列舉一下,物體的固有色以及紋理,貼圖上的光影。前面的固有色和紋理我們很容易理解,至于后面的光影,我們再繪制漫反射貼圖的時候需要區(qū)別對待,比如我們做一堵墻,每一塊磚都是用模型做出來的,那么我們就沒有必要繪制磚縫,因為這個可以通過打燈光來實現(xiàn)??墒俏覀?nèi)绻媚P椭蛔隽艘幻鎵Γ厦娴拇u塊是用貼圖來實現(xiàn),那么就得繪制出磚縫了。從美術(shù)的角度,磚縫出了事一條單獨的材質(zhì)帶外,還有就是磚縫也是承接投影的,所以在漫反射圖上,繪制出投影也是很有必要的,如下圖:

沒有什么物體能夠反射出跟照到它身上相同強度的光。因此,讓你的漫反射貼圖暗一些是一個不錯的想法。通常,光滑的面只有很少的光會散射,所以你的漫反射貼圖可以亮一些。

漫反射貼圖應(yīng)用到材質(zhì)中去是直接通過DiffuseMap的。再命名規(guī)范上它通常是再文件的末尾加上“_d”來標(biāo)記它是漫反射貼圖。

凹凸貼圖Bumpmaps

凸凹貼圖可以給貼圖增加立體感。它其實并不能改變模型的形狀,而是通過影響模型表面的影子來達(dá)到凸凹效果的。再游戲中有兩種不同類型的凸凹貼圖,法線貼圖(normalmap)和高度貼圖(highmap)。

Normalmaps法線貼圖

法線貼圖定義了一個表面的傾斜度或者法線。換一種說法,他們改變了我們所看到的表面的傾斜度。

法線貼圖把空間坐標(biāo)的參數(shù)(X,Y,Z)記錄在像素中(R,G,B),上面的范例圖就是這個意思。

有兩種制作法線貼圖的方法:

1.從三維的模型渲染出一張法線貼圖(用高模跟低模重疊在一起,把高模上的細(xì)節(jié)烘焙到低模的UV上,這里需要低模有一個不能重疊的UV)

2.轉(zhuǎn)換一張高度貼圖成為一個法線貼圖。(是用NVIDIA的PS插件來轉(zhuǎn)換一張圖成為法線貼圖)

Heightmaps高度貼圖

什么是HeightMap呢?所謂高度圖實際上就是一個2D數(shù)組。創(chuàng)建地形為什么需要高度圖呢?可以這樣考慮,地形實際上就是一系列高度不同的網(wǎng)格而已,這樣數(shù)組中每個元素的索引值剛好可以用來定位不同的網(wǎng)格(x,y),而所儲存的值就是網(wǎng)格的高度(z)。

我們在這里敘述高度圖,其實也是為了更好的繪制法線貼圖,很多情況下我們的法線貼圖只能在已有的漫反射貼圖作為素材進行繪制,這樣就是需要由一個HeightMap轉(zhuǎn)換成法線貼圖的一個過程,明白了這個原理,做起來也就可以更好的駕馭其效果。

高度貼圖是一種黑白的圖像,它通過像素來定義模型表面的高度。越亮的地方它的高度就越高,畫面越白的地方越高,越黑的地方越低,灰色的在中間,從而表現(xiàn)不同的地形。

當(dāng)然在UNITY中也是有HightMap出現(xiàn)的,比如在Terrain菜單中,就有導(dǎo)入和導(dǎo)出HightMap的命令。

高度貼圖通常是在圖形處理軟件中繪制的。他們通常沒有必要渲染這些,再DOOM3游戲中高度貼圖是被轉(zhuǎn)換成法線貼圖來使用的。使用高度貼圖僅僅是為了適應(yīng)簡單的工作流程。高度貼圖通常通過“Heightmap”函數(shù)來調(diào)用到3D軟件中去的,我們通常再文件名后面加一個"_h"來標(biāo)示它。

Normalmapsvs.heightmaps

法線貼圖和高度貼圖一般來說,NormalMap來自于HeightMap。具體生成的方法如下:把HeightMap的每個像素和它上面的一個像素相減,得到一個高度差,作為該點法線的x值;把HeightMap的每個像素和它右邊的一個像素相減,得到一個高度差,作為該點法線的y值;取1作為該點法線的z值。推導(dǎo)過程如下:x方向,每個像素和它下面的一個像素相減,得到向量<1,0,hb-ha>,其中ha是該像素的高度值,hb是下一行的高度值;y方向,每個像素和它左邊的一個像素相減,得到向量<0,1,hc-ha>,其中ha是該像素的高度值,hb是左一列的高度值;兩個向量Cross,得到簡單來說,就是取兩個方向的切線向量,對它們做Cross得到該點的法線向量。

還有另外一種做法,是根據(jù)每個象素四邊的點計算,而該點象素本身不參與計算。沒有試過,不知道哪種好一些。而且我覺得這種計算只適合于單塊的HeightMap、NormalMap,像是DOOM3中的NormalMap就無法由HeightMap計算出來了。所以最好還是在美工建模的時候同時生成NormalMap和HeightMap而不是利用HeightMap生成NormalMap。

DOOM3游戲引擎可以把法線貼圖和高度貼圖合成在一張凸凹貼圖上。

通常我們繪制一張具有足夠細(xì)節(jié)的高度貼圖要比建立一個足夠細(xì)節(jié)的模型然后渲染成相應(yīng)的法線貼圖要實際的多。

法線和高度的凸凹貼圖可以通過Addnormals函數(shù)來合并到一種材質(zhì)中。

毫無疑問,高度貼圖大多數(shù)游戲引擎中出現(xiàn)的不多。他們只是給電腦一種方法來計算曲面法線當(dāng)使用動態(tài)燈光的時候。

這說明實際上,一張高度貼圖被轉(zhuǎn)換成一張法線貼圖,以此可以計算出相鄰兩塊不同高度的位置之間的傾斜面。高度貼圖永遠(yuǎn)不能像法線貼圖這樣具有足夠的細(xì)節(jié),這是被肯定的。

很明顯只有灰度的高度貼圖并不能很好的表現(xiàn)應(yīng)該有的細(xì)節(jié),因為它是黑白的,RGB顏色就會遭到浪費,并且因此你只能只用256層級的強度。

相比較來言法線貼圖的每一個圖像通道都可以利用到,顯而易見,法線貼圖能夠更好的來表現(xiàn)凸凹。

Specularmaps高光貼圖

什么是高光貼圖?

高光貼圖是用來表現(xiàn)當(dāng)光線照射到模型表面時,其表面屬性的.(如金屬和皮膚、布、塑料反射不同量的光)從而區(qū)分不同材質(zhì).

高光貼圖再引擎中表現(xiàn)鏡面反射和物體表面的高光顏色。

材質(zhì)的反光程度就越強。(強弱度度是指,如果將這張Specularmap去色成為黑白圖,圖上越偏向RGB0,0,0,的部分高光越弱,越偏向RGB255,255,255的部分高光越強.)

我們建立高光貼圖的時候,我們使用solidvalue來表現(xiàn)普通表面的反射,而暗的地方則會給人一種侵蝕風(fēng)化的反射效果。(你頭腦中要有很清晰的物件不同材質(zhì)之間高光強弱的關(guān)系:高光最強的是那個部分,最弱的是那個部分,處在中間級別的是哪些部分.一般來說:金屬的高光>塑料>木頭>皮膚>不料,但是這個只是一個大致的分類,不要把它作為高光的指導(dǎo).有時,你處理的物件可能是如上圖一樣,絕大部分都是同一類型材質(zhì)的,比如布料,這時你也要小心的去分辨不同材料之間的高光強度的區(qū)別.切記,在這個階段一定要保持清晰的頭腦,不要急著去添加那些細(xì)節(jié).在大的強弱關(guān)系還沒有決定之前,就去添加那些細(xì)節(jié)會影響你的判斷,而最后得到一張層次不清晰很“花”的高光.很多時候,我們?nèi)菀追哆@樣的毛病,就是將物件的高光處理的太過單一.)

上面的貼圖有個問題,磚的表面與磚縫相比將會有比較少的反光,但是磚縫的位置其實應(yīng)該幾乎是沒有反光的。(確定好整體高光的強弱之后,就開始在高光上疊加細(xì)節(jié):比如金屬劃痕,金屬倒角高光,銹漬周圍的裸金屬亮點,油漬,灰塵等.這時,你會發(fā)現(xiàn),如果你在Diffusemap的繪制過程中,保留了紋理,劃痕或以上提到過的細(xì)節(jié)的圖層,你只需要將Diffusemap中的相應(yīng)圖層拖曳到Specularmap中,然后根據(jù)這些細(xì)節(jié)應(yīng)該反映出來的高光強度調(diào)節(jié)就可以了.So,良好的圖層管理習(xí)慣是非常必要的.)

顏色再高光貼圖中將會用來定義高光的顏色,組成磚的材料應(yīng)該是一些沙子,他們將會反射出一些微笑的具有質(zhì)感的光,這些在上面的例子中已經(jīng)展示了出來。(為了豐富高光貼圖,我們有很多方法:做局部高光的細(xì)微變化,添加紋理(這個紋理要和材質(zhì)本身的紋理區(qū)分開),疊加彩色圖層(謹(jǐn)慎用))

高光貼圖是通過Specularmap函數(shù)調(diào)用到引擎中的,通常我們再貼圖的后面加一個"_s"來區(qū)別它。

凸凹貼圖可以通過高光貼圖來改進成相當(dāng)漂亮的貼圖。(要記住的是,單單憑借高光貼圖是無法充分的表現(xiàn)材質(zhì)特性的,只有Didffuse,Normal,和Specular三張配合才能充分的表現(xiàn)材質(zhì)特性.)

在UNITY中,高光貼圖通常放在漫反射貼圖的透明通道里,我們是用相關(guān)的SHANDER就可以達(dá)到高光的效果。

AO貼圖

AmbientOcclusiont簡稱AO貼圖,中文一般叫做環(huán)境阻塞貼圖。是一種目前次時代游戲中常用的貼圖技術(shù),很多朋友將其與全局光烘焙貼圖混淆,其實二者本質(zhì)是完全不同的。

首先,我們從簡單的AO貼圖的算法來講:

AO貼圖的計算是不受任何光線影響的,僅僅計算物體間的距離,并根據(jù)距離產(chǎn)生一個8位的通道。如下圖所示,計算球形物體的AO貼圖的時候,程序使每個像素,根據(jù)物體的法線,發(fā)射出一條光,這個光碰觸到物體的時候,就會產(chǎn)生反饋,比如球右下方的一些像素鎖發(fā)射的光,碰觸到了旁邊的政法提,產(chǎn)生反饋,標(biāo)記這里附近有物體,就呈現(xiàn)黑色。、

而球上方的像素所發(fā)射的光,沒有碰觸到任何物體,因此標(biāo)記為白色。

簡單了解算法后,大家就明白,全局光的烘焙師模擬GI(全局光)所呈現(xiàn)的陰影效果,而AO貼圖時模擬模型的各個面之間的距離。二者性質(zhì)是完全不一樣的。

我舉例簡單對比AO貼圖和GI陰影貼圖的區(qū)別。

根據(jù)這個低模,右邊計算出的AO貼圖的黑白關(guān)系,是根據(jù)物體模型距離產(chǎn)生的,不存在任何光源效果的影響,邊緣部分等比較密集的結(jié)構(gòu),正確的產(chǎn)生了深色,強化了模型結(jié)構(gòu),在游戲引擎中,與其他通道貼圖混合,可以提升游戲的效果。

右邊的是全局光烘焙貼圖的效果,是用MAX的天光計算結(jié)果進行烘焙,其陰影效果是模擬自然光線下的模型光影關(guān)系,在有結(jié)構(gòu)接近的區(qū)域(比如褲袋、袖口)由于GI得光線跟蹤計算會使其弱化,符合自然界光線效果,但是不是游戲所需要的效果。

在unity中,我們有兩個地方可以調(diào)整AO,一個是在光照貼圖渲染器中,有一個調(diào)整AO的參數(shù),這個是確實渲染了一層AO。還有一個就是通過攝影機特效,有一個屏幕空間環(huán)境阻塞的特效screenspeaceambientocclusion(SSAO).這兩個都可以實現(xiàn)部分的AO效果,有興趣的朋友可以自己嘗試一下。

CUBEMAP

Cubemap技術(shù)說到底就是用一個虛擬的立方體(cube)包圍住物體,眼睛到物體某處的向量eyevec經(jīng)過反射(以該處的法線為對稱軸),反射向量reflectvec射到立方體上,就在該立方體上獲得一個紋素了(見下圖)。明顯,我們需要一個類似天空盒般的6張紋理貼在這個虛擬的立方體上。按CUBEMAPPING原意,就是一種enviromentmap,因此把周圍場景渲染到這6張紋理里是“正統(tǒng)”的。也就是每次渲染時,都作一次離線渲染,分別在每個矩形中心放置相機“拍下”場景,用FBO渲染到紋理,然后把這張紋理作為一個cubemap對象的六紋理之一。這樣即使是動態(tài)之物也能被映射到物體表面了(雖然缺點是不能映射物體自身的任何部分)。

CUBEMAP的制作方法:

/content.php?action=tutorial&name=cubemaps

unity3d的官網(wǎng)上有一段代碼,叫做Camera.RenderToCubemap

講的是怎樣把我們的場景烘焙成cubemap,里面附有代碼,有興趣的可以在SCRIPT幫助文件中搜索我上一行提到的關(guān)鍵詞。

LIGHTMAP

什么是烘焙?簡單地說,就是把物體光照的明暗信息保存到紋理上,實時繪制時不再進行光照計算,而是采用預(yù)先生成的光照紋理(lightmap)來表示明暗效果.那么,這樣有什么意義呢?

好處:

由于省去了光照計算,可以提高繪制速度

對于一些過度復(fù)雜的光照(如光線追蹤,輻射度,AO等算法),實時計算不太現(xiàn)實.如果預(yù)先計算好保存到紋理上,這樣無疑可以大大提高模型的光影效果

保存下來的lightmap還可以進行二次處理,如做一下模糊,讓陰影邊緣更加柔和

當(dāng)然,缺點也是有的:

模型額外多了一層紋理,這樣相當(dāng)于增加了資源的管理成本(異步裝載,版本控制,文件體積等).當(dāng)然,也可以選擇把明暗信息寫回原紋理,但這樣限制比較多,如紋理坐標(biāo)范圍,物體實例個數(shù)...

模型需要隔外一層可以展開到一張紋理平面的UV(范圍只能是[0,1],不能重合).如果原模型本身就是這樣,可以結(jié)省掉.但對于大多數(shù)模型來說,可能會采用WRAP/MIRROR尋址,這只能再做一層,再說不能強制每個模型只用一張紋理吧?所以,lightmap的UV需要美術(shù)多做一層,程序展開算法這里不提及....

靜態(tài)的光影效果與對動態(tài)的光影沒法很好的結(jié)合.如果光照方向改變了的話,靜態(tài)光影效果是無法進行變換的.而且對于靜態(tài)的陰影,沒法直接影響到動態(tài)的模型.這一點,反而影響了真實度

肯定不只這幾點,但我暫時只想到這幾點

那么怎么生成lightmap呢?

最直接的辦法:光線追蹤....(原理想想很簡單,按照物體定律來就可以了)

但是光線追蹤這東西......就算用來離線生成我都嫌慢-_-

下面說的這個是利用GPU進行計算的,跟實時光照沒什么兩樣:

原理:

想想實時渲染的頂點變換流程:pos*WVP之后,頂點坐標(biāo)就變換到屏幕空間了[-1,1]

如果VertexShader里直接把紋理坐標(biāo)做為變換結(jié)果輸出(注意從[0,1]變換到[-1,1]),那么相當(dāng)于直接變換到了紋理坐標(biāo)系,這時在PixelShader里還是像原來那樣計算光照,輸出的結(jié)果就可以拿來做lightmap了

靜態(tài)模型的Lightmap(光照貼圖)與Vertex-Lighting(頂點光照)之比較

通常有個誤解就是,Vertex-Lighting是一種不費的靜態(tài)模型打光手段,因此應(yīng)該被作為提升地圖運行效率和減少文件尺寸的手段。這種觀點,在這兩方面其實都有問題Lightmap使用平展開的一套UV,如同普通皮膚貼圖所需的。Lightmap的貼圖大小可以靈活設(shè)置,比如64x64。這種方式提供了每像素的光照數(shù)據(jù)Vertex-Lighting使用的數(shù)據(jù)結(jié)構(gòu),包含每個頂點所受光照的亮度和色彩信息。

該數(shù)據(jù)結(jié)構(gòu)消耗特定量的內(nèi)存,這個量是由模型的頂點數(shù)量決定的,不能隨意改變在多數(shù)情況下,靜態(tài)模型應(yīng)該設(shè)成使用Lightmap,因為這可以產(chǎn)生最好的視覺效果,最好的運行效率,而且比Vertex-Lighting消耗更少的內(nèi)存Lightmap和Vertex-Lighting相比較,具有如下優(yōu)點:-Lightmap可以減少CPU和GPU的占用-Lightmap讓CPU需要計算的光照和物體間的互動更少-Lightmap不需要在GPU的多重pass中被渲染-Lightmappass被整合進Emissive(自發(fā)光)pass中,因此可以縮短渲染時間-Lightmap可以表現(xiàn)交錯覆蓋于靜態(tài)模型三角面上的復(fù)雜的每像素光照,然而Vertex-Lighting只能表現(xiàn)頂點到頂點之間線形的漸變-使用Lightmap的靜態(tài)模型,可以通過優(yōu)化使用更少的三角形,獲得額外的效率提升。

為使用Vertex-Lighting而制作的模型,通常需要較高的細(xì)分度,獲得更多的頂點來改善頂點之間的光照過渡,然而這種做法的副作用是提升了模型的三角形數(shù)量并影響運行效率-靜態(tài)模型上的Lightmap可以設(shè)置為使用很小的分辨率,比如16x16或32x32,來減少內(nèi)存開支。這對于遠(yuǎn)離游戲中心區(qū)域的靜態(tài)模型來說,非常有用,這同樣也適合受光很均勻的模型。

Vertex-Lighting就不具有這種優(yōu)化的便利,它總是消耗同樣數(shù)量的內(nèi)存來存放模型全部頂點的數(shù)據(jù)結(jié)構(gòu)-Lightmap可以通過調(diào)整UV的布局,來進行優(yōu)化以提供盡可能好的光照質(zhì)量。比如,有一個球形巖石,可以將它的底部的三角形的UV尺寸做得很小,從而讓這部分在整個Lightmap的UV上面只占據(jù)很小一塊,這樣,對于頂部和側(cè)面來說,就獲得了更大的貼圖面積于是有更精細(xì)的光照效果。Vertex-Lighting的精度總是對應(yīng)于頂點數(shù),而效果又受模型實際大小的影響(就是說縮小了看還可以的模型,放大比如一百倍,由于頂點不能改變,所以效果也變糙一百倍,而Lightmap因為可以靈活設(shè)置精度不存在這個問題),并且不能被優(yōu)化如果靜態(tài)模型的三角形和頂點數(shù)量很少的話,那使用Vertex-Lighting可能會比使用Lightmap占用更少的內(nèi)存,然而,使用Lightmap絕對是看起來更好的,效率也更高的。

使用Lightmap讓LD可以優(yōu)化光照的質(zhì)量和內(nèi)存的占用所以Lightmap顯然是比Vertex-Lighting更好的選擇舉個例子:比如使用UT3這游戲的靜態(tài)模型HU_Deco_Pipes.SM.Mesh.S_HU_Deco_Pipes_SM_Pipe01該模型有2555個三角形和2393個頂點如果在場景中放置此模型的420個實例,并且都使用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論