光照貼圖烘焙
轉載自CSDN雨蒙一,簡書自由的天空等人,感謝分享;
https://www.jianshu.com/p/3e1e002f5684
基礎知識了解一下:
1,什麽是貼圖(Texture)?
貼圖(texture)是一張不大的二維圖像,它呈現了某個表面的最終信息。它被指定到線框多邊形的表面,給予模型最終的外觀。貼圖的制作技巧是創建遊戲真實度方面的關鍵因素。
2,貼圖格式及大小
一般情況下,貼圖的實現在圖像處理軟件中制作完成,紋理一般會包含很多信息和圖層,也將隨後被儲存成PSD格式,當制作完成後,文件合並成一個圖層,被存儲為JPG格式,在遊戲制作中,
普遍被存儲為TGA格式。這是因為這些文件格式包含一個ALPHA通道,可以實現其他的紋理效果。
貼圖的尺寸一般是正方形,2的N次方,256,512。。。由於遊戲是實時渲染,像三維空間中的多邊形數量一樣,貼圖大小也將需要處理的時間,貼圖越大,處理時間就越長,因此,一般最多使用1024、2048大小的貼圖。
3,指定貼圖
為了制作準確的貼圖,設計師需要執行一個叫做UVW展開的操作,以方便後期貼圖的制作與修改。
4,次世代遊戲貼圖的組成
次世代貼圖是由:法線貼圖、AO貼圖、固有色貼圖、高光貼圖、凹凸貼圖、透明貼圖及自發光貼圖的組合而成的一整套貼圖。
1)法線貼圖:記錄凹凸信息的貼圖
生成方法:通過3dmax 把同一個模型的高低版本對在一起,把高模細節通過烘焙的方法將生成法線貼圖記錄下來。
2)AO貼圖:環境光遮蔽貼圖,它是用來秒回物體和物體相交或者靠近時遮擋周圍漫反射光線的效果。可以解決和改善漏光、飄和陰影不實的效果。它主要是通過改善陰影來實現更好的圖像細節。
AO貼圖在模型制作完成後不直接貼在材質球上,而是用於繪制固有色。通常情況下,會在AO貼圖上以正片疊底的形式放置在固有色材質上,會使得物體的明暗更加真實。
——Ambient Occlusiont簡稱AO貼圖,中文一般叫做環境阻塞貼圖。是一種目前次時代遊戲中常用的貼圖技術,很多朋友將其與全局光烘焙貼圖混淆,其實二者本質是完全不同的。
首先,我們從簡單的AO貼圖的算法來講:
AO貼圖的計算是不受任何光線影響的,僅僅計算物體間的距離,並根據距離產生一個8位的通道。如下圖所示,計算球形物體的AO貼圖的時候,程序使每個像素,根據物體的法線,發射出一條光,這個光碰觸到物體的時候,就會產生反饋,比如球右下方的一些像素鎖發射的光,碰觸到了旁邊的正方體,產生反饋,標記這裏附近有物體,就呈現黑色,而球上方的像素所發射的光,沒有碰觸到任何物體,因此標記為白色。
簡單了解算法後,大家就明白,全局光的烘焙師模擬GI(全局光)所呈現的陰影效果,而AO貼圖時模擬模型的各個面之間的距離。二者性質是完全不一樣的。
我舉例簡單對比AO貼圖和GI陰影貼圖的區別。
根據這個低模,右邊計算出的AO貼圖的黑白關系,是根據物體模型距離產生的,不存在任何光源效果的影響,邊緣部分等比較密集的結構,正確的產生了深色,強化了模型結構,在遊戲引擎中,與其他通道貼圖混合,可以提升遊戲的效果。
右邊的是全局光烘焙貼圖的效果,是用MAX的天光計算結果進行烘焙,其陰影效果是模擬自然光線下的模型光影關系,在有結構接近的區域(比如褲袋、袖口)由於GI得光線跟蹤計算會使其弱化,符合自然界光線效果,但是不是遊戲所需要的效果。
在unity中,我們有兩個地方可以調整AO,一個是在光照貼圖渲染器中,有一個調整AO的參數,這個是確實渲染了一層AO。還有一個就是通過攝影機特效,有一個屏幕空間環境阻塞的特效screen speace ambient occlusion(SSAO).這兩個都可以實現部分的AO效果,有興趣的朋友可以自己嘗試一下。
3)固有色貼圖:通常情況下,我們把白色陽光下物體呈現出來的色彩效果總和成為固有色。固有色是指物體固有的屬性在常態光源下呈現出來的色彩。
4)高光貼圖:就是光滑物體弧面上的亮點,而平面上則是一片光。與光源和攝像機的位置有關。但通常為一個小白點。
——高光貼圖是用來表現當光線照射到模型表面時,其表面屬性的.(如金屬和皮膚、布、塑料反射不同量的光)從而區分不同材質.
高光貼圖再引擎中表現鏡面反射和物體表面的高光顏色。
——凸凹貼圖可以通過高光貼圖來改進成相當漂亮的貼圖。(要記住的是,單單憑借高光貼圖是無法充分的表現材質特性的,只有Didffuse,Normal,和Specular三張配合才能充分的表現材質特性.)
在UNITY中,高光貼圖通常放在漫反射貼圖的透明通道裏,我們是用相關的SHANDER就可以達到高光的效果
制作過程:高光的繪制一般把固有色貼圖進行去色處理,再進行修整和調節。註意高光貼圖不能出現純黑和純白。
5)透明貼圖
透明貼圖是將不需要顯示的部分現實出的顏色是當前對話框的背景色,類似於遮罩。
補充常用貼圖介紹
a.漫反射貼圖diffuse map
漫反射貼圖在遊戲中表現出物體表面的反射和表面顏色。換句話說,它可以表現出物體被光照射到而顯出的顏色和強度。我們通過顏色和明暗來繪制一幅漫反射貼圖,
在這張貼圖中,墻的磚縫中因為吸收了比較多的光線,所以比較暗,而墻磚的表面因為反射比較強,所以吸收的光線比較少。上面的這張圖可以看出磚塊本身是灰色的,而磚塊之間的裂縫幾乎是黑色的。
刨去那些雜糅的東西,我們只談明顯的,漫反射貼圖表現了什麽? 列舉一下,物體的固有色以及紋理,貼圖上的光影。前面的固有色和紋理我們很容易理解,至於後面的光影,
我們在繪制漫反射貼圖的時候需要區別對待,比如我們做一堵墻,每一塊磚都是用模型做出來的,那麽我們就沒有必要繪制磚縫,因為這個可以通過打燈光來實現。可是我們如果用模型只做了一面墻,
上面的磚塊是用貼圖來實現,那麽就得繪制出磚縫了。從美術的角度,磚縫出了事一條單獨的材質帶外,還有就是磚縫也是承接投影的,所以在漫反射圖上,繪制出投影也是很有必要的,如下圖:
沒有什麽物體能夠反射出跟照到它身上相同強度的光。因此,讓你的漫反射貼圖暗一些是一個不錯的想法。通常,光滑的面只有很少的光會散射,所以你的漫反射貼圖可以亮一些。
漫反射貼圖應用到材質中去是直接通過DiffuseMap的。再命名規範上它通常是再文件的末尾加上“_d”來標記它是漫反射貼圖。
b.凹凸貼圖Bump maps 凸凹貼圖可以給貼圖增加立體感。它其實並不能改變模型的形狀,而是通過影響模型表面的影子來達到凸凹效果的。 在遊戲中有兩種不同類型的凸凹貼圖,法線貼圖(normalmap)和高度貼圖(highmap)。
1. Normal maps法線貼圖 ——
法線貼圖定義了一個表面的傾斜度或者法線。換一種說法,他們改變了我們所看到的表面的傾斜度。
法線貼圖把空間坐標的參數(X,Y,Z)記錄在像素中(R,G,B),上面的範例圖就是這個意思。
有兩種制作法線貼圖的方法:
1.從三維的模型渲染出一張法線貼圖 (用高模跟低模重疊在一起,把高模上的細節烘焙到低模的UV上,這裏需要低模有一個不能重疊的UV)
2.轉換一張高度貼圖成為一個法線貼圖。(是用NVIDIA的PS插件來轉換一張圖成為法線貼圖)
2.Height maps高度貼圖
什麽是HeightMap呢?所謂高度圖實際上就是一個2D數組。創建地形為什麽需要高度圖呢?可以這樣考慮,地形實際上就是一系列高度不同的網格而已,這樣數組中每個元素的索引值剛好可以用來定位不同的網格(x,y),而所儲存的值就是網格的高度(z)。
我們在這裏敘述高度圖,其實也是為了更好的繪制法線貼圖,很多情況下我們的法線貼圖只能在已有的漫反射貼圖作為素材進行繪制,這樣就是需要由一個HeightMap轉換成法線貼圖的一個過程,明白了這個原理,做起來也就可以更好的駕馭其效果。
高度貼圖是一種黑白的圖像,它通過像素來定義模型表面的高度。越亮的地方它的高度就越高,畫面越白的地方越高,越黑的地方越低,灰色的在中間,從而表現不同的地形。
當然在UNITY中也是有HightMap出現的,比如在Terrain菜單中,就有導入和導出HightMap的命令。
高度貼圖通常是在圖形處理軟件中繪制的。他們通常沒有必要渲染這些,在DOOM3遊戲中高度貼圖是被轉換成法線貼圖來使用的。使用高度貼圖僅僅是為了適應簡單的工作流程。高度貼圖通常通過“Heightmap”函數來調用到3D軟件中去的,我們通常再文件名後面加一個"_h"來標示它。
Normal maps vs. height maps
法線貼圖和高度貼圖
一般來說,Normal Map來自於Height Map。
通常我們繪制一張具有足夠細節的高度貼圖要比建立一個足夠細節的模型然後渲染成相應的法線貼圖要實際的多。
法線和高度的凸凹貼圖可以通過Addnormals函數來合並到一種材質中。
毫無疑問,高度貼圖大多數遊戲引擎中出現的不多。他們只是給電腦一種方法來計算曲面法線當使用動態燈光的時候。
這說明實際上,一張高度貼圖被轉換成一張法線貼圖,以此可以計算出相鄰兩塊不同高度的位置之間的傾斜面。高度貼圖永遠不能像法線貼圖這樣具有足夠的細節,這是被肯定的。
很明顯只有灰度的高度貼圖並不能很好的表現應該有的細節,因為它是黑白的,RGB顏色就會遭到浪費,並且因此你只能只用256層級的強度。
相比較來言法線貼圖的每一個圖像通道都可以利用到,顯而易見,法線貼圖能夠更好的來表現凸凹。
光照貼圖烘焙