Unity Lighting -- 為場(chǎng)景烘焙lightmap
烘焙光照是什么?
? ? ? ? Unity中有兩種不同的光照方式:實(shí)時(shí)光照和烘焙光照。
實(shí)時(shí)光照
? ? ? ? Unity會(huì)在運(yùn)行時(shí)實(shí)時(shí)計(jì)算光照。實(shí)時(shí)光源每一幀都會(huì)進(jìn)行計(jì)算,這意味著它們對(duì)于場(chǎng)景中移動(dòng)的角色和物體的響應(yīng)性非常好,但它的開銷也很大。
烘焙光照
? ? ? ? Unity會(huì)在運(yùn)行前預(yù)先計(jì)算出烘焙光照。在運(yùn)行時(shí)這些光照效果無(wú)法進(jìn)行修改,對(duì)于動(dòng)態(tài)的游戲物體來說,烘焙燈光不會(huì)有任何響應(yīng)。
? ? ? ? 計(jì)算烘焙光照的過程涉及為整個(gè)場(chǎng)景生成UV坐標(biāo),這個(gè)坐標(biāo)和材質(zhì)里的紋理映射的UV坐標(biāo)是類似的。烘焙后的紋理映射被稱為光照貼圖(lightmap),創(chuàng)建lightmap的過程被稱為光照貼圖映射(lightmapping)或烘焙(baking)。
? ? ? ? 烘焙光照更加高效,也能用于為用戶提供更多更加真實(shí)和體驗(yàn)感的光照效果。
改變光照模式
? ? ? ? 在Unity中,Light Mode設(shè)置能夠讓我們選擇我們想要使用的光照方法:
? ? ? ? 烘焙的(baked)
? ? ? ? 實(shí)時(shí)的(real-time)
? ? ? ? 混合的(Mixed)
? ? ? ? 如果要改變光照模式:
? ? ? ? 1. 選擇場(chǎng)景中的某個(gè)光源游戲物體(比如Directional Light或Spot Light),查看其Inspector里L(fēng)Ight組件的Mode屬性:

? ? ? ? ?2. 將Mode修改為Baked,即可修改光照模式
? ? ? ? 3. 如果想要更快速地配置光源的光照模式,可以在Windows->Rendering->Light Explorer窗口中進(jìn)行快速配置(避免從Hierarchy或場(chǎng)景中去一個(gè)個(gè)找):

將場(chǎng)景中的光源設(shè)置為Static
? ? ? ? 如果在運(yùn)行時(shí)一個(gè)游戲物體不會(huì)發(fā)生移動(dòng),那么它被認(rèn)為是靜態(tài)的(static)。對(duì)于此類物體我們可以標(biāo)記這些游戲物體為static。當(dāng)游戲物體標(biāo)記為static時(shí),Unity會(huì)預(yù)先計(jì)算一些相關(guān)數(shù)據(jù),包括用于全局光照的光照貼圖數(shù)據(jù)。
? ? ? ? 在烘焙光照貼圖前,我們需要將場(chǎng)景中的光源設(shè)置為static。下面的例子以兩個(gè)路燈模型為例。設(shè)置為static的路燈,光源的模式選擇為Baked,另外一個(gè)非static的則是real-time。


烘焙光照貼圖
? ? ? ? 我們可以為漸進(jìn)光照貼圖器(Progressive Lightmapper)選擇兩種后端。Unity默認(rèn)使用漸進(jìn)式CPU光照貼圖器(Progressive CPU Lightmapper),這種后端計(jì)算上使用的是計(jì)算機(jī)的CPU和系統(tǒng)RAM。另一種光照貼圖器,漸進(jìn)式GPU光照貼圖器(Progressive GPU Lightmapper),則使用計(jì)算的GPU和VRAM來計(jì)算光照貼圖。
? ? ? ? 使用GPU方式的光照貼圖能夠極大地提升光照貼圖計(jì)算的速度,但前提是計(jì)算機(jī)的配置能夠滿足相關(guān)的硬件和軟件要求,這個(gè)要求在這里查看:
Unity - Manual: The Progressive GPU Lightmapper (preview)
https://docs.unity3d.com/Manual/GPUProgressiveLightmapper.html
烘焙光照貼圖
? ? ? ? 1. 在Lighting窗口中(Window -> Rendering -> Lighting),選擇Scene標(biāo)簽頁(yè),然后點(diǎn)擊New Lighting Settings
? ? ? ? 2. 將這個(gè)光照配置文件命名為BakedLighting?

? ? ? ? ?3. 將Lighting Mode設(shè)置為Baked Indirect。如果你的機(jī)器滿足GPU光照貼圖器的要求,可以將Lightmapper設(shè)置為Progressive GPU(Preview)以便加快烘焙速度
? ? ? ? 4. 在Lighting窗口,選擇Generate Lighting來烘焙光照貼圖。我們會(huì)在Unity Editor的右下角看到烘焙的進(jìn)度。

? ? ? ? 5. 烘焙過程中注意觀察場(chǎng)景中的兩個(gè)路燈,選擇了static和沒有選擇static的路燈模型有什么區(qū)別
? ? ? ? 6. 烘焙完成后,移動(dòng)一下static的路燈模型,可以看到其光照和陰影沒有隨著路燈的移動(dòng)而改變。

添加一個(gè)面光源(Area Light)
? ? ? ? 之前的筆記中提到過,Area Light僅能用烘焙方式作用。我們?cè)趫?chǎng)景中添加一個(gè)帶面光源的模型來看看。
? ? ? ? 可以看到,這個(gè)模型添加到場(chǎng)景中后,并沒有什么光照效果出來。

? ? ? ? ? ? ? ? 我們?cè)俅紊梢幌潞姹汗庹召N圖,現(xiàn)在就能看到它的效果了。

? ? ? ? 如果我們要修改面光源的參數(shù),修改之后,也必須再次烘焙才能看到效果。
設(shè)置Mixed光照模式
? ? ? ? 我們還可以將Light Mode設(shè)置為Mixed來創(chuàng)建混合模式的光源,這種方式結(jié)合了動(dòng)態(tài)(real-time)陰影以及烘焙的光照。相比于純烘焙光照,它會(huì)增加存儲(chǔ)和運(yùn)行時(shí)開銷,但也能改善陰影的質(zhì)量。對(duì)于一個(gè)相對(duì)較小的輕量級(jí)項(xiàng)目來說,通??梢允褂肕ixed方式,雖然會(huì)消耗一定性能但很值得。
? ? ? ? 要切換光源為Mixed模式,和前面設(shè)置Light mode的操作是一樣的,這里不再贅述。

? ? ? ? ?選擇完Mixed模式后,需要在Lighting窗口中點(diǎn)擊Generate Lighting來更新烘焙光照貼圖。