游戲貼圖的基本概念

我們都知道,一個(gè)三維場(chǎng)景的畫(huà)面的好壞蜡镶,百分之四十取決于模型雾袱,百分之六十取決于貼圖,可見(jiàn)貼圖在畫(huà)面中所占的重要性官还。在這里我將列舉一些貼圖芹橡,并且初步闡述其概念,理解原理的基礎(chǔ)上制作貼圖妻枕,也就順手多了僻族。
我在這里主要列舉幾種UNITY3D中常用的貼圖,與大家分享屡谐,希望對(duì)大家有幫助述么。
01

Paste_Image.png

首先不得不說(shuō)的是漫反射貼圖:
漫反射貼圖diffuse map

Paste_Image.png

漫反射貼圖在游戲中表現(xiàn)出物體表面的反射和表面顏色。換句話說(shuō)愕掏,它可以表現(xiàn)出物體被光照射到而顯出的顏色和強(qiáng)度度秘。我們通過(guò)顏色和明暗來(lái)繪制一幅漫反射貼圖,在這張貼圖中饵撑,墻的磚縫中因?yàn)槲樟吮容^多的光線剑梳,所以比較暗,而墻磚的表面因?yàn)榉瓷浔容^強(qiáng)滑潘,所以吸收的光線比較少垢乙。上面的這張圖可以看出磚塊本身是灰色的,而磚塊之間的裂縫幾乎是黑色的语卤。

刨去那些雜糅的東西追逮,我們只談明顯的酪刀,漫反射貼圖表現(xiàn)了什么? 列舉一下钮孵,物體的固有色以及紋理骂倘,貼圖上的光影。前面的固有色和紋理我們很容易理解巴席,至于后面的光影历涝,我們?cè)倮L制漫反射貼圖的時(shí)候需要區(qū)別對(duì)待,比如我們做一堵墻漾唉,每一塊磚都是用模型做出來(lái)的荧库,那么我們就沒(méi)有必要繪制磚縫,因?yàn)檫@個(gè)可以通過(guò)打燈光來(lái)實(shí)現(xiàn)毡证〉绲可是我們?nèi)绻媚P椭蛔隽艘幻鎵Γ厦娴拇u塊是用貼圖來(lái)實(shí)現(xiàn)料睛,那么就得繪制出磚縫了丐箩。從美術(shù)的角度,磚縫出了事一條單獨(dú)的材質(zhì)帶外恤煞,還有就是磚縫也是承接投影的屎勘,所以在漫反射圖上,繪制出投影也是很有必要的居扒,如下圖:

Paste_Image.png

沒(méi)有什么物體能夠反射出跟照到它身上相同強(qiáng)度的光概漱。因此,讓你的漫反射貼圖暗一些是一個(gè)不錯(cuò)的想法喜喂。通常瓤摧,光滑的面只有很少的光會(huì)散射,所以你的漫反射貼圖可以亮一些玉吁。

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

Paste_Image.png

凹凸貼圖Bump maps
凸凹貼圖可以給貼圖增加立體感进副。它其實(shí)并不能改變模型的形狀这揣,而是通過(guò)影響模型表面的影子來(lái)達(dá)到凸凹效果的。再游戲中有兩種不同類(lèi)型的凸凹貼圖影斑,法線貼圖(normalmap)和高度貼圖(highmap)给赞。

Normal maps法線貼圖

Paste_Image.png

法線貼圖定義了一個(gè)表面的傾斜度或者法線。換一種說(shuō)法矫户,他們改變了我們所看到的表面的傾斜度片迅。

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

Paste_Image.png

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

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

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

Height maps高度貼圖

Paste_Image.png

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

我們?cè)谶@里敘述高度圖娇豫,其實(shí)也是為了更好的繪制法線貼圖匙姜,很多情況下我們的法線貼圖只能在已有的漫反射貼圖作為素材進(jìn)行繪制,這樣就是需要由一個(gè)HeightMap轉(zhuǎn)換成法線貼圖的一個(gè)過(guò)程冯痢,明白了這個(gè)原理氮昧,做起來(lái)也就可以更好的駕馭其效果。

