Unity3d場景快速烘焙【2020】

很多剛剛接觸Unity3d的童鞋花了大量的時間自學,可總是把握不好Unity3d的烘焙,剛從一個坑裏爬出來,又陷入另一個新的坑,每次烘焙一個場景少則幾個小時,多則幾十個小時,機器總是處於假死機狀態,半天看不到結果,好不容易烘焙完了,黑斑、撕裂、硬邊、漏光或漏陰影等缺陷遍佈,慘不忍睹,整體效果暗無層次,或者蒼白無力,燈光該亮的亮不起來,該暗的暗不下去,更談不上有什麼意境,痛苦的折磨,近乎失去了信心,一個團隊從建模到程序,都沒什麼問題,可一到烘焙這一關,就堵得心塞,怎麼也搞不出好的視覺效果,作品沒法及時向用戶交付,小姐姐在這裏分享一些自己的經驗,希望能幫到受此痛苦折磨的朋友,話不多說,開工!

哦,對了,忘了交代一點,很多朋友總是喜歡追高版本的unity3d軟件,以爲高版就一定很好,目前最高版是Unity3d 2020,有人就迫不及待地下載使用,很多人用的都是破解版,如果沒有經過驗證,就草率地用於實際項目,如果軟件有問題,後果不堪設想。有幾個讀者用2020版,項目完成發佈的時候,問題來了,啓動界面logo圖標更換沒有完全破解,使用官方的Logo,3D眼鏡瀏覽的時候特別暈,如果可以更換個Logo,就可以上傳自己製作的抑制眩暈的Logo,當然還有很多別的問題,總之,希望大家使用經過小姐姐通過實際項目製作驗證的版本,絕對不敢冒然選用最高版。這裏建議大家使用Unity2019.3.13f1版.unity3d共有三個版本標識,alpha、beta、final,其中alpha是公認的內測版,也就是內部測試版,很多代碼都有問題,beta版是公測版,也有不少問題,final版纔是最後的正式版,alpha版一般簡寫爲a,例如unity 2019.1.1a8(64-bit)、Unity 2019.2.0a4,這兩個版本都是測試版,如果版本標識中有字母b,就是公測版,也不能下載使用,只有帶 f 的版本才能用於項目製作,所以現在最高只能使用2018版,很多老司機還在用5.6版,一般都不追高版。

本文和大家一起探討的實例效果截圖(後續會不斷更新):

在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述

幹活!

● Unity日景烘焙

首先小姐姐以著名的斯蓬扎宮模型場景爲例,和大家一起探討一下正午時分的光影布光方法及烘焙過程。3dMax模型情況如下圖所示(由圖可見,模型的面數爲6萬多(見截圖左上角),模型一定要採用精簡的單面建模,否則這個場景的面數會多達幾百萬,甚至上千萬的面,如此多的面數,Unity是喫不消的,無論烘焙過程的展UV,還是烘焙,甚至烘焙之後的場景運行,都會陷入無休止的等待、假死機和卡頓狀態,畢竟烘焙之後也會個場景帶來一些負載,而且最終作品要在用戶機器或手機上運行,所以從模型的面數方面,必須充分考慮給場景留出足夠的裕度)

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


1. 模型導出
無論你用3dMax、Maya、C4D、Blender或Sketchup建的模型,建議都以fbx格式導出,因爲Unity3d對fbx格式兼容的最好,這也是官方的建議,導出時一定要勾選“EmbedMedia”(嵌入媒體),否則在導入Unity時會成爲無貼圖的“裸模”


在這裏插入圖片描述在這裏插入圖片描述


2. 模型導入Unity

⑴ 在導入模型前,按下圖所示,勾選掉Unity3d的“Auto Generate”(自動烘焙)選項,好多人一打開Unity3d,不知道怎麼啦,總感覺系統處於運算狀態,就是因爲Unity默認這個選項是勾選的,當導入模型後,什麼還沒做,就一直陷入莫名的忙機,也是這個原因,所以導入前取消這個選項。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


⑵ 按下圖所示將剛纔從3d軟件導出的FBX模型拖入Unity3d的Assets文件夾,2017版之後,可能出於別的考慮,Unity不再直接導入材質和貼圖,所以很多人發現模型導入後總是無材質和貼圖的裸模,這裏還需要做一點設置,看下一步。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


⑶ 選中剛導入的FBX模型,點擊inspector面板的Materails按鈕,我們發現下面的所有材質都顯示“none”,這就是裸模的根源,有童鞋說,前面不是說導出FBX時不勾選“Embedmedia”選項,就會出現裸模,這都勾選了,怎麼還是裸模呢?這裏需要說一下,如果前面不勾選,這裏一定是裸模,但是,勾選之後,還需要一點點設置,否則依然會裸模,也就是前面和現在的設置缺一不可。

在這裏插入圖片描述在這裏插入圖片描述

⑷ 繼續,此時拉開“location”後面的下拉框,將設置改爲第一項,也就是“use external materails(legacy)”,意思是使用外部材質,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述

⑸ 接下來還需要將“naming”後面的下拉框改爲“from model‘s materails’”,如下圖所示,意思是貼圖名稱取自模型材質,然後點擊下面第二張圖中所示的“apply”(應用)按鈕,這時unity就稀里嘩啦地將所有材質和貼圖真正導入Unity。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


⑹ 導入材質和貼圖後,unity的assets文件夾中會多出“materails”和與FBX同名的後綴爲".fbm"的兩個文件夾,一個存放的是材質,一個用來存放貼圖,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


⑺ 接下來將assets中的FBX模型拖入“Herarcy(層級面板)”,此時我們可以看到,FBX模型連同材質和貼圖被完美地導入了Unity,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


到此模型導入完畢,從下面的圖可以看到,在unity3d默認燈光的照射下,場景看起來很蒼白,沒有一點層次,你的作品功能再強大,場景沒有出色的視覺美感,所有功夫全白費,受衆是不能接受這樣的作品,這就是烘焙的重要意義!考慮到一些童鞋導入模型都成問題,所以前面囉嗦了一堆,熟悉的童鞋可以跳過。接下來就進入unity3d烘焙的正題。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


3. Unity3d場景布光及光照參數設置

無論是遊戲,還是VR場景,烘焙前首先要做的事是燈光的佈設,因爲烘焙的主要任務是渲染燈光的光影效果,沒有燈光,烘焙也就無從談起。unity3d的布光原則,和其他3D軟件並無二樣,也就是要根據所要表現的意境和氣氛來決定如何打燈。一開始我們就說要烘焙正午時分的場景,下面我們就按正午時刻的光照來佈設燈光。大家都知道,正午時分,陽光明媚,光照明暗分明,太陽光近乎垂直投射,但是,這個場景只有頂部一個可進光的開口,其他部分都是密閉的,表現正午的氣氛,如果燈光垂直向下投射,陰影會與場景物體重合,所以我們不能垂直打燈,因此將燈光調至與地面夾角大約60-80度,合理的燈光佈設是場景光影出彩和營造氣氛的先決條件,不同的時間段,燈光角度不同。

⑴ 下面我們用平行光來模擬太陽光,作爲主光源(照亮場景的主要光源)照亮場景的部分區域(也就是迎光面),產生光斑,與此同時,在其他區域產生陰影。照亮區和陰影區必須形成強烈的反差,才能顯示出陽光的明媚,很多人烘焙的場景平淡,就是因爲明暗對比不強烈,該亮的不亮,該暗的不暗。非洲人之所以看起來牙齒很白,是因爲黑色臉部的襯托所致,因此要表現優秀的陽光效果,光照明暗反差要大,但暗區也不能死黑一片。Unity一創建新的場景,就默認爲我們創建了一盞平行光,現在我們將其調至如下圖所示的投射角度,既要考慮讓一二層都有陽光投射的痕跡,又不至於燈光垂直入射。

在這裏插入圖片描述在這裏插入圖片描述


⑵ 接下來選中平行光(Directional Light),將inspector面板中的燈光強度(intensity)調至2,如下圖所示,默認值是1,很多人馬上說燈光已經曝光了,但必須調大,因爲我們最終要的是烘焙光照,不是實時光照,現在只是實時光照曝光了,因爲烘焙光照的算法和實時光照不同,不調大,烘焙後陽光不夠強烈。另外,順便將燈光的模式“Mode”改爲“baked(烘焙模式)”,如下面第二張圖所示。其他值

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


⑶ 主光源設定之後,我們還需要考慮陰影區域的照亮,雖然陰暗區相對照亮區較暗,但也不能有伸手不見五指的感覺,正午陽光充足的時候,在強光的照射對比下,陰影區會顯得比較暗,但物體還是能看清,而且有層次感的,這主要是天光的貢獻,因此我們需要開啓Unity的天光作爲輔助光源來照亮陰暗區域,與此同時,主光源照射到迎光面後,反射到周圍的物體上,這些物體又作爲二次光源照亮其他物體,多次反彈後到達陰暗區,也起到光照的作用,因此,這個場景的輔助光源除了天光,還有主光源-太陽光多次反彈光,或者說兩者的綜合效果作爲輔助光,共同照亮陰影區。現在我們打開光照面板,點擊window/lingting/settings,如下圖所示,彈出光照面板,然後按下面第二張圖所示,將光照面板的標籤拖至inspector面板標籤之後,使其和inspector面板並排,這樣節省屏幕空間,如下面第三張圖所示。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


⑶ 接下來將光照面板(Lighting)下場景(Scene)標籤中的環境反射(Environment Reflections)的反彈次數改爲5,這個值越大,光線會充分傳遞到陰暗區,亮度越亮,但亮度不會超過照亮區。然後將實時光照(RealTime Lighting)下實時全局光照(RealTime Global ILLumination)後的複選框取消勾選,也就只進行烘焙全局光照計算。接着將混合光照(Mixed Lighting)的光照模式(Lighting Mode)後的下拉框中的選項改爲烘焙間接光(Baked Indirect),最後再將光照貼圖設置(Lightmapping Setings)下的光照運算器(Lightmaper)後的下拉框選項改爲漸進式(Progressive),如下圖所示。還需要勾選環境遮蔽(Ambient Occlusion),也就是AO,如下第二張圖所示,這個選項會在物體或物體間內轉角或內轉折處產生軟陰影,例如牆內凹角,對於表現細節很有幫助。至此場景的輔助光和光照參數就設好了。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


4. 烘焙模型設置

做完以上的設置之後,還需要對模型進行必要的設置。選中層級面板中所有需要烘焙的模型物體,勾選Inspector面板右上角的Static,將所有物體設定爲靜態,如下圖所示,否則烘焙之後沒有陰影和任何效果,切記!然後在assets面板中,選中導入的所有FBX模型,勾選inspector面板模型(model)下的創建光照貼圖座標(Generate Lightmap UVs)複選框,如下第二張圖所示,否則烘焙後,模型會遍佈黑斑,其實是光照圖錯亂,因爲沒有貼圖座標,光照圖不知道怎麼貼。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


5. 烘焙

完成上面的設置,就可以進行場景烘焙了。點擊下圖所示的“Generate Lighting(生成光照)”按鈕,即可開始光照烘焙

在這裏插入圖片描述在這裏插入圖片描述


說明:最近Unity2019版的正式版發佈,由於一直在測試破版的穩定性,所以到現在才更新,請童鞋們諒解!下面就改用2019版來和大家繼續探討Unity3d的光照烘焙。

接上面的步驟,烘焙完成共耗時7.5分鐘,且無任何報錯提示,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


下面從不同角度來看看烘焙的效果,由下列截圖可見,烘焙成果非常乾淨,未見很多童鞋所說的黑斑、白斑、麻點、漏光、漏陰影、撕裂、破面、硬邊等現象,而且烘焙速度非常快。一般情況下,最終的正式渲染烘焙,很多人都得1,2個小時,大部分沒經驗的童鞋,得5,6個小時,甚至幾十個小時,還有的童鞋陷入了無休止的死機狀態。無論質量好壞,有的童鞋想看一眼效果,一時半會都看不到,搞得非常心塞。前面說過,我們此次的目標是烘焙正午時分的光照效果,大家看看有沒有正午的效果?小姐姐個人認爲,整個場景明暗對比強烈,陰暗區域雖然很暗,但是層次還是很清晰的。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


我們再來看看細節效果

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


下面我們用視頻看看烘焙的效果

6. 沒經驗的初學者烘焙的情況

初學者或者沒經驗的童鞋,將烘焙參數設的稍高一些,即如下圖所示,將”Bounce(反彈次數)“設爲4,Lightmap Resolution(光照貼圖分辨率)”設爲20,“Lightmap Size(光照貼圖尺度)”設爲2048,烘焙時屏幕右下角的ETA(剩餘時間,也就是烘焙完成需要的時間)一開始顯示爲3個多小時,然後不斷增加,甚至幾十個小時,經歷漫長的等待之後,直接心理奔潰,明明做個簡單的例子烘焙挺快的,爲什麼一到實際項目就讓人這麼心塞呢?

在這裏插入圖片描述在這裏插入圖片描述


這些童鞋不甘心,又降低烘焙參數,如下圖所示,將”Bounce(反彈次數)“設爲1,Lightmap Resolution(光照貼圖分辨率)”設爲10,“Lightmap Size(光照貼圖尺度)”設爲2048,烘焙時屏幕右下角的ETA(剩餘時間)爲1個多小時,同時狀態欄提示“There are 5 objects in scene with overlapping UV’s…(場景中有5個物體UV座標重疊)

在這裏插入圖片描述在這裏插入圖片描述


烘焙的結果慘不忍睹,劣跡斑斑,仿若火災之後的情景,如下圖所示,

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


