光照概述

為了計(jì)算 3D 對(duì)象的陰影效果,Unity 需要知道落在對(duì)象上的光的強(qiáng)度、方向和顏色。

這些屬性是由場(chǎng)景中的?Light?對(duì)象提供。不同類型的光以不同的方式發(fā)出其指定的顏色;一些光的強(qiáng)度可能隨著與光源的距離而衰減,并且對(duì)于從光源處獲得的光角度有不同規(guī)則。光源類型中詳細(xì)介紹了 Unity 中提供的不同類型的光源。
Unity 可通過各種不同的方式計(jì)算復(fù)雜的高級(jí)光照效果,每種方式適合不同的使用情況。
選擇光照技術(shù)
從廣義上講,Unity 中的光照在某種方式上可以被視為“實(shí)時(shí)”或“預(yù)計(jì)算”光照,并且兩種技術(shù)可以組合使用以帶來沉浸式場(chǎng)景光照。
在本部分中,我們將簡(jiǎn)要概述不同技術(shù)提供的可能性、相對(duì)優(yōu)勢(shì)和各自的特性。
實(shí)時(shí)光照
默認(rèn)情況下,Unity 中的光源(方向光、聚光燈和點(diǎn)光源)是實(shí)時(shí)的。這意味著它們?yōu)閳?chǎng)景提供直射光并每幀都更新。如果光源和游戲?qū)ο笤趫?chǎng)景中發(fā)生移動(dòng),光照效果也會(huì)隨之更新。在場(chǎng)景和游戲視圖中都可以觀察到這一效果。

實(shí)時(shí)光照是場(chǎng)景中對(duì)象光照的最基本方式,對(duì)于照亮角色或其他可移動(dòng)的幾何體非常有用。
遺憾的是,在單獨(dú)使用 Unity 實(shí)時(shí)光源的光線時(shí),這些光線不會(huì)自動(dòng)進(jìn)行反射。為了使用全局光照等技術(shù)創(chuàng)建更逼真的場(chǎng)景,我們需要啟用 Unity 的預(yù)計(jì)算光照解決方案。
烘焙光照貼圖
Unity 可以計(jì)算復(fù)雜的靜態(tài)光照效果(使用稱為全局光照(簡(jiǎn)稱 GI)的技術(shù))并將它們存儲(chǔ)在稱為光照貼圖的紋理貼圖中作為參考。這一計(jì)算過程稱為烘焙。
對(duì)光照貼圖進(jìn)行烘焙時(shí),會(huì)計(jì)算光源對(duì)場(chǎng)景中靜態(tài)對(duì)象的影響,并將結(jié)果寫入紋理中,這些紋理覆蓋在場(chǎng)景幾何體上以營造出光照效果。

這些光照貼圖既可以包括照射到表面的直射光,也可以包括從場(chǎng)景內(nèi)其他物體或表面反射的間接光。該光照紋理可與顏色(反照率)和浮雕(法線)之類的對(duì)象表面信息材質(zhì)相關(guān)聯(lián)的著色器一起使用。
使用烘焙光照時(shí),這些光照貼圖在游戲過程中無法改變,因此稱為“靜態(tài)”。實(shí)時(shí)光源可以重疊并可在光照貼圖場(chǎng)景上疊加使用,但不能實(shí)時(shí)改變光照貼圖本身。
通過這種方法,我們可在游戲中移動(dòng)我們的光照,通過降低實(shí)時(shí)光計(jì)算量潛在提高性能,適應(yīng)性能較低的硬件,如移動(dòng)平臺(tái)。
有關(guān)更多信息,請(qǐng)參閱?Lighting 窗口參考和使用預(yù)計(jì)算光照。
預(yù)計(jì)算實(shí)時(shí)全局光照
雖然靜態(tài)光照貼圖無法對(duì)場(chǎng)景中的光照條件變化作出反應(yīng),但預(yù)計(jì)算實(shí)時(shí) GI 確實(shí)為我們提供了一種可以實(shí)時(shí)更新復(fù)雜場(chǎng)景光照的技術(shù)。
通過這種方法,可創(chuàng)建具有豐富全局光照和反射光的光照環(huán)境,能夠?qū)崟r(shí)響光照變化。這方面的一個(gè)典型例子是一天的時(shí)間系統(tǒng):光源的位置和顏色隨時(shí)間變化。如果使用傳統(tǒng)的烘焙光照,這是無法實(shí)現(xiàn)的。

為了以流暢幀率提供這些效果,我們需要將一些冗長(zhǎng)的數(shù)字運(yùn)算從實(shí)時(shí)處理變?yōu)轭A(yù)先計(jì)算處理。
預(yù)計(jì)算負(fù)責(zé)將計(jì)算復(fù)雜光照行為所產(chǎn)生的負(fù)擔(dān)從游戲運(yùn)行過程中轉(zhuǎn)移到有寬松的時(shí)間進(jìn)行計(jì)算的時(shí)候。我們將此過程稱為“離線”過程。
有關(guān)更多信息,請(qǐng)參閱光照和渲染教程。
優(yōu)勢(shì)和代價(jià)
雖然可以同時(shí)使用烘焙 GI 光照和預(yù)計(jì)算實(shí)時(shí) GI,但要注意,同時(shí)渲染兩個(gè)系統(tǒng)的性能開銷也是各自開銷的總和。我們不僅需要在視頻內(nèi)存中存儲(chǔ)兩組光照貼圖,而且還要在著色器中進(jìn)行解碼的處理。
在什么情況下選擇什么光照方法取決于項(xiàng)目的性質(zhì)和目標(biāo)硬件的性能。例如,在視頻內(nèi)存和處理能力局限性更大的移動(dòng)端,烘焙 GI 光照方法可能具有更高性能。在具有專用圖形硬件的獨(dú)立計(jì)算機(jī)或最新款的游戲主機(jī)上,很可能可以使用預(yù)計(jì)算實(shí)時(shí) GI,甚至同時(shí)使用這兩個(gè)系統(tǒng)。
必須根據(jù)特定項(xiàng)目和所需目標(biāo)平臺(tái)的性質(zhì)來決定采用哪種方法。請(qǐng)記住,在面向一系列不同硬件時(shí),通常情況下,性能最低的硬件將決定選取哪種方法。