高度貼圖是一種黑白的圖像浦楣,它通過(guò)像素來(lái)定義模型表面的高度袖肥。越亮的地方它的高度就越高,畫(huà)面越白的地方越高振劳,越黑的地方越低椎组,灰色的在中間,從而表現(xiàn)不同的地形历恐。

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

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

Normal maps vs. height maps

法線貼圖和高度貼圖
一般來(lái)說(shuō)氛什,Normal Map來(lái)自于Height Map。具體生成的方法如下:
把Height Map的每個(gè)像素和它上面的一個(gè)像素相減匪凉,得到一個(gè)高度差枪眉,作為該點(diǎn)法線的x值;
把Height Map的每個(gè)像素和它右邊的一個(gè)像素相減再层,得到一個(gè)高度差贸铜,作為該點(diǎn)法線的y值堡纬;
取1作為該點(diǎn)法線的z值。

推導(dǎo)過(guò)程如下:
x方向蒿秦,每個(gè)像素和它下面的一個(gè)像素相減烤镐,得到向量<1, 0, hb - ha>,其中ha是該像素的高度值棍鳖,hb是下一行的高度值炮叶;
y方向,每個(gè)像素和它左邊的一個(gè)像素相減渡处,得到向量<0, 1, hc - ha>镜悉,其中ha是該像素的高度值,hb是左一列的高度值医瘫;
兩個(gè)向量Cross侣肄,得到

簡(jiǎn)單來(lái)說(shuō),就是取兩個(gè)方向的切線向量醇份,對(duì)它們做Cross得到該點(diǎn)的法線向量稼锅。

還有另外一種做法,是根據(jù)每個(gè)象素四邊的點(diǎn)計(jì)算被芳,而該點(diǎn)象素本身不參與計(jì)算缰贝。
沒(méi)有試過(guò),不知道哪種好一些畔濒。

而且我覺(jué)得這種計(jì)算只適合于單塊的HeightMap剩晴、NormalMap,像是DOOM3中的NormalMap就無(wú)法由HeightMap計(jì)算出來(lái)了侵状。所以最好還是在美工建模的時(shí)候同時(shí)生成NormalMap和HeightMap而不是利用HeightMap生成NormalMap赞弥。

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

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

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

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

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

很明顯只有灰度的高度貼圖并不能很好的表現(xiàn)應(yīng)該有的細(xì)節(jié)改含,因?yàn)樗呛诎椎模琑GB顏色就會(huì)遭到浪費(fèi)迄汛,并且因此你只能只用256層級(jí)的強(qiáng)度捍壤。

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

Paste_Image.png

Specular maps高光貼圖

Paste_Image.png

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

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

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

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

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

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

高光貼圖是通過(guò)Specularmap函數(shù)調(diào)用到引擎中的史汗,通常我們?cè)儋N圖的后面加一個(gè)"_s"來(lái)區(qū)別它。

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

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

AO貼圖
Ambient Occlusiont簡(jiǎn)稱(chēng)AO貼圖戈毒,中文一般叫做環(huán)境阻塞貼圖。是一種目前次時(shí)代游戲中常用的貼圖技術(shù)横堡,很多朋友將其與全局光烘焙貼圖混淆埋市,其實(shí)二者本質(zhì)是完全不同的。
首先命贴,我們從簡(jiǎn)單的AO貼圖的算法來(lái)講:
AO貼圖的計(jì)算是不受任何光線影響的道宅,僅僅計(jì)算物體間的距離,并根據(jù)距離產(chǎn)生一個(gè)8位的通道胸蛛。如下圖所示污茵,計(jì)算球形物體的AO貼圖的時(shí)候,程序使每個(gè)像素胚泌,根據(jù)物體的法線省咨,發(fā)射出一條光,這個(gè)光碰觸到物體的時(shí)候玷室,就會(huì)產(chǎn)生反饋零蓉,比如球右下方的一些像素鎖發(fā)射的光笤受,碰觸到了旁邊的政法提,產(chǎn)生反饋敌蜂,標(biāo)記這里附近有物體箩兽,就呈現(xiàn)黑色。章喉、
而球上方的像素所發(fā)射的光汗贫,沒(méi)有碰觸到任何物體,因此標(biāo)記為白色秸脱。