童鞋們常見的烘焙缺陷就不再一一列舉了,那麼爲什麼小姐姐使用很高的烘焙參數,完成高品質烘焙只用了7.5分鐘,而童鞋們使用稍高點的參數就陷入了無休止的假死機?甚至把參數降得很低,烘焙都比小姐姐花費的時間多的多,而且烘焙的質量還非常差呢?對於小姐姐不到8分鐘的高品質渲染烘焙時長,很多童鞋有點大跌眼鏡,似乎不大相信,因爲自己從來就沒有在幾分鐘內完成一個場景的烘焙,而且還需要一次又一次的反覆測試,每次都有各種問題,一出現問題,就一頭霧水,不知道如何排除,即使等待漫長的時間有了結果,也是黑斑、白斑、漏光、漏陰影、破面、亮邊、硬邊等現象嚴重,搞得都失去了信心,下面就烘焙超慢以及烘焙過程出現的問題分別進行深度分析,僅爲小姐姐個人的觀點,請高手磚拍。

7. 烘焙渲染超級緩慢的原因分析及解決方案

⑴ 模型面數超高是Unity3d烘焙超慢的罪魁禍首

大家都知道,光照烘焙的實質是將模型的每個面上所受光照渲染到其展開的對應UV區塊上的過程,大家可以自己試驗一下,在自己熟悉的3D軟件中創建一個簡單的立方體和一個面模型,然後導入Unity3d進行烘焙,速度會非常快,但是當複製10萬個立方體,再導入Unity3d烘焙的時候,速度就非常慢,由這個簡單的例子可以得出結論,模型的面數越多,烘焙所消耗的時間越長,所以降低模型面數是加速烘焙的首選方案,換言之,模型面數超高是造成Unity光影烘焙緩慢的主要原因,也就是在保證模型外觀不變的情況下,應儘可能地降低模型面數。

很多童鞋之前從事效果圖或3D動畫,轉入VR之後,仍然沿用效果圖和動畫的建模習慣,將每個面建的很精細,很光滑,即使模型規模再大都不用擔心,因爲這些童鞋的機器配置都很高,但是VR不同於效果圖和動畫,效果圖和動畫最終作品只需給用戶提交幾張圖片或視頻(圖片序列),而VR最終作品是要給用戶提交一個能夠在配置不高的用戶機或手機上實時運行的3D場景文件,所以製作VR或遊戲作品,無論你的機器配置多高,都應儘可能優化場景模型面數。模型面數不僅影響烘焙速度和質量,同時也影響最終作品的實時運行效率。

簡單地說,VR和遊戲建模,應放棄傳統的實體建模習慣,改用精簡的低面數最優化單面建模方法,也就是poly(多邊形)建模,這樣纔能有效降低模型面數。對於使用3dmax建模的童鞋,如果不會使用單面建模,可參看小姐姐編制的《基於Unity3d的3dMax低面數精簡單面建模實戰視頻教程》,支持小姐姐的《Unity模型預處理布光烘焙後處理特效美工場景優化實戰視頻教程》,贈送你基於Unity3d的3dmax低面數精簡單面建模實戰視頻教程,希望小姐姐的教程對一些童鞋大幅降低模型面數有所幫助。具體如何構建模型,就不贅述了,這裏只給出一些原則,也就是在保證模型外觀的前提下,應儘可能降低曲面光弧度(段數),一些細節採用貼圖來表現,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


有些童鞋認爲曲面精度太低,看起來太粗糙,大家看看上兩圖所在位置經過烘焙後的效果,由圖可見,雖然降低了曲面精度(光滑度),烘焙後並不失真。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


另外對於護欄、鐵藝、女兒牆之類比較費面的模型,可採用鏤空貼圖來表現。踏步較多時,也可採用貼圖表現,門窗之類也用貼圖,這樣就可以大幅度降低模型面,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


⑵ 模型交叉也是導致烘焙渲染超級緩慢不容忽視的因素
有的童鞋非常偏執,不願意用單面建模方法,說自己的模型面數並不高,可渲染烘焙還是很慢,原因是他的場景中有很多下圖所示的模型交叉(或穿插)結構,烘焙時會計算圖中所示的2處陰影和AO,大家都知道,烘焙的過程中陰影計算是最耗時的,不合理的建模,會讓系統花大量時間計算無意義的陰影,如果採用單面建模方法改造成如下第二張圖所示的結構,只需計算一處的陰影,如果類似的這種交叉結構在場景中大量存在,烘焙肯定會很緩慢。而在改成單面模型後,烘焙會大幅加速


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


⑶ 面重疊(Overlapped faces)也是導致烘焙渲染緩慢的重要因素

一些童鞋確實使用poly單面建模構建的場景,但是由於疏忽或誤操作,一些頂點未被焊合,或其他原因,造成很多重疊的面,從外觀上看,都是單個的面,而實際在這些面的後面重疊了好多面,這些面在烘焙渲染過程中,都會被展開,並要一一被烘焙,而實際後面重疊的面都毫無意義,白白花費了很長時間在烘焙無用的東西,所以建模完成後,應排查重疊面和重疊的頂點。關於重疊面後面會進行圖解。

⑷ 不合理的lightmap UV佈局將大幅增加烘焙渲染時間

由於Unity3d自帶的lightmap UV’s拆分(展開)算法的硬傷,在指定的UV尺度下,物體的光照UV常常集聚在一張lightmap的局部區域,使大量的UV空間白白浪費,如下圖所示。爲了增大UV所佔的比例,很多童鞋通過增加下面第二張圖中的“Scale in Lightmap”參數反覆測試,時間都花在了一次又一次的測試中,少則幾個小時,多則幾天,得不償失。而且當增加“Scale in Lightmap”參數時,原來一些UV區塊又相應縮小,爲了讓所有的UV區塊都增大,每個物體的“Scale in Lightmap”都得增加,此時烘焙時間成倍劇增。原本想讓所有UV區塊佔滿一張lightmap,可是unity並不聽使喚,不僅沒有充分利用lightmap有效空間,而且又增加了lightmap的數量,每張lightmap和剛纔那個lightmap一樣,都浪費很多UV空間。經過多次長時間的烘焙測試後,烘焙缺陷雖然消除了,可lighmap所消耗的內存空間驚人,這給作品後續的實時運行增加了很大負擔。因此不合理lightmap UV佈局也是導致烘焙緩慢的重要因素。所以小姐姐強烈建議不要使用Unity3d自帶的Lightmap UVs展平功能,也就是不要勾選下面第三張圖中的“Generate Lightmap UVs(自動展平Lightmap UV座標)”,不勾選這個選項則系統會利用建模軟件中拆分(展平)的通道2中的UV座標。這個數據保存在FBX文件中,Unity3d是可以識別的。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


8. 影響烘焙渲染質量的因素分析及解決方案

前面我們一起討論了造成烘焙渲染緩慢的原因和解決方案,下面我們繼續剖析造成很多烘焙缺陷原因及解決方案,前面所討論的渲染烘焙緩慢的原因也是造成各種烘焙缺陷的根源,接下來我們逐一進行分析。

⑴ 模型面數超高是影響烘焙質量的重要因素

有耐心的童鞋,硬着頭皮等待了很長時間,烘焙完了整個場景,結果卻發現到處是黑斑、亮斑、硬邊、漏光、漏陰影、破面、撕裂、亮面、黑麪等缺陷,整個場景看上去很髒,一下就懵圈了,全然不知如何解決。根據小姐姐個人經驗,要解決上述的烘焙缺陷,首要問題應該降低模型面數,也就是在保證模型外觀情況下,儘可能使用較少的面來構建場景。大家可以試想一下,兩個一樣的模型,一個面數很高,另一個面數很低,當他們被拆分(展平)在相同分辨率的lightmap UV貼圖座標中時,相對於低面模型來說,高面模型的每個面只有縮得很小才能被容納在這個lightmap中,當某些面小到不足以表現這些面所受的光照的細節時,偏暗的像素就會積聚成黑塊,偏亮的像素就會集聚成白塊。進而當這些lightmap包裹到對應的模型面上時,就出現了黑斑或白斑,如下圖所示。而低面模型相對高面模型來說,在相同分辨率的lightmap中,每個面所佔的比例就大的多,足以表現每個面所受的光照的細節,因此烘焙的結果清晰、乾淨。

大家繼續來看下面第二張圖,一些面原本需要在下面左圖所示的大小的UV區塊上來表現光照,但由於模型面數太多,Unity3d展平UV後,自動分配給這些面的實際UV區塊,只有中間圖所示的大小,烘焙完成後,這些面對應的光照圖要包裹到1:1的模型面上,需要放大很多倍。大家都知道,當一個很小的圖被放大很多倍時,Unity會以插值法來彌補像素,彌補的像素RGB值是原本相鄰的兩個像素RGB的平均值,即右圖所示的結果,當這張圖的“色帶”的分界線貼在某個面上時,就出現常見的“硬邊”缺陷,當深色的“條帶”貼在某個面上時,就出現了常見的“黑麪”缺陷,同理,當淺色的“條帶”貼在某個面上時,就出現了常見的“亮面”缺陷。總之,如果不採用精簡的低面數最優化單面建模,而使用傳統的實體建模方法,模型面數會很高,烘焙時,不僅耗時,而且會出現各種各樣的缺陷。

在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述


⑵ 面重疊也是影響烘焙質量不可忽視的因素

面重疊對烘焙質量的影響比較隱蔽,常常被很多人忽視,甚至有些童鞋壓根就不知道面重疊會影響烘焙質量,但它對烘焙質量的影響確實不容忽視。爲了讓童鞋們瞭解什麼是面重疊,我們還是以前面烘焙的場景爲例進行圖解,小姐姐將這個場景的poly合併成了3層和一組配飾模型,分別爲1_F、2_F、3_F,爲了方便大家搞清關係,小姐姐將模型拉開顯示了,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


這裏我們先不解釋什麼是面重疊,而是先討論如何檢測面重疊,對於使用3dmax建模的童鞋,可以按照下圖所示的步驟打開面重疊檢測功能。

在這裏插入圖片描述在這裏插入圖片描述


打開之後,屏幕顯示如下圖所示的信息,其中“Overlapping Faces:”的意思是重疊面的數量,因爲剛打開,沒有選擇物體,所以後面顯示“Not Applicable(不適用)”。“Click here to Configure”意思是點擊這兒來配置相距多遠算作重疊,一般設爲0.0001,也就是相距很近很近。“Click to Update”意思是點擊這兒來更新,當選擇物體後,點擊這個按鈕來顯示重疊面的數量。

在這裏插入圖片描述在這裏插入圖片描述


下面我們就以3_F,也就是三層的模型爲例來檢測重疊的面,首先點擊“點擊這兒來配置”,設置間距爲0.0001視爲重疊,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


接下來在場景中選擇3_F,然後點擊“Click here to Update”,此時“Overlapping Faces”的數量顯示爲16,也就是3_F中有16個面重疊,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


接下來我們看看到底面是怎麼重疊的,按Alt+Q隔離3_F,旋轉視圖觀察,沒有發現重疊面提示,有時候確實很難發現重疊的面,但是大家都知道,面的重合,必然伴隨着頂點的重合,所以我們將面重疊改成頂點重疊檢測,按下圖所示的圖示步驟打開頂點檢測功能。

在這裏插入圖片描述在這裏插入圖片描述


和前邊面重疊檢測的操作一樣,配置間距容差爲0.0001,然後點擊“Click here to Update”,屏幕信息顯示38個頂點重合,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


與此同時,場景中顯示很多綠色頂點,這些綠色的點就是重疊的38個頂點,現在我們就來看看這些綠色的頂點到底是什麼回事,要選擇和編輯頂點,我們得進入poly的頂點層級,然後選擇一個綠色的頂點,旋轉視圖觀察,如下圖所示

在這裏插入圖片描述在這裏插入圖片描述


將選中的這個綠色頂點沿y軸向後移動,得到如下圖所示的結果,至此,小姐姐就不用解釋什麼是面重疊了,從下圖中可見,確實在這點處有面重疊。

在這裏插入圖片描述在這裏插入圖片描述


移除這個頂點,或者和剛纔位置的頂點焊合,然後再次檢測頂點重疊和麪重疊,重疊的頂點數和重疊的面數分別降低爲36和14,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


由此可見,通過移除或焊合,可消除頂點重疊或面重疊,以此類推,可消除所有重疊的頂點和重疊的面。
通過以上的圖解,大家已經知道如何找到重疊的面和重疊的頂點,以及如何消除重疊面和重疊的頂點,同時也瞭解了什麼是面重疊和頂點重疊,那麼到底面重疊對Unity3d的光影烘焙質量有什麼影響呢?下面我們就一起來討論一下。

前面我們已經討論過模型面數超高對Unity3烘焙質量的影響,而且得到結論,面數太高,會導致所有面展平後在lightmap中所佔的比例大幅減小,進而使烘焙後出現各種各樣的缺陷,面重疊和模型面數超高一樣,展平後,那些重疊在有效面後面、對場景造型沒有任何貢獻的毫無意義的多餘面也會擠佔有效面的UV空間,使得有效面在lightmap中的比例縮小,所以必須清除重疊面。重疊面不僅對場景造型沒有任何貢獻,而且展平後還會爲渲染烘焙這些毫無意義的面消耗很長的時間,同時因爲擠佔了有效面的lightmap的UV空間,使得有效面的UV空間相應減小,從而導致前面所述的各種烘焙缺陷,所以要加速烘焙、提高烘焙質量,清除重疊面是不容忽視的。對於使用Cinema4D和Maya建模的童鞋,都可以在自己習慣的建模軟件中找到檢測重疊面的功能,大家可自己去嘗試,這裏就不一一贅述了。

⑶ lightmap UV佈局也是影響Unity3d烘焙質量最重要的因素

