當(dāng)使用預(yù)計(jì)算實(shí)時(shí)全局光照(PRGI)為一個(gè)場景設(shè)置光照時(shí),首先要決定的是設(shè)置場景默認(rèn)的實(shí)時(shí)分辨率(Realtime Resolution)躺坟。Realtime Resolution是每個(gè)世界單位所使用的實(shí)時(shí)光照貼圖紋素(貼圖像素)的數(shù)量卵佛。
Realtime Resolution設(shè)定可以在Lighting窗口中找到并調(diào)整涉馅,方法如下:
* 打開 Lighting 窗口 (Window>Lighting) 然后選擇? Scene 標(biāo)簽頁缰猴。
* 通過勾選 Precomputed Realtime GI 選項(xiàng) 以確保 開啟Precomputed Realtime GI 功能吗购。
* 在Precomputed Realtime GI選項(xiàng)框下面肄方,可以看到 Realtime Resolution 屬性冰垄。
選擇一個(gè)合適的Realtime Resolution
當(dāng)設(shè)置一個(gè)場景時(shí)了解你工程的單位比例是很重要的∪ㄋ可能在你的項(xiàng)目里一個(gè)單位等于現(xiàn)實(shí)世界的1米虹茶、一英尺或一公分。Unity中的單位沒有默認(rèn)設(shè)成真實(shí)世界的比例單位隅要,所以要由開發(fā)者自行決定蝴罪。
在我們的工程中我們已經(jīng)決定讓一個(gè)單位等于一米。一些物理概念假設(shè)一樣,例如在Unity中重力的預(yù)設(shè)就是以每秒多少單位來表示的步清。假設(shè)一個(gè)單位等于一米,對于一個(gè)真實(shí)世界的場景來說是一個(gè)很好的設(shè)置要门。
Realtime Resolution的值通常可以由游戲世界的規(guī)模來制定廓啊。例如欢搜,如果你的場景是一個(gè)小型但擁有豐富光照變化的室內(nèi)環(huán)境,為了捕捉這種更詳細(xì)或者“高頻率的”光照谴轮,更高分辨率的光照貼圖比如每個(gè)單位2-3個(gè)紋素可能比較合適炒瘟。
如果你的場景是一個(gè)規(guī)模較大的戶外環(huán)境,可能覆蓋了幾百甚至上千單位(平方米)的表面第步,而這些表面并不會(huì)劇烈地改變反射光的顏色疮装。在這樣的情況下,使用這種適合捕捉在室內(nèi)場景中錯(cuò)綜復(fù)雜的光照細(xì)節(jié)的分辨率是一種浪費(fèi)粘都。我們會(huì)浪費(fèi)寶貴的CPU時(shí)間和內(nèi)存去更新那些對整體外觀貢獻(xiàn)不大的光照貼圖廓推。為了本教程的目的,我們會(huì)提高在光照預(yù)計(jì)算期間必須被考慮的光照貼圖的紋素?cái)?shù)量翩隧。這會(huì)對預(yù)計(jì)算時(shí)間產(chǎn)生很大的影響樊展。
針對室外環(huán)境,對于場景中的比較大的對象物體,一種合理的光照貼圖分辨率設(shè)置可能在每單位0.5-1個(gè)紋素之間滚局,或者對于terrain來說居暖,那么每個(gè)單位0.1-0.5個(gè)紋素比較合適。
預(yù)計(jì)算全局實(shí)時(shí)光照分辨率 vs 傳統(tǒng)的光照貼圖
Unity PRGI所需要的Realtime Resolution值比傳統(tǒng)光照貼圖密度要小好幾個(gè)等級藤肢,這是因?yàn)槲覀冎粡倪@些光照圖里獲取間接光照的數(shù)據(jù)太闺,且這些數(shù)據(jù)通常分辨率都很低。所以使用PRGI時(shí)嘁圈,清晰的陰影通常都是通過提供實(shí)時(shí)陰影而不是高分辨率的光照貼圖省骂。
在傳統(tǒng)光照貼圖技術(shù)中,使用每個(gè)單位30個(gè)紋素這樣的設(shè)置最住,可能會(huì)導(dǎo)致預(yù)計(jì)算失敗或無法完成計(jì)算钞澳。
對于室內(nèi)場景更合適的設(shè)置是每個(gè)單位2-3個(gè)紋素,而對于室外環(huán)境則為每個(gè)單位0.5-1個(gè)紋素涨缚。
這種假設(shè)是以在真實(shí)世界場景中1單位 = 1米的情況為前提轧粟,如果世界單位的大小發(fā)生改變,這些設(shè)置的值響應(yīng)地就需要被調(diào)整
具體可以參考以下的場景與Realtime Resolution值對照表(1單位代表1米):
當(dāng)初次設(shè)置我們場景的實(shí)時(shí)分辨率脓魏,我們?yōu)槲覀儓鼍爸械撵o態(tài)對象物體指定了默認(rèn)的分辨率兰吟。新建的帶有Mesh Renderer且標(biāo)記為靜態(tài)光照(Lightmap Static)的對象,會(huì)使用這個(gè)值一直到它被修改茂翔。
除了為整個(gè)場景選擇實(shí)時(shí)分辨率混蔼,我們還能針對每個(gè)對象調(diào)整光照貼圖的分辨率。在需要高分辨率來提供更高真實(shí)感的情況下珊燎,我們可以選擇性的提高這個(gè)值惭嚣。通常是將場景里最多的對象分辨率設(shè)為默認(rèn)值,然后手動(dòng)調(diào)高需要更多照明細(xì)節(jié)對象的值悔政。之后我們會(huì)討論修改每個(gè)對象物體分辨率的方法晚吞。
設(shè)置我們場景的 Realtime Resolution
如果你想跟著我們一直學(xué)習(xí)下去,我們將會(huì)在LightingTutorialStart場景中展開教學(xué)卓箫,這個(gè)場景位于本頁頁頂?shù)逆溄?i>Lighting Optimisation Tutorial中载矿。
在我們的示例場景中,我們有一個(gè)戶外場景烹卒,這個(gè)場景具有一個(gè)擁有顏色一致的中等大小的地形闷盔。為此,一個(gè)每個(gè)單位0.5紋素的低實(shí)時(shí)分辨率對于捕捉場景中從其他對象反射的光照是足夠了的旅急。然而逢勾,在場景中有一些細(xì)節(jié)很高的木質(zhì)房子,它們的數(shù)量比地形對象還多藐吮,我們應(yīng)該為房子設(shè)置合適的實(shí)時(shí)分辨率溺拱。然后我們可以單獨(dú)修改地形對象的分辨率逃贝,這樣可以降低場景準(zhǔn)備的工作量∑人ぃ考慮到這一點(diǎn)沐扳,我們將要對默認(rèn)實(shí)時(shí)分辨率使用每個(gè)世界單位1個(gè)紋素的設(shè)置。操作步驟如下:
* 打開 Lighting 窗口 (Window>Lighting) 然后選擇Scene 標(biāo)簽頁.
* 設(shè)置 Realtime Resolution 的值為1.
由于我們的世界單位設(shè)定為1單位 = 1米句占,這表示一張由Unity中PRGI生成的光照貼圖將會(huì)是1x1米的大小沪摄,這可能看起來像素很低,請記住我們只捕捉間接光照纱烘。清晰地陰影以及鏡面高光將會(huì)在場景中由實(shí)時(shí)光所計(jì)算提供 杨拐。