Unity Lightmapping 光照貼圖烘焙設定筆記

光照貼圖這一塊的設定不論是初學者或進階玩家都需花費大量時間不斷進行修正的開發環節。恰巧在這次期末專題有機會學習到光照貼圖的烘焙 (Bake),趁剛進入寒假的空閒時間,來整理一下開發筆記。

本文使用 Unity 2018.4.14f1 Personal 版本

首先,我們用兩張圖來比較一下有烘焙光照貼圖與沒有烘焙的畫面:

有烘焙 Bake

沒有烘焙 Realtime

以結果來說,烘焙過後的畫面精細度真實度會大大提升!

其實這只是一個很簡單的概念,沒有烘焙的畫面是 Unity 在遊戲執行中持續重複計算而產生即時光影,因為必須短時間產生畫面,所以不能計算過於複雜的光線反射;相對的,我們在開發過程中先花時間將複雜的光線反射計算出來,之後在遊戲中就可以直接使用擁有接近真實光線的畫面。

廢話好像太多了,我們趕快進入正題:

本文範例專案已上傳至 GitHub

生成 3D 模型 Lightmap UVs

為了要讓 Unity 能順利將烘焙好的數據貼到模型上面,我們必須為 3D 模型生成 Lightmap UVs。如果沒有先生成這東西,在烘焙時 Unity 有可能會閃退 ……

開啟 3D 模型的屬性面板 (Inspector),勾選畫面中的 Generate Lightmap UVs 並按下 Apply 套用。

轉換模型為靜態物件

接下來將 3D 模型拉入場景 (Scene),並開啟此物件的屬性面板 (Inspector)。點開右上角的下拉式選單來啟用 Lightmap Static 或直接勾選 Static 都可以。

如果出現 Do you want to enable the Lightmap Static flag for all the child objects as well? 訊息,代表這個模型有子物件,請選擇 Yes, change children

調整光源作用模式為 Mixed

開啟場景中所有作用中且不會動的光源的屬性視窗 (Inspector),將 Light Component 下的 Mode 調整為混合模式 Mixed,混合模式可以同時產生烘培過後的精細光影與預設的 Realtime 即時光影。一般來說會使用這個模式,除非有特殊需求。

光照烘焙設定

準備進入最終階段,從上方選單中開啟 Window > Rendering > Lighting Settings 面板。

在開發階段,為了盡可能縮短烘焙花費的時間,我們必須調整以下關鍵設定:

  • Lightmapper 調整為 Progressive CPUProgressive GPU
  • Lightmap Resolution 修正為 4
  • Lightmapp Size 修正為 512 或更低。
  • Compress Lightmaps 容易出問題,在開發階段時 取消勾選
  • Auto Generate 取消勾選

烘焙

當場景上的物件與相關選項設定完成後,點擊 Light Settings 面板中的 Generate Lightings 即可開始烘焙。

烘焙完成的光照貼圖會出現在場景檔案旁的同名資料夾中。

加上材質貼圖後,烘焙完成的畫面會更加精美。

Lightmapping Settings 中文說明

屬性名稱中文說明
Lightmapper烘焙模式
Prioritize View優先烘焙攝影機照到的區域
Direct Samples直接光照的樣本數,增加此值可改善貼圖質量
Indirect Samples間接光照的樣本數,增加此值可減少貼圖雜訊
Bounces光線的反彈次數,增加此值可讓畫面更加真實
Filtering過濾器,後製光罩貼圖以減少貼圖雜訊
Lightmap Resolution光照貼圖解析度,以紋素 Texel 為單位。增加此值可以提升貼圖品質,但是會增加非常多烘焙時間
Lightmap Padding貼圖中各形狀之間的間隔,以紋素 Texel 為單位,通常不需調整,預設值為 2
Lightmap Size光罩貼圖大小,以像素 Pixel 為單位。
Compress Lightmaps壓縮光照貼圖,啟用可減少貼圖檔案大小
Ambient Occlusion啟用環境遮蔽
Directional Mode定向光模式,詳細請參考 官方說明
Indirect Intensity間接光照的強度,增加此值可以增加室內光線反射亮度,預設值 1,為平衡狀態。
Albedo Boost控制平面中反射光的數量,增加此值可增強反射亮度,預設值 1,為真實物理性質。
Lightmap Parameters光照貼圖參數,詳細請參考 官方說明

參考資料

延伸閱讀