雖然降低模型面數、消除面重疊都會加速烘焙渲染和提高烘焙質量,但是如果有效面的Lightmap UV的佈局如果不合理,最終的烘焙依然會很耗時、烘焙質量依然會很差。那麼什麼叫Lightmap UV佈局不合理呢?一方面是Lightmap UV沒有充分利用lightmap UV空間,所有UV區塊集聚在lightmap UV的某一部分,使大量的UV空間都白白浪費。另一方面就是Lightmap UV的佈局因根據面的大小調整對應UV區塊的比例,使得lightmap在所有物體上均勻分佈,這個可能有些童鞋不大理解,這麼來說吧,所謂的不均勻,就是光照圖在一些物體的某些面很清晰,而在另一些面很模糊,大家在貼材質時經常會遇到,貼圖在物體不同面上的大小不同,這就是貼圖的UV分佈不均勻造成的,和這個道理一樣,lightmap UV的佈局也應考慮均勻分佈,爲了消除烘焙缺陷,如果極端地使用每個物體的“Scale in Lightmap”來調整物體的UV比例,是無法做到Lightmap UV的均勻分佈的。

如下圖所示的Lightmap UV佈局使得所有UV區塊都聚集到了這個ligtmap UV的左下角,這使得所有面在整個lightmap UV中所佔的比例都很小,導致有些面所受的光影效果無法充分表現而造成最終的烘焙缺陷,同時爲了消除烘焙缺陷,只能定性地增大“Scale in Lightmap”這個參數反覆測試,無法精確控制UV的佈局,而且隨着每個物體“Scale in Lightmap”參數的增加,烘焙渲染越來越慢,因此小姐姐個人認爲,Unity3d的lightmap UVs展平功能有致命的缺陷,所以強烈建議童鞋們使用自己習慣的3D建模軟件來展平lighmap UV,例如3dMax、Maya、C4D等。

在這裏插入圖片描述在這裏插入圖片描述


下圖是小姐姐在3dmax中展平的前面烘焙的案例場景的lightmap UV,從下圖可見,四張lightmap的UV佈局充分利用了UV空間,沒有像Unity3的展平那樣,全部集聚在某一局部,而是均勻地分佈在整個lightmap UV空間中,同時所有面的UV大小也是均勻分佈的,烘焙後不會出現lightmap局部清晰或模糊現象。更不會出現任何烘焙缺陷。

在這裏插入圖片描述在這裏插入圖片描述


下圖是將在3dmax中展平的lightmap 導入Unity3d,並經高質量烘焙後得到的光影圖,由圖可見,Unity3d老老實實地按照3max展平的UV高質量地烘焙出了整個場景的光照圖。一氣呵成,無任何缺陷,且總共用時7.5分鐘。從前面的截圖大家都已經看到,整個場景沒有任何烘焙缺陷,而且光影圖非常清晰,明暗層次分明。

在這裏插入圖片描述在這裏插入圖片描述


由以上的圖解可見,lightmap UV的佈局,的確會影響着烘焙的質量,也就是合理的UV佈局,不僅會加速烘焙,而且可以提高烘焙質量,不合理的UV佈局,不僅會導致烘焙緩慢,而且很難保證烘焙質量。
正是小姐姐在模型階段採用了3dmax最優化低面數精簡建模方法構建的整個場景,並在3d中排除了所有的重疊面,同時在3d中合理地拆分(展平)了lightmap UV,所以在Unity3d中僅用了7.5分鐘就快速高質量地烘焙出了整個場景。當然,一些童鞋會說,自己烘焙一些實例,也是幾分鐘完成了,也沒什麼烘焙缺陷,那是因爲你所用的案例模型都是很簡單的,並且經過優化處理的,當然烘焙很快,而且沒有任何問題,但是一換成實際的項目場景,立即就卡住不動了,少則幾個小時,多則幾天烘焙不出來。所以只要按照小姐姐上述的方法,可在幾分鐘內快速完成實際項目的烘焙渲染。當然其中會涉及到一些經驗。

9. 分步/分批次烘焙渲染

一些童鞋的機器可能配置太低,整個場景一鍵烘焙可能喫不消,或者烘焙太慢,此時可以分步烘焙渲染,也就是一次烘焙一個或一組物體。有時只有某些物體有烘焙缺陷,通過分步/分批次烘焙,可避免無缺陷物體的重複烘焙時間。下圖所示爲單獨烘焙1層的情況下,僅用時2分多鐘。依照這樣的方法,然後分別選擇2層、3層進行單獨烘焙,每次只選擇一個或一組物體來烘焙,前面已經烘焙完成的物體不會受影響,這樣不僅會減輕一次烘焙的機器負載,而且避開了一些物體的重複烘焙,尤其是當某個物體烘焙出現問題的時候,可將排查範圍鎖定在所選擇的物體內。對於機器配置較低的童鞋,無需再爲升級硬件支付額外的成本,這個功能是小姐姐個人的一些經驗所得。

在這裏插入圖片描述在這裏插入圖片描述


10. 烘焙渲染分類

烘焙渲染根據燈光和物體的狀態可分爲靜態燈光下靜態物體的烘焙、靜態燈光下動態物體的烘焙、動態燈光下靜態物體的烘焙、動態燈光下動態物體的烘焙四種。對於早先從事3D動畫的童鞋,肯定不理解爲什麼要有這四種分類呢,因爲動畫只需將場景中的所有物體渲染成圖片序列(視頻),終端用戶只需要播放就可以了,而VR和遊戲是需要用戶和場景進行交互操作的,兩者的機理有本質的區別,作爲VR和遊戲的開發程序,Unity自然有自己獨特的烘焙渲染方式。下面我們就這四種烘焙渲染方法一一展開討論,爲了簡化問題,我們設定一個比較簡單的場景,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


⑴ 靜態燈光下靜態物體的烘焙

前面我們討論的斯蓬扎宮的烘焙就是靜態燈光下靜態物體烘焙的典型實例。之所以稱之爲“靜態燈光下靜態物體的烘焙”,是因爲除相機外,燈光的狀態(位置、方位角、顏色、強度等)以及物體的狀態(位置、方位角、比例、材質等)相對時間恆定不變,簡單地說,就是燈光和物體的狀態不隨時間變化。這種烘焙的設置前面提到過,這裏我們再討論一下,其設置如下圖,即第一步先將產生陰影的主光源的燈光模式(Mode)設定爲“baked(烘焙模式)”。第二步將需要烘焙的物體設定爲“Static(靜態)”,如果不設定爲靜態,烘焙之後沒有任何效果。第三步將lighting(光照)面板中Realtime Lighting(實時光照)下的Realtime Global ILLumination(實時全局照明)選項取消勾選,保留Mixed Lighting(混合照明)下的Baked Global ILLumination(烘焙全局照明)選項的勾選。然後進行必要的其他設置,烘焙上面的場景就得到上圖的靜態燈光下靜態物體的烘焙效果。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


這種烘焙方式在烘焙完成後,所有直接光照和全局光照完全被轉移到光照貼圖中,此時無論如何調整燈光(燈光強度、燈光顏色、燈光角度),甚至將燈光模式改爲mixed或realtime,或者勾選"realtime Global Illumination",都對場景無任何影響,也就是說,這種方式烘焙的場景,運行時燈光是不能改變的(如下圖所示),大家可以自己試一試。

在這裏插入圖片描述在這裏插入圖片描述


有童鞋可能會問,這種烘焙方式,場景中是不是不能有運動物體,當然不是啦,只是運動物體就像被烘焙忽略一樣,沒有任何光影效果而已,但運動在場景中是存在的,並且保持着原有的運動效果,簡單地說,這種烘焙方式不適合有運動物體的場景。

下面是“斯蓬扎宮”應用這種方式烘焙的正午時分的截圖,其效果可以與Vray的渲染效果媲美,當然這需要一些經驗。

在這裏插入圖片描述在這裏插入圖片描述

小姐姐的文章,只能讓大家理清思路,要真正掌握Unity的美工製作流程,必須學練結合,還需要前人的言傳,有些東西畢竟還是沒法用圖文來表達的,有興趣的童鞋可以關注小姐姐的《Unity模型預處理布光烘焙後處理特效美工場景優化實戰視頻教程》,在聽講的同時,通過多案例臨摹和感悟,才能脫開教程,將所學的技術應用於實際項目,如有需求可V詢(qtpl_wx)小姐姐。


⑵ 靜態燈光下動態物體的烘焙


這種方式適合燈光靜止且有運動物體的場景(如馬路上行駛汽車的城市場景)。爲了演示靜態燈光下動態物體的烘焙,我們在上面的場景中,添加一個Cube(立方體),用它來代替運動的物體,它可能是一輛汽車、一個角色,或者是其他的運動物體,總之,爲了簡化,這裏用一個運動的立方體來表示,位置如下圖所示,按照前面的概念,要烘焙這個立方體,也得勾選“Static”,否則烘焙後沒有效果。所以選中這個立方體,然後勾選“Static”,設定這個立方體爲靜態(運動的物體是不該設爲靜態的),然後重新烘焙整個場景。

在這裏插入圖片描述在這裏插入圖片描述


下面用一個Gif動態圖像來看看整個場景烘焙後的情況:

在這裏插入圖片描述在這裏插入圖片描述


由上圖可見,立方體的烘焙是錯誤的:1. 立方體投射的陰影沒有跟隨立方體運動;2. 立方體所接受的陰影沒有變化;3. 立方體進入暗區和亮區光照沒有變化。

由此可見,除了相機,如果場景中有運動的物體,不適合使用靜態燈光下靜態物體的烘焙方式,而應改用“靜態燈光下動態物體的烘焙”方式,具體步驟如下:首先將運動物體解除“Static”設定,或者說,運動物體不要勾選“Static”選項;接下來將主光源的燈光模式(Mode)設定爲Mixed(混合)模式;然後將lighting(光照)面板中Realtime Lighting(實時光照)下的Realtime Global ILLumination(實時全局照明)選項取消勾選,保留Mixed Lighting(混合照明)下的Baked Global ILLumination(烘焙全局照明)選項的勾選。最後將Mixed Lighting(混合照明)下的Lighting Mode(光照模式)改爲“Shadowmask(陰影遮罩)”,這樣實時光照的陰影就可以和烘焙陰影很好地融爲一體(這裏特別說明一下,所謂實時光照的陰影和烘焙陰影融爲一體,是指兩者陰影的亮度一模一樣)。有些童鞋想用3dmax、C4D或Maya自帶的烘焙模塊來爲Unity3d烘焙場景,對於靜態燈光下靜態物體的烘焙,這是完全可以的,但是一旦有運動物體,就要用到實時光照,此時實時燈光的實時陰影亮度很難做到與其他3D軟件中烘焙的陰影亮度完全一樣,當兩者重疊在一起時,實時陰影很暗,看上去就像挖了一個黑洞一樣的感覺,這個大家自己去試試就知道了,有了這樣的嘗試之後,大家就理解什麼叫“實時光照的陰影和烘焙陰影融爲一體”的概念了,如果用其他3D軟件來烘焙,導入Unity3d後,陰影很難融爲一體,所以建議大家不要使用其他3d軟件來烘焙Unity3d場景,免得白白浪費時間。

Unity靜態燈光下動態物體的烘焙設置步驟如下四圖所示:

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


最後還需要爲運動物體設定“Light Probe Group(光探測器組)”,用來收集運動物體可能到達處的環境光照信息,以保證運動物體在不同位置的正確光照。也就是在Heirarchy面板的空白處右鍵點擊,在彈出的菜單中點擊light下的“Light Probe Group(光探測器組)”,場景中就會出現帶有四個頂點的立方體網格,這就是光探測器。具體步驟圖解如下:

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


下圖爲調整光探測器的過程,其中需要不停地選擇和使用“Duplicate Selected(複製選擇的)”命令,然後移動頂點,最終讓光探測器的頂點密佈運動物體的運動範圍,範圍比實際要大些。

在這裏插入圖片描述在這裏插入圖片描述


光探測器器佈置好後,清除之前烘焙的數據(Clear Baked Data),然後重新烘焙(Generate Lighting),如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


重新烘焙後得到如下圖所示的結果,由圖可見,運動物體的光影這回正確了。

在這裏插入圖片描述在這裏插入圖片描述


這種烘焙完成後,改變燈光的光強度、顏色或角度以及運動物體的狀態,場景會相應變化,簡單地說,這種方式烘焙完成的場景,運行時可以改變燈光和運動物體的狀態(但運動物體必須在光探測器組範圍之內),如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


有童鞋馬上會問,不是在說靜態燈光下動態物體的烘焙嘛,燈光能改變,就不是靜態燈光了,是的,之所以演示這種烘焙後燈光可以改變,是因爲在實際應用中,肯定有童鞋會發現這個現象,但是還是建議這種烘焙後不要改變燈光,因爲會發生一些怪異的現象,比如,場景中會出現雙光斑和顏色不一致,具體大家自己可以去嘗試,正是因爲這個原因,所以小姐姐把這種方式歸類到靜態燈光之列,用於靜態燈光下靜態物體的烘焙,並在運行時不要改變燈光。

下面是應用這種方式烘焙的“斯蓬扎宮”的截圖,要瀏覽這種方式烘焙的場景運行時的效果,可以去前面的網址看視頻。

在這裏插入圖片描述在這裏插入圖片描述


⑶ 動態燈光下靜態物體的烘焙

如果燈光在運行時需要改變且場景中無運動物體(如窗簾慢慢拉開時陽光投逐漸射進室內的照明、涵洞中的油燈照明等),就需要使用這種方式來烘焙。這種烘焙方式的設置如下圖所示:



在這裏插入圖片描述在這裏插入圖片描述


下圖是這種方式烘焙的效果及烘焙後改變燈光狀態時場景的變化情況,由圖可見,這種方式烘焙的場景在運行時可改變燈光。

在這裏插入圖片描述在這裏插入圖片描述


下圖是應用這種方式烘焙的“斯蓬扎宮”的兩張截圖,要瀏覽這種方式烘焙的場景運行時的效果,可以去前面的網址看視頻。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


⑷ 動態燈光下動態物體的烘焙

對於燈光在運行時需要改變且有運動物體的場景用這種方式來烘焙,設置方法與動態燈光下靜態物體的烘焙設置相同,如下圖所示,所不同的是,需要爲運動物體設定光探測器組,方法同靜態燈光下動態物體烘焙中的光探測器組的設定,這種方式烘焙的效果如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