Paste_Image.png

簡(jiǎn)單了解算法后落包,大家就明白,全局光的烘焙師模擬GI(全局光)所呈現(xiàn)的陰影效果摊唇,而AO貼圖時(shí)模擬模型的各個(gè)面之間的距離咐蝇。二者性質(zhì)是完全不一樣的。
我舉例簡(jiǎn)單對(duì)比AO貼圖和GI陰影貼圖的區(qū)別巷查。
根據(jù)這個(gè)低模有序,右邊計(jì)算出的AO貼圖的黑白關(guān)系,是根據(jù)物體模型距離產(chǎn)生的岛请,不存在任何光源效果的影響旭寿,邊緣部分等比較密集的結(jié)構(gòu),正確的產(chǎn)生了深色崇败,強(qiáng)化了模型結(jié)構(gòu)盅称,在游戲引擎中,與其他通道貼圖混合僚匆,可以提升游戲的效果微渠。
右邊的是全局光烘焙貼圖的效果,是用MAX的天光計(jì)算結(jié)果進(jìn)行烘焙咧擂,其陰影效果是模擬自然光線下的模型光影關(guān)系逞盆,在有結(jié)構(gòu)接近的區(qū)域(比如褲袋、袖口)由于GI得光線跟蹤計(jì)算會(huì)使其弱化松申,符合自然界光線效果云芦,但是不是游戲所需要的效果。

Paste_Image.png

在unity中贸桶,我們有兩個(gè)地方可以調(diào)整AO舅逸,一個(gè)是在光照貼圖渲染器中,有一個(gè)調(diào)整AO的參數(shù)皇筛,這個(gè)是確實(shí)渲染了一層AO琉历。還有一個(gè)就是通過(guò)攝影機(jī)特效,有一個(gè)屏幕空間環(huán)境阻塞的特效screen speace ambient occlusion(SSAO).這兩個(gè)都可以實(shí)現(xiàn)部分的AO效果,有興趣的朋友可以自己嘗試一下旗笔。

CUBEMAP

Cube map技術(shù)說(shuō)到底就是用一個(gè)虛擬的立方體(cube)包圍住物體彪置,眼睛到物體某處的向量eyevec經(jīng)過(guò)反射(以該處的法線為對(duì)稱(chēng)軸),反射向量reflectvec射到立方體上蝇恶,就在該立方體上獲得一個(gè)紋素了(見(jiàn)下圖)拳魁。明顯,我們需要一個(gè)類(lèi)似天空盒般的6張紋理貼在這個(gè)虛擬的立方體上撮弧。按CUBE MAPPING原意潘懊,就是一種enviroment map,因此把周?chē)鷪?chǎng)景渲染到這6張紋理里是“正統(tǒng)”的贿衍。也就是每次渲染時(shí)授舟,都作一次離線渲染,分別在每個(gè)矩形中心放置相機(jī)“拍下”場(chǎng)景舌厨,用FBO渲染到紋理岂却,然后把這張紋理作為一個(gè)cube map對(duì)象的六紋理之一。這樣即使是動(dòng)態(tài)之物也能被映射到物體表面了(雖然缺點(diǎn)是不能映射物體自身的任何部分)裙椭。

CUBEMAP的制作方法:
http://www.cgtextures.com/content.php?action=tutorial&name=cubemaps

Paste_Image.png
Paste_Image.png

unity3d的官網(wǎng)上有一段代碼,叫做Camera.RenderToCubemap
講的是怎樣把我們的場(chǎng)景烘焙成cubemap署浩,里面附有代碼揉燃,有興趣的可以在SCRIPT幫助文件中搜索我上一行提到的關(guān)鍵詞。
LIGHTMAP

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

好處:

由于省去了光照計(jì)算, 可以提高繪制速度
對(duì)于一些過(guò)度復(fù)雜的光照(如光線追蹤, 輻射度, AO等算法), 實(shí)時(shí)計(jì)算不太現(xiàn)實(shí). 如果預(yù)先計(jì)算好保存到紋理上, 這樣無(wú)疑可以大大提高模型的光影效果
保存下來(lái)的lightmap還可以進(jìn)行二次處理, 如做一下模糊, 讓陰影邊緣更加柔和
當(dāng)然, 缺點(diǎn)也是有的:

模型額外多了一層紋理, 這樣相當(dāng)于增加了資源的管理成本(異步裝載, 版本控制, 文件體積等). 當(dāng)然, 也可以選擇把明暗信息寫(xiě)回原紋理, 但這樣限制比較多, 如紋理坐標(biāo)范圍, 物體實(shí)例個(gè)數(shù)...
模型需要隔外一層可以展開(kāi)到一張紋理平面的UV(范圍只能是[0,1], 不能重合). 如果原模型本身就是這樣, 可以結(jié)省掉. 但對(duì)于大多數(shù)模型來(lái)說(shuō), 可能會(huì)采用WRAP/MIRROR尋址, 這只能再做一層, 再說(shuō)不能強(qiáng)制每個(gè)模型只用一張紋理吧? 所以, lightmap的UV需要美術(shù)多做一層, 程序展開(kāi)算法這里不提及....
靜態(tài)的光影效果與對(duì)動(dòng)態(tài)的光影沒(méi)法很好的結(jié)合. 如果光照方向改變了的話, 靜態(tài)光影效果是無(wú)法進(jìn)行變換的. 而且對(duì)于靜態(tài)的陰影, 沒(méi)法直接影響到動(dòng)態(tài)的模型. 這一點(diǎn), 反而影響了真實(shí)度
肯定不只這幾點(diǎn),但我暫時(shí)只想到這幾點(diǎn)

那么怎么生成lightmap呢?

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

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

下面說(shuō)的這個(gè)是利用GPU進(jìn)行計(jì)算的, 跟實(shí)時(shí)光照沒(méi)什么兩樣:

原理:

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

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

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

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

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

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