這種方式烘焙的場景在運行時燈光也可改變,詳見上一方式中的動態Gif圖。

下面是這種方式烘焙的“斯蓬扎宮”的截圖,要想瀏覽這種方式烘焙的場景運行時的效果,可以去前面的網址看視頻。

在這裏插入圖片描述在這裏插入圖片描述


⑸ 四種烘焙方式的比較

上面只是和大家孤立地討論了四種烘焙方式的設置和烘焙效果,下面對四種方式進行橫向比較,以方便童鞋們對四種方式有更深入的理解,這裏我們設定如下所示的場景,牆壁、地面、四個球體爲靜態,四個立方體做活塞運動。

下圖爲靜態燈光下靜態物體的烘焙方式(即baked+baked Glaobal Illumination)烘焙完成的場景,有同學肯定有點懵圈,前面說的靜態燈光下靜態物體的烘焙從來沒提到過運動物體,這個怎麼會有運動物體呢,其實這種方式是可以有運動物體的,只不過這裏也爲運動物體引入了光探測器組,運動物體是用烘焙到光探測器組中的光照數據照明的,前面之所以沒提運動物體,是爲了特別強調靜態物體的“靜態”!由下圖可見靜態燈光下靜態物體的烘焙方式,靜態物體表面的光影和AO非常精細,烘焙結果相對其它方式來說,對硬件的開銷最小,但靜態物體和動態物體表面均不會產生高光,且運動物體不產生投影,運動物體進入明暗區域表面只有明暗變化,並沒有接受真正的陰影。如果對於運動物體的光影要求不高,可優先採用這種烘焙方式。

在這裏插入圖片描述在這裏插入圖片描述


下圖爲靜態燈光下動態物體的烘焙(Mixed+Baked Global Illumination)結果,由圖可見,這種方式烘焙的場景,除了靜態物體的表面的光影和AO精細之外,靜態物體和動態物體均有高光,動態物體不僅接受陰影,而且產生真實的投影,相對於上一種方式來說,機器開銷稍大一些,這種方式使用的最多的烘焙方式。更正:下圖中註釋“烘焙(Mixed)應爲混合(Mixed)”。

在這裏插入圖片描述在這裏插入圖片描述


下圖爲動態燈光下靜態物體和動態物體兩種烘焙方式的混合體,這種方式烘焙,靜態物體和動態物體表面均有真實的高光和陰影,且燈光在運行時可改變,但靜態物體表面的光影沒有其它方式精細,對於運行時需要改變燈光的場景,可採用動態燈光下靜態物體的烘焙或動態燈光下動態物體的烘焙。

在這裏插入圖片描述在這裏插入圖片描述


好了,至此對於四種烘焙方式就和大家討論完了

● Unity夜景烘焙

前面小姐姐以“斯蓬扎宮”日景的烘焙作爲切入點,和大家一起討論了3D模型導入Unity3d的方法、Unity3d的簡單布光和烘焙,並介紹了Unity3d常見的烘焙缺陷及其解決方案和加速烘焙的方法,逐步深入到Unity3d的四種烘焙方式,通過實例的圖解,相信童鞋們對unity3d的烘焙已經有了進一步的理解。實際應用中除了日景的烘焙,也常常涉及到夜景的烘焙。下面還是以“斯蓬扎宮”的場景爲例,和童鞋們繼續討論夜景的烘焙。前面的例子都只使用了一盞模擬太陽的平行光,在下面的例子中將使用多盞燈光來烘焙。

1. 燈光佈設

和3D場景一樣,Unity3d的場景布光也要有主光源,也就是照亮場景的主要光源,其作用除了點亮場景外,還起着主控場景意境和氣氛的作用。相信大家對“斯蓬扎宮”的場景強控已經很熟悉了,對於這個場景,小姐姐認爲夜景應保持一份神祕和靜謐,因此考慮在兩層迴廊佈設適當適量的“宮燈”,燈光顏色採用暖色調。

在場景中添加如下圖所示的“宮燈”模型,置於迴廊頂部,具體位置如下圖所示

在這裏插入圖片描述在這裏插入圖片描述


2. 烘焙設置

爲“宮燈”模型添加對應的燈光,將等類型設爲點光源“Point”,燈光強度設爲1,燈光顏色設爲橙色,燈光模式設爲混合(Mixed),燈光範圍設爲9左右,爲燈光設置Cookie,並將燈光置於“宮燈”模型下部的地面附近,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


將“宮燈”模型及其燈光一起選中,通過複製,每層左右兩邊各佈置兩組,然後向二層複製四組,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


3. 夜景烘焙

勾選下圖所示的Mxied Lighting下的“Baked Global Illumination”(也就是採用靜態燈光下動態物體的烘焙方式進行烘焙),然後點擊右下角的“Generate Lighting”進行烘焙。

在這裏插入圖片描述在這裏插入圖片描述


烘焙後的效果如下圖所示,烘焙用時6.8分鐘(408.155秒)

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


8個點光源共同作爲主光源點亮了整個場景,各自產生了限定在一定範圍包內的柔和陰影,但是作爲主景的獅頭雕還不夠突出,所以考慮在獅頭的上方佈設兩盞模擬射燈的點光源,同時在獅頭前方的地面上也佈設一盞模擬射燈的點光源,三盞點光源共同作爲場景的輔助光源一起點亮獅頭,但不宜過亮。具體設置如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


另外,爲了強調另一端的兩個裝飾鼎,分別在其附近各佈設一盞點光源,作爲裝飾性的輔助光,照亮場景局部,具體設置如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


然後重新烘焙,結果如下圖所示,烘焙用時7.4分鐘(448.196秒),要瀏覽這種烘焙運行時的動態效果,可以去前面的網址看視頻。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


● Unity混合烘焙

前面討論了四種基本的烘焙形式,但實際應用中,既有靜態燈光,又有動態燈光,既有靜態物體,又有動態物體,這種情況下的烘焙就叫混合烘焙。

前面的例子在烘焙時,要麼只選擇光照模式爲Realtime Lighting下的Realtime Global Illumination,要麼只選擇光照模式爲Mixed Lighting下的Baked Global Illumination,而系統默認兩項都被選擇,如下圖所示,那麼到底是該都選擇呢,還是隻選擇一項呢?下面給出官方的一段建議,原文如下:

The most flexible way to use the lighting system is to use Baked GI and Realtime GI together. However, this is also the most performance-heavy option. To make your game less resource-intensive, you can choose to disable Realtime GI or Baked GI.

其意思是:使用照明系統最靈活的方法是一起使用Baked GI和Realtime GI(也就是兩項都選擇),但是,這也是性能最沉重的選擇。爲了減少資源和時間消耗,您可以選擇禁用Realtime GI或Baked GI(也就是隻選擇一項)。

根據上面官方的建議,靜態燈光下靜態物體的烘焙,靜態燈光選擇Baked的模式,光照模式只選擇Baked Global Illumination;靜態燈光下動態物體的烘焙,靜態燈光選擇Mixed模式,光照模式也只選擇Baked Global Illumination,併爲動態物體在其運動範圍內添加光探測器組;動態燈光下靜態物體的烘焙,動態燈光選擇Realtime模式,光照模式只選擇Realtime Global Illumination;動態燈光下動態物體的烘焙,動態燈光選擇Realtime模式,光照模式也只選擇Realtime Global Illumination,併爲動態物體在運動範圍內添加光探測器組。這樣的匹配方式烘焙場景最節省硬件開銷和時間。但對於混合烘焙方式,靜態燈光就選擇Mixed模式,動態燈光選擇Realtime模式,也就是在一個場景的多盞燈光中,有的燈光設爲Mixed,有的燈光設爲Realtime模式,而光照模式Baked GI和Realtime GI兩項都要同時選擇,這樣Mixed燈光自動對應Baked GI,Realtime燈光自動對應Realtime GI。此時有童鞋會問了,不是說同時選擇兩種GI方式,會增加硬件開銷嗎,爲什麼還要同時選擇呢,爲了得到更真實的複雜光影效果,混合烘焙必須同時選擇兩種GI,但有方法來優化場景來緩解額外的硬件開銷。

在這裏插入圖片描述在這裏插入圖片描述


上面的意思簡單地圖示如下

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


對於一般用戶來說,靜態燈光下動態物體的烘焙方式足夠用了,這是用的最多的一種烘焙。

火車或汽車出入隧道、室內外出入、遊戲角色出入涵洞、室內開關燈這樣的場景,使用混合烘焙,光感會更好。當然小姐姐個人認爲,使用前面所說的四種基本烘焙方式之一代替,也能獲得好的效果。

有了前面知識的鋪墊,混合烘焙不再是問題,這裏就不進行圖解了,有興趣的童鞋可以自己去嘗試。

● Unity室內烘焙

下面以一個小客廳爲例,和童鞋們一起討論Unity3d的室內烘焙,一方面是對前面知識的綜合應用,另一方面滿足以下做裝修童鞋的學習需求。

話不多說,開工!這個例子的3D場景如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


拆分好的UV如下圖所示

在這裏插入圖片描述在這裏插入圖片描述


導入Unity3d後的場景情況如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


這個場景比較簡單,一個窗戶、一個沙發、一個茶几、一個書櫃、兩個落地燈、一個牆面裝飾、還有一個掛畫、茶几上一個杯子、兩盆綠植,這裏我們設想將場景烘焙成陰天的白晝氣氛,也就是沒有直射太陽光,室外光線完全是大氣折射的太陽光,所以我們確定這個場景的主光源爲從窗戶投射的光線,可以使用Unity3d的面光源置於窗戶附近,但我們這裏選用Unity3d的材質燈光,也就是將某個模型的材質勾選“自發光”,這個模型就成了燈光了。選中窗戶玻璃,勾選其材質中的自發光(Emission),將自發光強度設爲1.5,發光顏色設爲白色,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


因爲這個場景不可能有運動物體,光線也不會變化,所以選用靜態燈光下的靜態物體的方式烘焙場景,所以將自發光材質的Global Illumination(全局光照)設爲Baked,勾選光照面板中的“Baked Global Illumination”,然後烘焙,得到如下圖所示的結果(烘焙用時5分鐘):

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


從上圖可見,場景太暗,但明暗關係已經有了,如果反覆烘焙,太浪費時間,我們設想通過photoshop來調色,需要說明的是,這裏所說的調色不是簡單的圖片調色,而是對整個場景調色。如下圖所示,將一個特殊的色帶文件與相機關聯起來,對這個文件調整,就會調整相機中的場景,這樣我們將這個文件(png圖片)用ps打開,然後截取一張相機視圖的圖片,按照圖片調色的方法,對截取的圖片調色,然後將圖片調整的參數應用於那個色帶文件,保存色帶文件後,Unity3d的場景就回作相應的調整,關係就是這樣。

在這裏插入圖片描述在這裏插入圖片描述


下面我們就來調色,首先抓取相機視圖的圖片,然後在ps中打開,同時也將剛所說的色帶文件也用ps打開,如下圖:

在這裏插入圖片描述在這裏插入圖片描述


首先調一下截取的相機視圖圖片的亮度和對比度,亮度88,對比度-50,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


然後對色帶也做這樣的調整,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


然後保存色帶文件,Unity的相機視圖就會作相應的調整,調整後如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


原理大家都明白了吧,這樣就是以用ps靈活地爲Unity3d場景調色了,只要Unity3d烘焙出場景的明暗關係,剩下的就交給ps了,這樣可以節省大量反覆測試烘焙的時間。按照上面的方法對相機視圖進行色相飽和度、色彩平衡等調整後,相機視圖的場景如下:

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


好了,場景調色就到這裏。

木地板應該有反射,所以我們需要引用Unity3d的“Reflection Probe(反射探測器)”,在層級面板空白處右鍵單擊,在彈出的菜單中選擇light下的“Reflection Probe”命令,場景中會出現一個四面體線框,如下圖所示,在反射探測器的檢視面板中按下節點命令,四面體的四個面上會出現黃色下把手,拖動可以調節探測器的大小,按下探測器檢視面板中的移動按鈕,可以調整探測器的位置,用這兩個命令配合,將探測器調至和房間一樣大,或者說讓探測器完全包絡這個房間,烘焙的時候,會將整個房間烘焙成一個比較小的全景圖貼在探測器上,供具有反射的材質映射來實現真實反射。這裏說明一下,當場景比較複雜時,可以用多個反射探測器拼合來滿足場景的外形,場景中不需要反射的地方,就不需要佈置反射探測器了。

在這裏插入圖片描述在這裏插入圖片描述


反射探測器佈置好後,需要重新烘焙,反射數據是通過烘焙獲得的。如果熟悉了,烘焙之前就佈置好反射探測器,免得重複烘焙。烘焙之後結果如下

在這裏插入圖片描述在這裏插入圖片描述


上圖反射效果不太好,下面我們爲木地板加一個實時反射,效果如下:

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述

現在我們將玻璃的材質燈光關閉,用平行光來模擬陽光,重新烘焙(用時6分鐘左右)並開啓反射後效果如下:

在這裏插入圖片描述在這裏插入圖片描述


在這個例子中引入了ps的後處理調色,以避免爲達到好的色調和顏色及明暗對比反覆烘焙浪費很多時間,好了,這個例子就討論到這。

● Unity沙漠庭院烘焙

下面和童鞋們再討論一個“沙漠庭院(The Courtyard)”的烘焙,也算是對Unity烘焙的綜合應用,其3D場景如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


因爲拆分的UV比較多,這裏就不上圖了,導入Unity後的場景如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述

日景烘焙,按下圖設置模擬太陽的平行光和光照參數

在這裏插入圖片描述在這裏插入圖片描述


爲場景中模型燈設置材質燈光參數如下圖,這裏第二次用到材質燈光,然後點擊光照檢視面板中的“Generate Lighting”,開始烘焙場景。

在這裏插入圖片描述在這裏插入圖片描述


噔噔蹬蹬,經歷28分鐘的烘焙,結果如下

在這裏插入圖片描述在這裏插入圖片描述


這個場景是官方的。沒有提供3D模型,小姐姐想了很多辦法才導出FBX文件,面數高達300多萬,測試烘焙了幾次,光照圖好多都設到了4096x4096,總有問題,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


那這些烘焙缺陷如何消除呢?前面小姐姐說過,模型面數太多是導致烘焙缺陷的重要因素,因爲同樣分辨率的光照圖,模型面數越多,分配給每個面的區塊就越小,模型面數越少,分配給每個面的區塊就越大,區塊越大,光照圖越清晰,區塊越小,光照圖被拉扯得越嚴重,缺陷就會越多。下圖爲官方的模型:

在這裏插入圖片描述在這裏插入圖片描述


下圖爲小姐姐用低面數最優化精簡單面建模方法重新構建的模型(花了兩天時間,總面數50萬,降低了6倍),

在這裏插入圖片描述在這裏插入圖片描述


另外,小姐姐烘焙這個場景後,發現模型的貼圖有問題,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


上面這些貼圖問題其實是很多人經常遇到的,現在我們回到3d中,看看3d中的情況,如下圖所示

在這裏插入圖片描述在這裏插入圖片描述


由上圖可見,3dmax場景打開後,模型顯示破破爛爛,這也是很多網友提問的問題,網上解答的不是讓修改顯示驅動,就是模型偏離原點太遠,小姐姐認爲不是這些原因造成的模型破爛,按上圖的標註勾選背面去除,立即就消除了模型的顯示破爛,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


由下圖可見,Unity中的問題在3dmax場景中也存在

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


另外,貼圖的分辨率爲4096X4096,精度很高,爲什麼在Unity中很虛呢?這裏不得不和大家討論一下UV問題,通常情況下,很多人在3dmax中習慣用UVW map來調整模型的材質貼圖,對於簡單的模型,這種方法沒問題,但是對於複雜的模型,用標準的平面、圓柱、球面等貼圖座標,橫豎都不正確,就像上面的圖示一樣,這種現象稱爲UV扭曲或拉伸,這是不正常的貼圖。要解決UV扭曲、拉伸或擠壓,必須掌握UV拆分(也稱爲“展UV”,通俗地講就是展平UV),前面提到過拆分UV,一聽到拆分UV,很多童鞋一個頭兩個大,覺得拆分UV很難掌握,這裏小姐姐不想對拆分UV進行深解,只是通過對比,讓大家對UV拆分有個大概的概念。

爲了找到上面例子中貼圖被扭曲和拉伸的原因,我們將模型的貼圖換成棋盤格,因爲上面例子中的貼圖不容易看出問題,棋盤格材質是所有3D軟件用來顯示UV排列的一種方式。

下圖是上面的實例場景模型貼圖換成棋盤格的情況

在這裏插入圖片描述在這裏插入圖片描述


下面我們一塊一塊來圖示分析

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


棋盤格的排列代表模型的UV座標情況,或者說棋盤格的排列是由模型的貼圖座標控制的,棋盤格排列有問題,貼圖一定也會有問題。從上面的圖解可見,場景貼圖的UV座標是不正確的,棋盤格線性排列,貼圖紋理一定會朝一個方向;棋盤格錯亂,貼圖紋理也一定錯亂;棋盤格扭曲,貼圖紋理也一定扭曲;棋盤格密集(擠壓)或拉伸,貼圖紋理一定會變虛,因爲拉伸會導致紋理被拉大,擠壓會導致紋理皺皺巴巴,這兩種情況都會使貼圖變得模糊。上面的圖示中模型貼圖局部密集,相信大家都遇到過。

爲了矯正不正確的貼圖座標,模型必須使用3dmax的Unwrap UVW修改器進行手工UV拆分,或者叫手工展UV(展平UV座標),如下圖所示。對於材質的紋理貼圖座標,使用系統自動拆分UV,常常是不正確的,所以必須使用手工來拆分。對於使用C4D、Maya、犀牛、Su的用戶,也有相應的功能,這裏就不贅述了。

在這裏插入圖片描述在這裏插入圖片描述


拆分或展平的UV座標是被保存在貼圖通道中的,貼圖通道設置在Unwrap uvw和材質面板各有一個,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


Unwrap uvw面板的貼圖通道(Map Channel)用來設置拆分的UV座標保存在哪個通道,通道可以有8個。材質面板中的貼圖通道(Map Channel)用來設置這個材質貼圖的排列受哪個UV座標的貼圖通道控制,系統默認固有色(或過度色)貼圖受通道1(即Map channel 1)控制,展UV(Unwrap uvw)修改器面板的貼圖通道(Map Channel)默認是2,因爲一般情況下都是用UVW Map調整貼圖座標,這個UV座標佔據通道1,有的童鞋使用展平修改器時,發現模型的貼圖沒有變化,是因爲展平修改器的貼圖通道和材質的貼圖通道不一致,模型的貼圖沒有受到你正在使用的材質貼圖展平UV的控制,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


展平修改器一般情況下是用於控制光照貼圖的(也就是控制烘焙貼圖),光照貼圖默認佔據通道2,所以展平修改器的通道默認是2,有時因爲模型的貼圖座標不正確,需要手工拆UV,也就是需要使用一下展平修改器,此時必須將通道改爲1,這個大家必須注意,否則拆了半天,材質貼圖沒變化。

剛纔小姐姐說,貼圖通道可以有8個,通道1默認是分配給材質固有色貼圖的,通道2默認是分配給光照貼圖的,其他6個可以用來展平法線貼圖、高光貼圖、陰影貼圖、AO貼圖等等,一般我們只需要過度色貼圖和光照貼圖兩個通道。

UV展平後有兩種用途,一種用於美工在photoshop中繪製貼圖,另一種用於控制紋理貼圖,沒有美術功底的童鞋,當然不會繪製貼圖啦,那就用展平的UV座標來控制紋理貼圖好了。

我們手工展UV是爲了矯正不正確的紋理貼圖,所以展平UV的貼圖通道就改爲1。

展平UV大家可以想象成拆盒子一樣,要拆盒子,得有縫,沒有縫,是拆不開的,拆UV,一般也得有縫,UV縫可以系統自動定義,也可以手工繪製,系統定義的縫經常不是我們所想要的,所以對於控制材質貼圖的UV,我們一般都是手工來繪製拆縫的,這裏就不具體繪製拆縫了。拆縫繪製好後,就可以展UV了。展平UV修改器的展平方式很多,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


正確拆分(或展平)的UV,棋盤格應該是方方正正(長寬相等或近似相等),排列整齊,這樣貼圖貼上去纔沒問題,如下圖所示,絕對不允許排列錯亂、扭曲、拉伸或擠壓,否則就像上面的例子一樣。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


另外在一個物體中,對於一種材質,棋盤格的密度必須相等,除非特殊要求。棋盤格的除了長寬相等、排列規整外,還必須合理,什麼是合理呢?例如下圖中的迴轉體,網上很多例子都將其端面的棋盤格排列成下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


小姐姐個人認爲迴轉體的端面,應該讓棋盤格繞環向(或圓周方向)排列,爲什麼呢,假設這個物體是個木頭,端面的紋理應該是一圈一圈的年輪,按照上圖的排列,木紋貼上去,紋理肯定是線性的,這是不正確的,再假設這個物體是一個機械零件,端面的紋理應該是車削加工的刀紋,一圈一圈的,按照上面的排列,金屬紋理貼上去,也不會又一圈一圈的刀紋,而是線性紋理,這是不合理的UV拆分,爲什麼在這裏要強調這個問題呢,因爲我們前面所討論的場景,好多UV座標有問題的物體就是迴轉體。

小姐姐對上面例子的模型重新拆分貼圖UV,並使用“條帶展平”拆分後得到下圖所示的效果,錯誤的UV座標得到了矯正,而且上下面的棋盤格沿圓周方向排列,這纔是合理的,如果貼上磚紋,紋理自然會環向分佈。由圖可見,UV座標消除了錯亂、扭曲、拉伸和擠壓

在這裏插入圖片描述在這裏插入圖片描述


同理,對其他有問題的模型重新拆分貼圖UV後,效果如下:

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


通過手工拆分UV之後,錯亂、扭曲、拉伸的UV得到了矯正。這裏說明一下,對於一個物體,材質相同的部分,除了UV座標正確、合理之外,棋盤格大小必須一致,也就是UV座標的密度必須相同,如果UV密度不同,就像你的手心手背一樣。另外同一場景中的不同物體,如果材質及貼圖相同,UV密度也必須相同,這樣纔看上去協調。

那麼如何讓一個物體的所有面的UV密度相同呢?按照下圖所示的方法來完成:

在這裏插入圖片描述在這裏插入圖片描述


一個物體各個面的UV密度統一了之後,那材質和貼圖相同的不同物體如何統一呢?很簡單,選擇每個物體,點擊上圖中第六步的圖標,所有物體的UV就全部均勻一致了,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


將貼圖去換回原本的貼圖後,貼圖不再有錯亂、扭曲、拉伸和擠壓現象了,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述

UV正確拆分後,不需要太高分辨率的貼圖就可以讓模型的貼圖很清晰,貼圖分辨率太高,烘焙和實時運行時機器負載太大。

手工拆分貼圖UV後,也可以將其應用於光照貼圖,這就需要通過貼圖通道的複製將材質貼圖的UV複製給通道2,當然也可以用機器自動展平光照貼圖的UV。

好了,廢話就說到這裏,矯正了模型的貼圖座標之後,下面我們就來重新烘焙上面的例子,按之前設定的參數,重新烘焙後結果下(有時約12分鐘):

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


添加燈光輝光和地面模糊反射之後的效果如下:

在這裏插入圖片描述在這裏插入圖片描述

由圖可見,先前的問題都已經消除掉了。

這個場景的夜景烘焙後續會補充,下面大家一起來看看一個小區室外場景的烘焙

● 社區室外日景烘焙

這個案例的3D場景截圖如下所示,這個場景原本900多萬面,小姐姐用單面建模方法重新構建模型,只用了4.5萬面,用於VR和遊戲的場景必須用精簡建模,以保證手機端的流暢運行。

在這裏插入圖片描述在這裏插入圖片描述


在3D軟件中拆分每個物體的UV於通道2,一般童鞋一個物體拆分一個UV,實際上多個物體可以共享一個光照圖的UV,也就是選中多個物體一起拆分,得到一個UV,這樣這些物體就共享一個UV了,拆分好UV後倒入U3D,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


這個場景日景的燈光比較簡單,用一盞模擬太陽光平行光作爲主光源,並勾選陰影,用天光和環境光作爲輔助光源彌補主光源的盲區,其他參數按前面例子的方法設置,有前面知識的鋪墊,相信大家可以自行完成烘焙的相關參數設置,小姐姐烘焙完成的結果截圖如下(用時12分鐘):

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


烘焙完成後大家可按照前面小姐姐介紹的方法用ps對場景進行潤色,當然不是對圖片調色,而是借用圖片的調節,來調整整個場景的顏色,以避免在Unity中重複烘焙。這裏小姐姐就不上圖了,相信大家都可以自行完成這個操作的。

● 社區室外夜景烘焙

這個場景的夜景燈光相對來說比較複雜,小姐姐設想以建築的亮化霓虹燈和路燈共同作爲主光源照亮場景,用射燈作爲輔助性裝飾輔助光點綴建築,同時用微弱的天光和環境光也作爲輔助光照亮建築的邊緣,燈光佈設截圖如下:(待續)

● 遊戲場景烘焙

下面小姐姐和大家一起討論一下游戲場景的烘焙,當然也適用於VR場景。有的童鞋可能會問,爲什麼老講場景烘焙,因爲場景的烘焙和後處理是Unity作品的生命線,無論你的作品功能再強大,如果視覺效果太差,立即就被用戶否掉了,這就如同每個人的顏值,沒有好的視覺效果,別人是不會給你機會的,遊戲和VR場景的烘焙和後處理恰恰是決定作品視覺效果的命脈,因此掌握烘焙和後處理對於使用Unity3d開發遊戲和VR作品的從業者來說至關重要。

在討論遊戲場景的烘焙和後處理之前,小姐姐下面想和大家先探討一下網上很多人經常提問的Unity3d場景卡頓、烘焙質量差和烘焙超慢的問題,因爲這些問題常常都是模型引起的,因此我們就從模型說起。

1. 模型階段造成U3d光影烘焙問題和實時運行卡頓的因素探討及消除方法

需要說明的是,Unity3d自身不具有建模功能,儘管有一款可以在Unity3d內建模的插件,但其功能與流行的專業3D建模軟件相比,簡直弱爆了,因此小姐姐還是建議大家使用自己熟悉的專業建模軟件來構建3D場景。

前面的例子中小姐姐曾經提到,模型的面數太高,會影響光影烘焙的質量,原因是當模型的UV2(光照貼圖UV通道)被展平爲指定分辨率的貼圖座標時,模型面數太高,只有每個面都適當縮小才能容納到貼圖座標中,而這樣的縮小,使得一些面小到其所佔據的UV空間不足於完全表現其所接受的光照時,那麼這些面的光影就會集聚成黑色塊、灰色塊或白色塊,光照貼圖回貼到模型上時,就出現了黑斑、白斑、硬邊等缺陷,同時因爲每個面的UV空間太小,而光照圖被過分拉大而使模型上的光影看起來很虛。如果模型面數被大幅降低後,相對於高面模型來說,模型的每個面不需要縮太小就能完全容納到同樣分辨率的貼圖座標中,簡單地說,低面模型比高面模型展平後每個面所佔的UV空間要大得多,這樣就可以讓每個面所接受光影的黑灰白過度完全呈現,而不至於集聚成黑色塊、灰色塊或白色塊,也就不會出現常見的烘焙缺陷,同時沒有因爲光照圖被過分拉大,模型上的光影圖看起來就很清晰。另外,模型面數越高,烘焙過程中的渲染計算量越大,烘焙就越緩慢。明白了這個道理,大家就應該知道小姐姐爲什麼要反覆強調降低模型面數了,通俗地講,模型面數越高,烘焙質量越差,烘焙越緩慢,反之,模型面數越低(越少),烘焙質量越高,烘焙越快,因此,要得到好的烘焙質量和提高烘焙速度,必須大幅降低模型面數。