Vertex-Lighting就不具有這種優(yōu)化的便利醉锅,它總是消耗同樣數(shù)量的內(nèi)存來(lái)存放模型全部頂點(diǎn)的數(shù)據(jù)結(jié)構(gòu)- Lightmap可以通過(guò)調(diào)整UV的布局兔簇,來(lái)進(jìn)行優(yōu)化以提供盡可能好的光照質(zhì)量。比如硬耍,有一個(gè)球形巖石垄琐,可以將它的底部的三角形的UV尺寸做得很小,從而讓這部分在整個(gè)Lightmap的UV上面只占據(jù)很小一塊经柴,這樣狸窘,對(duì)于頂部和側(cè)面來(lái)說(shuō),就獲得了更大的貼圖面積于是有更精細(xì)的光照效果坯认。Vertex-Lighting的精度總是對(duì)應(yīng)于頂點(diǎn)數(shù)翻擒,而效果又受模型實(shí)際大小的影響(就是說(shuō)縮小了看還可以的模型,放大比如一百倍牛哺,由于頂點(diǎn)不能改變陋气,所以效果也變糙一百倍,而Lightmap因?yàn)榭梢造`活設(shè)置精度不存在這個(gè)問(wèn)題)引润,并且不能被優(yōu)化如果靜態(tài)模型的三角形和頂點(diǎn)數(shù)量很少的話巩趁,那使用Vertex-Lighting可能會(huì)比使用Lightmap占用更少的內(nèi)存,然而椰拒,使用Lightmap絕對(duì)是看起來(lái)更好的晶渠,效率也更高的。

使用Lightmap讓LD可以優(yōu)化光照的質(zhì)量和內(nèi)存的占用所以Lightmap顯然是比Vertex-Lighting更好的選擇舉個(gè)例子:比如使用UT3這游戲的靜態(tài)模型HU_Deco_Pipes.SM.Mesh.S_HU_Deco_Pipes_SM_Pipe01該模型有2555個(gè)三角形和2393個(gè)頂點(diǎn)如果在場(chǎng)景中放置此模型的420個(gè)實(shí)例燃观,并且都使用Vertex-Lighting褒脯,那么總共消耗11MB內(nèi)存如果在場(chǎng)景中放置此模型的420個(gè)實(shí)例,并且都使用32x32的Lightmap缆毁,那么總共消耗850kb內(nèi)存如果在場(chǎng)景中放置此模型的420個(gè)實(shí)例番川,并且都使用64x64的Lightmap,那么總共消耗3.3MB內(nèi)存占用內(nèi)存的量,也會(huì)在地圖文件的尺寸上有所表現(xiàn)這個(gè)例子中的一部分實(shí)例颁督,其所用的Lightmap的精度践啄,可以設(shè)到128x128或者更高以便獲得最佳的光照效果,而仍然使用相比Vertex-Lighting來(lái)說(shuō)更少的內(nèi)存沉御。并且使用Lightmap的版本屿讽,要比Vertex-Lighting版本在渲染上快8-10個(gè)百分點(diǎn)。
Mipmap和detailmap

首先從MIPMAP的原理說(shuō)起吠裆,它是把一張貼圖按照2的倍數(shù)進(jìn)行縮小伐谈。直到1X1。把縮小的圖都存儲(chǔ)起來(lái)试疙。在渲染時(shí)诵棵,根據(jù)一個(gè)像素離眼睛為之的距離,來(lái)判斷從一個(gè)合適的圖層中取出texel顏色賦值給像素祝旷。在D3D和OGL都有相對(duì)應(yīng)的API控制接口履澳。

Paste_Image.png

透過(guò)它的工作原理我們可以發(fā)現(xiàn),硬件總是根據(jù)眼睛到目標(biāo)的距離怀跛,來(lái)玄奇最適合當(dāng)前屏幕像素分辨率的圖層距贷。假設(shè)一張32768x32768的mipmap貼圖,當(dāng)前屏幕分辨率為10241024吻谋。眼睛距離物體比較近時(shí)储耐,mipmap最大也只可能從10241024的Mipmap圖層選取texel。再次滨溉,當(dāng)使用三線性過(guò)濾(trilinear)時(shí),最大也只能訪問(wèn)20482048的圖層選取texel长赞,來(lái)和10241024圖層中的像素進(jìn)行線性插值晦攒。

Paste_Image.png

detailMAP

顧名思義,就是細(xì)節(jié)的貼圖得哆,我這里有一個(gè)例子脯颜,
使用前:

使用后:

使用的著色器:

原理上不用贅述,其實(shí)就是圖層的疊加與混合贩据。在這里有幾個(gè)關(guān)鍵詞栋操,一個(gè)是Detail的Tiling值,一個(gè)是這個(gè)Detailmap需要在導(dǎo)入的時(shí)候設(shè)置為Mipmap,里面的參數(shù)大家可以試著調(diào)一下饱亮,至于Mipmap的原理矾芙,已經(jīng)在上面介紹了。

光照
加入了基于圖像的環(huán)境光照(IBL), 使得金屬質(zhì)感和粗糙程度的材質(zhì)表現(xiàn)力大大提升



Diffuse
就是Lambert, 比較成熟的做法
Specular
高光分布
PC上是Trowbridge-Reitz (GGX)
Mobile是Blinn

幾何陰影(粗糙度)
Schlick

菲涅爾
Schlick

IBL
環(huán)境色
預(yù)生成Cubemap進(jìn)行采樣

環(huán)境高光
PC上使用2D的LUT(查找表)
Mobile使用類(lèi)似COD:Black Ops的做法

材質(zhì)
主要參數(shù)
BaseColor
這個(gè)沒(méi)什么好說(shuō)的, 從3D游戲一開(kāi)始就存在
在UE4里結(jié)合其它參數(shù), 可以使用純色表現(xiàn)出非常不錯(cuò)的質(zhì)感, 可以節(jié)省一張貼圖
另一個(gè)方面來(lái)說(shuō), UE4中卡通風(fēng)格(大面積色塊)可以有更加豐富的光照細(xì)節(jié)

Roughness
粗糙還是光滑
意味著反射周邊環(huán)境的光照

Metallic
金屬質(zhì)感調(diào)節(jié)
意味著反射周邊環(huán)境的顏色

Specular
金屬這個(gè)參數(shù)不起作用
默認(rèn)設(shè)置成0.5(通常不用連接)

材質(zhì)層


燈光
局部燈光不再限于一個(gè)發(fā)光點(diǎn)了

面積光
球形光

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末近上,一起剝皮案震驚了整個(gè)濱河市剔宪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖葱绒,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件感帅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡地淀,警方通過(guò)查閱死者的電腦和手機(jī)失球,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)帮毁,“玉大人实苞,你說(shuō)我怎么就攤上這事∽鞴浚” “怎么了硬梁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)胞得。 經(jīng)常有香客問(wèn)我荧止,道長(zhǎng),這世上最難降的妖魔是什么阶剑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任跃巡,我火速辦了婚禮,結(jié)果婚禮上牧愁,老公的妹妹穿的比我還像新娘素邪。我一直安慰自己,他們只是感情好猪半,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布兔朦。 她就那樣靜靜地躺著,像睡著了一般磨确。 火紅的嫁衣襯著肌膚如雪沽甥。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天乏奥,我揣著相機(jī)與錄音摆舟,去河邊找鬼。 笑死邓了,一個(gè)胖子當(dāng)著我的面吹牛恨诱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播骗炉,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼照宝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了痕鳍?” 一聲冷哼從身側(cè)響起硫豆,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤龙巨,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后熊响,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體旨别,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年汗茄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秸弛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洪碳,死狀恐怖递览,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瞳腌,我是刑警寧澤绞铃,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站嫂侍,受9級(jí)特大地震影響儿捧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挑宠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一菲盾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧各淀,春花似錦懒鉴、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至奴璃,卻和暖如春吴裤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背溺健。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钮蛛,地道東北人鞭缭。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像魏颓,于是被迫代替她去往敵國(guó)和親岭辣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 一甸饱、頂點(diǎn)與片段著色器簡(jiǎn)介 Vertex and FragmentShader:最強(qiáng)大的Shader類(lèi)型沦童,也是本系列...
    半閑書(shū)屋半閑人閱讀 9,644評(píng)論 6 10
  • 一仑濒、Surface Output (表面著色器的標(biāo)準(zhǔn)輸出結(jié)構(gòu))Surface Shader的標(biāo)準(zhǔn)輸出結(jié)構(gòu)-第一要素...
    CarlDonitz閱讀 909評(píng)論 0 1
  • 這一篇比較偏重于功能介紹,具體的實(shí)例操作請(qǐng)參考其他文章:未完成 游戲場(chǎng)景中燈光照明的構(gòu)成 現(xiàn)實(shí)生活中的光線是有反射...
    shimmery閱讀 53,396評(píng)論 6 59
  • 2017年8月23日 星期三 天氣晴 昨天感覺(jué)也沒(méi)有吃什么特別的東西偷遗,體重竟然直線上升墩瞳,到晚上睡覺(jué)的時(shí)候直接達(dá)到了...
    whatcanhumando閱讀 256評(píng)論 0 0
  • 落英紛飛風(fēng)縱喉酌, 花瓣沾淚雨弄。 軒窗清燈明泵喘。 一懷幽思誰(shuí)人共泪电? 誰(shuí)懂?誰(shuí)懂纪铺? 殘紅煙輕入夢(mèng)相速。 寫(xiě)于2017.6.30
    真水無(wú)香_閱讀 270評(píng)論 0 6