說到模型面數對烘焙質量和烘焙速度的影響,那麼小姐姐不妨將話題展得再開一些,也就是模型面數不僅僅只影響烘焙質量和烘焙速度,而是貫穿從建模到Unity3d作品實時運行的整個過程,爲什麼這麼說呢,且聽小姐姐慢慢道來。

習慣實體建模的童鞋,一定有這樣的經驗,當場景的規模比較大時,隨着模型的越建越多,場景越來越卡,卡到以至於建模進程推進非常困難,甚至鼠標點一下得等好長時間,材質貼圖和場景的編輯操作慢的讓人心煩,展平UV貼圖座標更是慢的出奇,當然一個比較大的場景一般是多人協同作業,但是最後總要合併到一個場景中的,卡頓還是不可避免的,好不容易完成了整個場景的構建,在導出FBX格式文件時又卡住不動了,最後只好分批導出。到了Unity3d中,和在3d軟件中一樣,場景的編輯操作也變得非常卡頓,硬着頭皮終於完成了Unity3d的場景搭建,實時運行時又被卡住了,發佈後的作品就更不用說了。有的童鞋說,自己的機器配置很高,不存在卡機問題,可是發佈後的作品不是在你自己的機器上運行,而是要在配置不高的用戶機或者手機、網頁端運行,所以不大幅降低模型面數,會影響從建模到作品發佈後的所有過程,換句話說,用於Unity3d的模型,必須最大限度地降低模型面數。要降低模型面數,得從建模一開始就採用最優化的低面數精簡單面建模,而不是等用實體建模完成後才設法減面。實體建模後的減面是被動的,而且這種減面容易造成破面和貼圖錯亂。

接下來小姐姐用圖解給大家展示一下單面建模的優越性:

下面第一張圖所示的場景是用實體建模構建,從截圖左上角的統計數據可見,場景的總面數爲9949281,將近1000萬個面,如下第一張圖所示,場景的編輯操作非常卡,想用邊線顯示一下半天切換不過來,如此多面的場景導入Unity3d,別說烘焙和實時運行了,就光場景的編輯操作都困難。下面第二張圖是孤立顯示的這個場景中的一個模型,從第二張圖左上角的統計信息可見,這個單個模型的面數爲339870,將近34萬個面,這麼高面數的單個模型對於所有引擎來說,都是喫不消的。下面第三張圖是使用3dmax最優化低面數精簡單面建模方法重新構建的這個場景的模型截圖,由第三張圖左上角的統計信息可見,這個場景重建後的總面數爲405376,即40多萬個面,大幅度降低了模型面數,相比重建前面數縮減了20多倍。下面第四張圖是重建後第二張圖所示對應的模型截圖,由第四張圖左上角統計信息可見,這個模型的面數爲20593,即2萬多個面,比重建前(下面第二張圖所示)縮減了15倍。由此可見,要大幅度降低模型面數,必須採用最優化低面數精簡單面建模方法 。有的童鞋會說,自己就不需要用單面建模,而是用一些減面的修改編輯器,一樣可以減面,沒錯,修改編輯器是可以減少模型的面數,但是這種減面方法是被動的,減面效果沒有單面建模的減面效果好,甚至會導致模型破面或畸形,所以小姐姐強烈建議用於Unity3d的模型最好採用反覆強調的最優化低面數精簡單面建模方法構建,這裏小姐姐用的是3dmax,Maya、Cinema4D等其他3D軟件也都有對應的單面建模方法,大家可以自己去網上找。

在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


再展示幾張採用3dmax最優化低面數精簡單面建模構建的單個模型的截圖,從下面的幾張截圖可見,單面建模構建的模型邊面非常規整,場景編輯操作流暢,不像實體建模構建的模型那樣,邊面交錯、密集,視圖操作卡頓。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述


在採用最優化低面數精簡單面建模時,除了用合理的poly佈線來降低模型面數,一些不重要的模型還可用貼圖來簡化,例如門窗、護欄、圍牆和比較費面的結構,使用貼圖簡化模型是降低模型的面數另一條途徑,如下面這些截圖所示:

在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述


3d場景和Unity3d場景中的卡頓除了模型面數太高所致,材質、貼圖的數量太多和貼圖分辨率太大也是造成卡機的重要因素。對於需要重複貼圖的材質,如果紋理相差不大,儘量使用同一材質,同時儘可能使用分辨率較小(如128x128)的高清晰度無縫貼圖,有的童鞋在使用重複貼圖時,往往不注意無縫貼圖的分辨率,找來就用,例如常用一張4096X4096、2048X2048或1024X1024作爲重複貼圖用於材質,然後通過調整UV讓紋理縮小,結果和128x128的紋理效果完全一樣,但是大尺寸和小尺寸的貼圖所消耗的機器資源相差非常大,所以小姐姐強烈建議使用小尺寸(也就是小分辨率,如128x128)的無縫紋理作爲重複貼圖,這樣可以從重複貼圖的角度消除卡頓。而對於無需重複貼圖的材質,例如廣告牌、指示牌、護欄和圍牆及鐵藝、百葉窗的鏤空貼圖,小姐姐建議這些模型使用同一種材質,並將所有紋理合併到一張貼圖中,如下圖所示,這樣就可以使多個使用不同非重複紋理的物體或者物體的面使用同一種材質,不僅減少了材質的數量,也減少了貼圖的數量,更重要的是在unity3d作品啓動時會更快,因爲這些物體只需要加載一張貼圖,如果不這樣,而是每個物體使用各自獨立的貼圖,加載會非常慢,這時有童鞋會問,不同物體使用同一種材質,而且每個物體貼圖也不一樣,這怎麼弄呢,這就需要使用手工拆分UV1(材質貼圖默認佔據一號UV通道),也就是手工展平UV1,即將物體的UV手工調整到這張貼圖中這個物體需要的對應貼圖區域。這樣就可以進一步消除因爲重複紋理太大、非重複紋理數量太多和材質數量太多所造成的卡頓,當然這部分是在單面建模過程中需要做的。

在這裏插入圖片描述在這裏插入圖片描述


好了,建模過程中有關消除卡頓、提高烘焙質量和加速烘焙的一些因素就說到這裏。另外,在單面建模完成後,需要對每個物體進行頂點焊合,消除孤立頂點和斷點,否則導入Unity3d後會出現模型的撕扯和貼圖錯亂。最後還要排查重疊面和重疊頂點,否則也會影響烘焙質量和烘焙速度,這個前面已經講過,這裏就不贅述了。

2. Unity3d場景的視錐剔除、遮擋剔除、和LOD優化及模型階段的預處理

在建模軟件中完成以上的操作之後,小的場景已經很流暢,但是對於大規模的場景,儘管從建模、材質、貼圖三個方面進行了優化,可導入Unity3d實時運行時有時還會很卡,此時就需要使用Unity3d的視錐剔除、遮擋剔除、和LOD技術對Unity3d場景進行進一步優化。要使用視錐剔除、遮擋剔除、和LOD技術,得在3d軟件中對模型做一些預處理,因爲這些預處理會改變模型,因此需要在拆分UV2之前完成這些預處理。另外需要說明一點,有的童鞋可能因爲沒有這些概念,就直接跳過這一步去Unity中烘焙場景了,等烘焙完了,才意識到場景的卡頓需要應用視錐剔除、遮擋剔除、和LOD技術,那麼所做光影烘焙就全白做了。

下面小姐姐就結合這個例子的遊戲場景來討論視錐剔除、遮擋剔除、和LOD技術及其在3d軟件中的預處理。

下圖所示爲這個遊戲場景的3dmax模型截圖:

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


⑴ Unity3d的視錐剔除

什麼是“視錐剔除”呢,首先我們需要先搞清什麼是“視錐”,如果有3d軟件的使用經驗,大家應該知道3d軟件中相機視野(也稱視域)範圍的空間形態是一個四棱錐,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述

視錐就如同人眼睛的視野一樣,視野以外的區域稱爲盲區,我們把這個空間形態爲四棱錐的相機視野就稱爲“視錐(Frustum)”,視錐也就是相機的視野。那麼什麼是視錐剔除呢,大家都知道,Unity3d的場景最終是通過相機來呈現的,或者說是通過相機來瀏覽或渲染的,爲了減輕相機的渲染負擔,引用了“視錐剔除(rustum Culling)”的渲染機制,也就是讓機器只渲染相機視野以內的物體,視野以外的物體會被忽略計算,我們把這種物體處於相機視錐以外時被忽略計算的場景優化機制就稱爲“視錐剔除”,視錐剔除通過忽略視錐以外物體面數和貼圖的計算來減輕相機的渲染負擔,從而進一步加速實時運行,爲了讓大家理解視錐剔除、遮擋剔除、LOD優化,小姐姐胡亂構造一個簡單的場景,如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


當運行這個場景時,Unity會自動啓用視錐剔除,我們在相機視圖是看不到視錐剔除的情況,但視錐剔除確實是在起效,爲了讓大家看到視錐剔除的直觀效果,我們將相機視圖和場景視圖同屏顯示,如下面的GIF動畫所示,左邊是相機視圖,右邊是場景視圖,由右邊的場景視圖可見,Unity運行時,無論相機移動還是旋轉,相機視錐以外的物體都被忽略了渲染計算,也就是被剔除掉了,只渲染計算視錐以內的物體,以此來加速實時運行。與此同時,我們由左邊的相機視圖可見,並沒有因爲Unity啓用了視錐剔除而發生物體顯隱的突變。

在這裏插入圖片描述在這裏插入圖片描述


在視錐剔除中,那麼什麼叫物體處於視錐以內呢,Unity3d用物體的最大邊界盒來判定這個物體是否在視錐以內,也就是隻要物體的最大邊界盒有一個點處於視錐以內,就認爲這個物體進入了視錐,或者說叫這個物體處於視錐以內了。相反,只要物體的最大邊界盒沒有一個點在視錐以內,就認爲這個物體不在視錐以內了。簡單地說,Unity3d是把物體的最大邊界盒作爲了控制物體渲染與不渲染的觸合開關,因爲計算物體的最大邊界盒要比計算物體本身快得多。有了這樣的認知之後,我們可將物體的最大邊界盒是否處於視錐以內的概念替換爲物體的一個頂點是否處於視錐以內的概念來理解,會更接近大家的自然思維,即只要物體的一個頂點處於視錐以內,Unity就認爲這個物體全部處於視錐以內。相反,只要沒有一個頂點處於視錐以內,Unity就認爲這個物體全部處於視錐以外。此時,有的童鞋會說,那要是一個物體只有很小一部分在視錐內,大部分在視錐之外,按剛纔的說法,在視錐之外的那部分也會被認爲在視錐以內了,而這部分實際就不在視錐內,機器計算這部分有點多餘了,而且會因爲這部分沒有被剔除而卡頓,是的,要不讓機器計算這部分多餘的物體,就需要我們在3d建模軟件中針對“視錐剔除”優化技術事先對高面數的物體進行合理的拆解或切分,也就是我們在前面所說的預處理。

另外,有些童鞋也會問,Unity官方的文檔說,相機的視錐剔除是自動開啓的,可以不用管,小姐姐這麼囉嗦有什麼意義呢?問題就在這兒,如果小姐姐不囉嗦,一些童鞋就不知道視錐剔除對自己的場景根本不起作用!因爲有的童鞋建模時,習慣把很多物體合併(Attach)成一個Poly網格模型,尤其是面數比較多的石頭、籬笆、植物等,看似在建模軟件中可以加速場景的編輯操作,但是到了Unity3d中,就如同上面說的那樣,會因爲高面物體處於視錐以外的部分與視錐以內的部分爲一體,所以視錐以外的部分不能被剔除,儘管視錐剔除是自動開啓的,可壓根就不起作用,從而造成實時運行依然卡頓。此時就需要如上所述,在建模軟件中將高面物體進行合理的拆解切分。

Unity的視錐剔除優化除了要求在3d軟件中不能合併那些零碎多面的模型外,有時也得把一些多面的其他poly網格模型切分(Detach)或拆解成多個網格模型。另外,Unity3d有個硬性要求,即每個mesh(網格模型,也就是我們前面所說的poly網格模型,即一個物體)的最大頂點數(Vertices count)不能超過65556,有的童鞋不管三七二十一,將整個場景合併成了一個物體,或者將多個物體合併在了一起,導入Unity3d時報錯,就是因爲導入的模型中,有頂點數超過這個數值的模型,而有的童鞋說,它的模型頂點數比這個數值小很多,導入時還是報錯,這是因爲Unity導入時會對模型進行些微的重構,此時Unity會自動添加一些頂點,當頂點數超過了上限值時會報錯。這個上限值可以作爲模型拆解的參考,對於不連續(也就是分離)的mesh,直接拆解就可以了,對於連續(也就是無縫固連在一起)的mesh,拆解時儘量將切縫選在比較隱蔽的轉角處,以免烘焙之後出現接縫。

⑵ 針對視錐剔除的模型預處理

有了上面的概念,我們就來對這個遊戲場景的模型在3d建模軟件中進行視錐剔除的預處理:

遠景爲三個山體,如下面第一張圖所示,每個山體的面數均爲3842,頂點數爲1954,如下面第二張圖所示,這三個山體的面數都只有不到4k,比較低,頂點數遠遠小於上限值,所以原樣保留,無需拆分。有些槓精會問,那能不能把這三個山體拆分成面數和頂點數更少的物體呢,這樣來說吧,一個西瓜沒法整個喫下去,我們得切分成小塊,切分的原則得方便手持和口咬,但你非要切成細小的渣渣,誰也沒辦法,可是你覺得這樣喫起來方便嗎?小姐姐個人的經驗認爲面數5k左右的,算是面數不多的模型,當然有時2,3萬的面數也不是問題,但是超過3萬以上面數的模型,就得考慮拆解。所以這些山體就保持原樣不動吧。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


近景有多個大塊的石頭,如下面第一張圖所示,其中面數最多的石頭的面數爲5866,頂點數爲3045,也遠遠小於上限,如下面第二張圖所示,所以這些石頭不用切分成小塊,但是如果有人想把這些石頭合併成一個物體,導入unity時,可能會因頂點數超上限而報錯,因爲這些石頭的頂點總數已經達到42832了。

在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述


近景中還有一些石頭階梯,如下面第一張圖所示,其中面數最多的階梯的面數爲5403,頂點數爲3018,也可以不用拆分,當然不能合併,原因就不說了。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


我們還可以看到場景中有一些類似木橋的牆板,如下面第一張圖所示,其中面數最多的牆板的面數爲5226,頂點數爲2861,如下面第二張圖所示,和上面一樣,無需拆分,也不能合併。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


另外還有如下圖所示的木板,我不知道這個應該叫什麼,這些物體的總面數才8k多,總頂點數才4k多,一樣無需拆分,也不要合併。

在這裏插入圖片描述在這裏插入圖片描述


木門的面數只有3760,頂點數只有2248,如下圖所示,和前面一樣,不用拆分,也不要合併。

在這裏插入圖片描述在這裏插入圖片描述


下面第一張圖所示的是一些籬笆或者叫做柵欄,其中面數最多的柵欄的面數爲20682,頂點數爲36384,如下面第二張圖所示,面數有些高,我們可以考慮將這個物體拆分成4到5個小的物體,但是我們看到這個籬笆由6段組成,我們乾脆就將這個物體拆解成6個物體,每個小物體的面數大概在3k多左右,具體就不拆解了,大家可以自己去拆分。其他柵欄的面數均爲3448,頂點數爲1788,如下面第三張圖所示,無需拆分,也不要合併。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


下面第一張圖所示爲一些木桶,其中面數最多的木桶的面數爲12636,頂點數爲6800,面數有些高,如下面第二張圖所示,可以考慮拆分成三個小物體,其他的面數大於5k的,也可以適當拆分。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


下圖所示的石頭的總面數只有3k多,就保持原樣不拆分了,也不要合併。

在這裏插入圖片描述在這裏插入圖片描述


剩下的就是這個場景中最主要的一些物體,有木屋和木塔,如下面第一張圖所示,其中面數最多的木屋的面數爲64721,頂點數爲36489,如下面第二張圖所示,頂點數雖未超上限,但是面數有點高,可以拆分成多個小的物體。面數最高的部分是一層的圓木牆,每面牆的面數爲4011,如下面第三張圖所示,所以將這四面牆各自拆分成獨立的物體。二三層的牆面面數也都比較高,也和一層一樣,將四面牆拆解出來。剩下的屋頂只有幾k,就不再拆分了。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


另外,下面第一張圖的中心區域我們計劃用一個略微起伏的地形來填充,如下面第二張圖所示,這個地形在3d軟件中來構建比較困難,而且貼圖如果用3d軟件的混合材質來貼,Unity3d根本就不兼容,所以我們還是選擇在上面的模型導入Unity3d之後,在U3D中通過畫筆塗刷來構建這個地形和爲這個地形繪製貼圖。地形的面數一般比較高,如果堅持用3d建模軟件來構建這個地形,導入Unity後,這個地形不具有u3d塗刷地形的自動優化功能,而Unity3d的地形會根據與相機的距離自動簡化地形網格,如下面第三張圖所示。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


按照以上的方法和步驟對場景中一些高面模型進行適當拆分後,將其導入Unity3d,無需再做設置,實時運行時會自動剔除視錐之外的物體,也就是忽略視錐以外看不見的物體及其貼圖的渲染計算,從而加速運行。

⑶ Unity3d的遮擋剔除

在建模軟件中對高面模型合理拆分後,Unity運行時,會自動通過剔除視錐以外的物體來加速運行,此時一些聰明的童鞋會想到,沿着相機的視線方向看過去,常常會有一些物體完全被擋在距離相機較近的物體後面,讓機器渲染計算這些物體及其貼圖,似乎也是一種負擔,沒錯,確實如此,因此,Unity3d引入了“遮擋剔除”的渲染優化機制,也就是讓機器在視錐剔除的基礎上再忽略被擋住物體及其貼圖的渲染計算,更進一步加速實時運行。小姐姐用下面Gif動畫給大家展示一下遮擋剔除的優化效果。

在這裏插入圖片描述在這裏插入圖片描述


和視錐剔除一樣,在相機視圖中也是看不到遮擋剔除的情況,但是也確實是起效的。所以我們還是將相機視圖和場景視圖同屏顯示,如上GIF動畫所示。因爲視錐剔除是自動啓用的,無法禁用,所以在使用遮擋剔除優化時,會和視錐剔除優化疊加,由上面的GIF動畫右邊的場景視圖可見,視錐內被渲染計算的物體比前面僅啓用視錐剔除時少了很多,兩者相差的部分就是被遮擋剔除優化剔除掉的物體。由左邊的相機視圖可見,遮擋剔除和視錐剔除共同作用下也沒有任何物體顯、隱的突變。

遮擋剔除不像視錐剔除那樣會自動啓用,而是需要在Unity3d中進行一些設置,然後進行遮擋數據烘焙(這裏的烘焙與光影烘焙不是一回事)後纔可起效。需要說明的是,遮擋剔除分靜態物體和動態物體的遮擋剔除,詳細可參看小姐姐的CSDN博客文章-Unity3d遮擋剔除(Occlusion Culling)優化這裏就不贅述了。

下面的GIF動畫是實際工程應用視錐剔除和遮擋剔除優化的情況,我們依然將相機視圖與場景視圖同屏顯示來觀察優化效果。

在這裏插入圖片描述在這裏插入圖片描述


下面的GIF是上圖中右側場景視圖的放大顯示:

在這裏插入圖片描述在這裏插入圖片描述


遮擋剔除也是根據物體的最大邊界框是否被其他物體的最大邊界框完全擋住,來確定物體是否被剔除,所不同的是,它是沿着相機視線方向,剔除視錐以內,且被距相機最近物體完全遮擋住的物體。

⑷ 針對遮擋剔除的模型預處理

和視錐剔除一樣,遮擋剔除的模型預處理也需要在3d建模軟件中來完成,而且視錐剔除的模型預處理完全適用遮擋剔除,另外根據遮擋剔除的特點,在3d場景的佈局時,儘量將高大的模型佈置在場景的中心,以便相機從任何方向瀏覽時,都能遮擋比較多的物體,或者將面數相對較高的物體拆分成多個物體,使拆分後的物體能夠被一些物體遮擋。

由於這個遊戲場景比較小,沒有較大的物體,雖然遠景的三個山體較大,但面數都比較低,所以就不用拆分了。

⑸ LOD優化

有時由於場景中物體的佈局比較鬆散,物體相互遮擋比較少,此時應用遮擋剔除的優化效果不明顯,爲了彌補這一缺陷,Unity3d引入了LOD(Level Of
Detail細節等級)優化,爲了讓大家理解LOD優化,小姐姐舉個生活中大家熟知的例子,相信大家一定有送親友離別的經驗,當親友在你身邊即將離開時,他的面部表情、神態、肢體、着裝都可以看得很清楚,當親友離開一定距離時,只能看到他的頭髮和衣服顏色,表情、神態和着裝細節已經看不清了,再遠一些,只能看到他的肢體輪廓,更遠一些,他的形體集聚成一個小黑人,最後消失在視野中。我們來分析一下這個過程,無論親友離你多遠,他的面部形態、肢體形態、着裝及他的身高等都是不變的,只是隨着距離變化,一些細節視覺已經無法分辨了而已。如果用一個3d角色(模型)來表現,反正遠處也看不清細節,不如將模型簡化一些,貼圖縮小一些,這樣既不影響視覺效果,還能減輕機器負擔。LOD就是利用這樣的思路,來優化(加速渲染計算)視錐中經視錐剔除和遮擋剔除優化後剩餘的物體,具體地說就是根據物體與相機之間距離的增大,讓物體及貼圖使用不同的簡化版本。下面的GIF用一個球體簡單地展示了LOD的優化原理,近處用面數比較多的球體,稍遠一點,用一個面數比較少的近似球體,更遠處用一個面數更少的幾何體,再遠就直接剔除掉。我們把距相機不同距離範圍所對應的模型及貼圖稱爲細節等級,LOD一般可有3-5個細節等級,分別爲LOD0、LOD1…LOD4,默認爲3級,即LOD0、LOD1…LOD2,LOD0爲最高級,即模型面數最多、貼圖分辨率最高,LOD2或LOD4級別最低,即模型面數最少、貼圖分辨率最低。

在這裏插入圖片描述在這裏插入圖片描述


在LOD優化過程中,這幾個球體會平滑切換,下面我們將這幾個幾何體拉開看看,如下面第一張圖所示,而實際上LOD的多個模型版本是在同一位置的,如下面第二張圖所示。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


⑹ 針對LOD優化的模型預處理

一般情況下,需要LOD優化的模型,得在3D建模軟件中預處理每個細節等級對應的模型和貼圖,這個模型可作爲LOD0,然後原地(也就是同位置)複製兩個這個模型,分別簡化(減面和縮小貼圖)爲兩個版本,即LOD1、LOD2,LOD2的面數和貼圖要小於LOD1,完成所有需要LOD優化的模型的預處理及其他預處理,就可導入Unity3d中對每個需要LOD優化的模型進行設置了。

⑺ Unity3d LOD優化的組件設置

在Unity中對需要LOD優化的每個高面模型分別添加LOD Group組件,如下圖所示,一般高面模型默認爲LOD0,選擇LOD1,將LOD1對應的的模型添加到LOD1,如下面第二張圖所示,以此類推,選擇LOD2,將LOD2對應的的模型添加到LOD2,如下第三張圖所示。之後鼠標調整LOD的相機距離範圍。按同樣的方法爲其他需要LOD優化的模型進行LOD Group組件設置。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


LOD可用於所有需要LOD優化的模型,但一般主要用於數目較多的植物、石頭之類的高面模型, 下面的GIF動畫展示了speedtree樹木在Unity3d中的LOD優化,我們截取其中一幀進行圖解,見下面第二張圖所示。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


由上面第二張圖的解析可知,LOD是通過降低被視錐剔除、遮擋剔除優化之後,視錐內剩餘且使用LOD優化的高面物體,在相機運距範圍的面數和貼圖大小,及超出最遠距範圍時剔除物體,來緩解渲染負擔,以加速實時運行。當相機前進時,使用LOD優化的不同物體的細節等級由當前值動態升高,即從LODn向LOD0動態逐級平滑切換,或者從解除剔除向LOD2至LOD0逐級切換。當相機後退時,使用LOD優化的不同物體的細節等級由當前值動態降低,從LODn向LOD2動態逐級平滑切換,直至超出LOD2的距離範圍自動剔除。

LOD優化正是利用物體與相機的距離增大時視覺逐漸模糊和距離減小時視覺逐漸清晰的現象,讓處於不同相機距離範圍的不同物體使用不同的細節等級,並動態地升高或降低細節等級、剔除、解除剔除,這種模型面數和貼圖大小的動態佈局,使相機的渲染計算量大幅減小。如果不理解,我們可以用反向思維來推理,也就如果不使用LOD優化,那麼無論物體距離相機多遠,視錐內的高面物體的面數都保持不變,也沒有物體被剔除,此時視錐內物體的總面數遠遠大於使用LOD優化後的值,視錐內所有物體的貼圖所消耗的顯存也遠遠大於使用LOD優化後的值,運行時要比LOD優化後卡頓,LOD優化的優勢由此可見一斑。

好了,關於最優化低面數精簡單面建模、視錐剔除、遮擋剔除和LOD優化就說到這裏,有的童鞋可能會疑惑,爲什麼用這麼多篇幅講這些呢?因爲很多人在烘焙完場景之後,才發現運行很卡頓,如果沒有這些概念,想解決卡頓,根本無從下手。等搞清楚解決卡頓需要這些知識點時,得返回到建模軟件中修改模型,模型改變了,場景得重新烘焙,此時,前面光影烘焙所花費的時間就全部浪費了,所以小姐姐不得不在烘焙光影之前,用很多的篇幅把解決卡頓的優化途徑給大家作個交代,請大家諒解。下面我們一起討論一下這個遊戲場景的UV2拆分(也就是光照貼圖UV座標的展開),最前面的例子已經討論過在建模軟件中拆分UV2的意義,這裏就不贅述了,其實拆分UV2也可算作一種優化方式,即可提高烘焙質量和烘焙速度。另外需要強調一點,模型的改變,會使已經拆分的UV2發生錯亂,所以必須在視錐剔除、遮擋剔除、LOD優化預處理完成之後拆分UV2。

3. 光照貼圖UV座標(UV2)拆分

大家都知道,光照貼圖和材質貼圖一樣,得有控制貼圖的UV座標,默認的光照貼圖通道爲2號通道,即UV2,就是常說的第二套UV。材質貼圖的UV座標,默認爲1號通道,即UV1,UV1和UV2互不干涉。沒有光照貼圖座標,烘焙後的光影會錯亂。Unity3d自身的UV2展平功能有致命的缺陷,所以建議大家在建模軟件中展平UV2(也就是拆分UV2),下面小姐姐和大家一起在3dmax中拆分一下這個遊戲場景模型的UV2。

前面小姐姐提到,在建模軟件中拆分UV2也是一種優化方式,之所以這樣說,其一是因爲建模軟件拆分的UV2永遠比Unity3d效果好,Unity3d官方也建議最好在建模軟件中拆分,其二是在建模軟件中可以讓多個物體共享一個光照貼圖的UV座標,也就是將多個物體展平到一個光照UV(UV2)中,這樣可以減少光照貼圖的數量,使Unity3d作品的加載啓動和實時運行更快。

OK,下面就來拆分,首先選擇三個山體,然後將其羣組,並命名爲“shanti_4096”,然後選擇這個羣組並展平UV2,因爲這三個山體比較大,所以設置其UV2的分辨率大一些,這裏設爲4096x4096,如下圖所示,然後隱藏這個羣組,以免忘記哪些已經拆分,哪些沒拆分。

在這裏插入圖片描述在這裏插入圖片描述


接下來,選擇所有的大石頭並羣組,命名爲“dashitou_4096”,然後拆分這個羣組的UV2,設置分辨率爲4096x4096,如下圖所示,然後隱藏這個羣組。

在這裏插入圖片描述在這裏插入圖片描述


接下來選擇下圖中的幾個房子羣組,並命名爲“house1_4096”,然後拆分這個羣組的UV2,設置分辨率爲4096x4096,然後隱藏這個羣組。

在這裏插入圖片描述在這裏插入圖片描述


下面再選擇下圖中的幾個房子打組,並命名爲“house2_4096”,然後拆分這個羣組的UV2,設置分辨率爲4096x4096,如下圖所示,然後隱藏這個羣組。

在這裏插入圖片描述在這裏插入圖片描述


最後選擇剩餘所有物體成組,並命名爲“others_4096”,然後拆分這個組的UV2,設置分辨率爲4096x4096。

在這裏插入圖片描述在這裏插入圖片描述


通過上面的步驟,我們將這個遊戲場景所有模型光照貼圖拆分成了5個UV,拆分UV2總共用時50分鐘,這裏需要說明一下,小姐姐所用的UV拆分方法比傳統方法快十幾倍,傳統方法拆分一個光照UV花費幾個小時也是常事,甚至長達幾十個小時,所以正確的方法對提高工作效率非常重要。

從上面的截圖可見,在建模軟件中拆分UV2,可充分利用UV空間,不像Unity3d展平的UV2那樣,很多UV空間都被白白浪費。另外,在上面的步驟中,小姐姐是先將多個物體成組,再選擇這個組來展平UV2,這樣這個組中的物體即會被展平到一個UV中,大家可以按照這樣的方法來讓多個物體共享一個光照UV,這樣可以減少光照貼圖的數量。共享貼圖已經是一種流行的方式,例如應用程序或網頁的所有圖標,現在都流行繪製在一張貼圖之中,這樣可以加速應用程序或網頁的加載。再者,這個遊戲場景導入Unity3d中後,這些組是可以被Unity3d識別的,如下圖所示。需要說明的是,小姐姐在命名每個組時都加一個後綴“_4096”,這個後綴表示拆分這個組UV2的分辨率,因爲導入Unity3d後還要爲每個組設置與建模軟件中一樣的分辨率,不標識一下,過後會忘記,雖然這個例子的分辨率都是4096,但更多情況下每個組的分辨率是不一樣的,所以建議大家用組的名稱來記錄其分辨率。

在這裏插入圖片描述在這裏插入圖片描述

小姐姐上面是用3dmax來拆分UV2的,使用maya、C4D、Modo、Rhino、lightwave、Softimage、Blender等軟件建模的童鞋,都可以參照上面的步驟,在自己熟悉的軟件中來拆分UV2,方法大同小異。

4. 將模型從建模軟件導出

拆分好UV2後就可以從建模軟件導出FBX格式的文件了,具體導出方法前面已經討論過,這裏你不贅述了。需要說明的是,UV2和其他UV一樣,是被保存在FBX文件中的,FBX文件導入Unity3d後,UV2是可以被Unity3d讀取的。

5. 遊戲場景的搭建

這個遊戲場景的主要模型是在建模軟件中構建,所以直接導入上一步導出的FBX文件即可,具體導入方法前面也已經討論過,這裏就不再說了,導入Unity3d後的場景如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


前面我們曾經計劃在下圖所示的位置用Unity3d的地形繪製工具繪製一個地形,用來承載這個場景的主要模型。

在這裏插入圖片描述在這裏插入圖片描述


在場景中添加一個“Terrain”,設置長寬爲100x100,高度爲600,然後用畫筆工具繪製地形起伏,並用畫筆繪製地形紋理。具體繪製過程這裏就不贅述了,繪製完成後的地形如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


地形上需要用地形的塗刷工具批量種一些草,這個等後面再來做。

6. 材質調整

因爲Unity3d只兼容建模軟件中的標準材質和多層次及材質,所以在建模軟件中只需要給物體簡單貼紋理,並調整材質貼圖的UV1即可,其他高級渲染器的材質(如vray、brazil、Finalrender、mentalray)再好,Unity3d都是不兼容的,有的童鞋可能會感覺很失望,其實Unity3d有自己的材質系統,完全可以實現大家所熟悉的各種材質效果。這時有的童鞋會說,既然Unity3d有自己的材質和shader,爲什麼還要在建模軟件中貼材質呢?因爲Unity3d的只有2D UV,沒有建模軟件那樣的3D UV(UVW貼圖座標),所以基本材質貼圖還是建議在建模軟件中來貼,雖然Unity3d的UV是2D的,但是它可以識別建模軟件的3D UV。

好了,現在我們在Unity3d中調整材質。首先,我們可以看到下圖中的木質柵欄,材質貼圖模糊不清,沒有一點質感,選擇這個物體,我們看看檢視面板中的材質屬性,其材質中只有一個簡單的紋理貼圖,如下面第二張圖所示。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


現在我們按下圖所示的步驟,先將“shader”後面的下拉菜單展開,將shader類型由“standard(標準)”改爲“Standard(specular setup)(標準高光設置)”,再給主貼圖下的高光貼圖通道添加一張高光貼圖,接下來給法線貼圖通道一張法線貼圖,然後將一張遮蔽貼圖(也就是AO貼圖)添加到遮蔽貼圖通道,再給第二貼圖下的細節貼圖通道添加一張細節貼圖,最後再給其下的法線貼圖通道貼一張法線圖,並將法線貼圖的UV重複次數均改爲5,此時,柵欄的材質效果如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


接下來,將第二貼圖下的法線貼圖強度增加到2,柵欄的材質效果如下圖所示,這就是Unity3d材質的魅力,一點而不遜色建模軟件的材質質感,此時很多童鞋一定會在想,小姐姐所用的那些貼圖是從哪兒來的呢,這是用遊戲引擎專門的材質軟件生成的貼圖,這個比較複雜,如果支持小姐姐的Unity3d布光與場景烘焙及後處理實戰視頻教程(本文的全部內容都在這個教程中),後續會給大家這個福利。到這兒,木質柵欄的材質就調整好了。

在這裏插入圖片描述在這裏插入圖片描述


接下來以同樣的方法調整小木房子的材質,調整之前的效果如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


調整之後的材質效果如下圖所示:

在這裏插入圖片描述在這裏插入圖片描述


接下來調整石頭的材質,下圖爲調整之前的的材質效果:

在這裏插入圖片描述在這裏插入圖片描述


下圖爲調整之後的石頭材質效果:

在這裏插入圖片描述在這裏插入圖片描述


下圖爲整個場景調整之前的材質效果:

在這裏插入圖片描述在這裏插入圖片描述


下圖爲整個場景調整材質之後的效果,通過對比,我們可以看到,場景中的物體通過材質調整之後有了質感,材質部分就說到這兒,下面小姐姐將和大家大家討論場景的光照設置,也就是場景的布光。

在這裏插入圖片描述在這裏插入圖片描述


7. 遊戲場景光照烘焙及後處理

這個例子小姐姐將分別針對日景和夜景兩種光照和大家一起探討遊戲場景的光照烘焙與後處理。

⑴. 室外日景光照烘焙和後處理

①. 燈光設置

對於室外日景來說,主光源一般只有太陽光,所以我們創建一盞平行光(Directional Light)來模擬太陽的光照。Unity3d的平行光不同於其他3d軟件的平性光,沒有聚光區和衰減區的概念,所以平行光放置在什麼位置無關緊要,光照的投射方向只與平行光的方位角有關,因此選中剛剛創建的平行光,按下圖所示,在檢視面板中設置平行光的方位角。

在這裏插入圖片描述在這裏插入圖片描述


接下來設置平行光的顏色爲淡黃色,考慮到地形上後續會種草,且草在風力作用下會擺動,所以可以用靜態燈光下動態物體的烘焙方法來烘焙場景,因此燈光模式設爲“Mixed(混合模式)”,燈光強度設爲4,間接光倍增設爲2,其他參數默認,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


②. 光照設置

按下圖所示的步驟,進行光照設置。

在這裏插入圖片描述在這裏插入圖片描述


③. 光影烘焙

設置好光照參數後,然後點擊下圖右下角的“Generate Lighting”按鈕,開始烘焙(當然別忘了勾選所有物體的靜態設置)。

在這裏插入圖片描述在這裏插入圖片描述

烘焙整個場景總共耗時19分鐘,烘焙完成的效果如下圖所示(這樣的烘焙速度獲益於最優化低面數精簡單面建模和在建模軟件中的UV2(光照貼圖UV座標)合理拆分)

在這裏插入圖片描述在這裏插入圖片描述


下面將烘焙的結果從不同角度截圖如下,由下面的截圖可見,光照圖非常乾淨,沒有漏光光、漏陰影、破面、爛面、硬邊、亮邊、黑邊等常見的烘焙缺陷,當然這也獲益於單面建模和UV2的拆分。

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


④. 植被繪製

接下來我們在地形上種些草,以增加場景的活力,選中層級面板中的“Terrain”,或在場景中選中地形物體,激活檢視面板,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


在檢視面板中按下圖所示的步驟設置草的紋理。

在這裏插入圖片描述在這裏插入圖片描述


選中剛剛設置的草皮紋理,用畫筆在地形上塗刷,即可繪製出草皮,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


無論何時,如果想修改草皮,可按下圖所示的步驟編輯草皮參數即可。

在這裏插入圖片描述在這裏插入圖片描述


④. 植被的烘焙

草皮種植好後,我們發現草皮上的陰影死黑一片,如下圖所示,這是不正確的陰影,原因是草皮是烘焙之後繪製的,另外,草沒有象其他物體一樣可以設置“Static(靜態)”的屬性,因此即使草皮是在烘焙之前繪製,烘焙之後,陰影還會和剛纔一樣死黑一片,這是因爲草是批量種植的物體,一旦種植,面會很多,如果用普通物體的烘焙方法,機器喫不消,所以Unity3d禁止了草和樹的的靜態設置,也就是禁止了靜態烘焙,而將草和樹木當做動態物體來對待,可通過設置光探測器來烘焙草、樹木和動態物體。

在這裏插入圖片描述在這裏插入圖片描述


按照下圖所示的步驟設置光探測器組,讓其包絡所有草的範圍,當然光探測器組的形態不一定是長方體,可以是不規則形態,小姐姐爲了省事,弄成了規則的長方體形態了。

在這裏插入圖片描述在這裏插入圖片描述


光探測器組佈設好後,重新烘焙場景,烘焙完成後,可以看到原來草皮死黑的陰影沒有了,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


消除草皮的死黑陰影之後,我們又發現草皮有點假,沒有層次,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


此時添加Ambient Occlusion(環境遮蔽)組件,並設置適當的參數,草皮的層次就拉開了,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


如果覺得草不夠高,不夠絮亂,可以調出草皮紋理編輯面板進行修改,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


草皮有了層次之後,應該讓草能隨風擺動,這樣才顯得草的活力,此時可按下圖所示的步驟爲場景添加Wind Zone(風力)物體,並設置適當的參數,運行時,草就會隨風擺動。

在這裏插入圖片描述在這裏插入圖片描述


⑤. 後處理

在完成室外日景烘焙之後,有時我們需要爲場景營造一些藝術的效果和氣氛,也就是常說的“後處理”,首先我們爲場景開啓霧效,讓場景中的背景山體弱化一些,這樣不僅增加了縱深感,也可突出了主景,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


接下來開啓體積光和光束效果,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


然後再開啓輝光(Bloom),如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


接下來打開景深(Depth of field),以進一步在增加縱深感,也就是近實遠虛,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


隨後我們開啓抗鋸齒(Anti Aliasing),讓場景中物體邊緣更平滑,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


此時我們再開啓相機的濾鏡效果(Vignette),這個效果相信大家在ps中都做過,也就是增加一個黑的圖層,然後繪製一個橢圓選區,羽化邊緣,刪除這個黑的圖層的橢圓選區部分,最後的效果是四周是半透的黑色,中心部分近乎透明,Unity的相機濾鏡就是透過這樣的圖層來觀察相機視圖中的場景,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


接下來再勾選自動曝光(Auto Exposure)效果,如下圖所示。

在這裏插入圖片描述在這裏插入圖片描述


最後通過色階中的色相、飽和度、色溫等參數(如下圖所示),調節出自己喜歡的顏色和氣氛,讓場景看起來更加絢麗多彩,小姐姐這裏只是隨便調了一下,大家可以根據自己的喜好來調節。

在這裏插入圖片描述在這裏插入圖片描述


下面這些圖是從不同角度截取的相機視圖

在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


在這裏插入圖片描述在這裏插入圖片描述


⑥. 場景優化

說明:後面將和更新超大遊戲場景的烘焙,包含遮擋剔除、視錐剔除、LOD的優化和PBR材質,請隨時關注!由於這裏文章有字數限制,更多內容可去CSDN閱讀,如有什麼問題可V詢(qtpl_wx)小姐姐,如果覺得小姐姐講的有道理,請給小姐姐的實戰視頻教程一些支持!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章