Unity預(yù)計(jì)算全局實(shí)時(shí)GI(三)- 光照?qǐng)D表(Charts)

在Unity PRGI里,一個(gè)光照?qǐng)D表(Chart)是表示一個(gè)光照貼圖(Lightmap)的區(qū)域,這個(gè)區(qū)域用來映射一個(gè)給定場景對(duì)象的光照貼圖的UV。你可以認(rèn)為它是能影響對(duì)象的一張瓦片圖。一個(gè)光照?qǐng)D表由兩部分組成:輻射度(irradiance)和方向性(directionality(對(duì)主要的光線方向進(jìn)行編碼)

當(dāng)PRGI被生成時(shí),光照?qǐng)D表里的每個(gè)紋素都會(huì)被計(jì)算光照。一個(gè)場景中有大量的光照?qǐng)D表對(duì)預(yù)計(jì)算時(shí)間來說是最大的劣勢之一,所以為了優(yōu)化光照預(yù)計(jì)算時(shí)間,理解光照?qǐng)D表的工作原理以及怎么樣去管理它們是很重要的。


展示了一個(gè)最小規(guī)格4*4紋素大小的光照?qǐng)D表的UV。為了阻止由于過濾紋理而導(dǎo)致的泄露,光照?qǐng)D表的四周總是被光照貼圖UV多留出半個(gè)紋素

默認(rèn)情況下,每個(gè)光照?qǐng)D表至少是4*4的紋素大小,不管世界中的對(duì)象物體或者對(duì)應(yīng)的UV shell有多大,一個(gè)光照?qǐng)D表至少需要16個(gè)紋素。因此如果有一個(gè)1x1米的對(duì)象物體并帶有一個(gè)光照?qǐng)D表并且我們的間接分辨率是1,那么這個(gè)對(duì)象物體就需要16個(gè)紋素來表現(xiàn)。最小的尺寸使Unity能夠?qū)⑦@些圖表縫合在一起用于計(jì)算模型邊緣的無縫光照。Unity需要每張圖表的邊緣至少有4個(gè)紋素,方便在縫合不同光照?qǐng)D時(shí)有對(duì)照的依據(jù)。.

要注意的是使用實(shí)時(shí)GI時(shí)不需要自己去填充這些UV的邊,因?yàn)閁nity在mesh導(dǎo)入管線包裝階段,在截取光照貼圖UV時(shí)在光照?qǐng)D表的四邊上會(huì)留出半個(gè)紋素。這樣就能讓相鄰的圖表無需做滲色處理,也能保持雙線性插值(Bilinearly Interpolated),能節(jié)省寶貴的光照貼圖的空間。

可以想象一下: 1x1米的對(duì)象如果帶有50張光照?qǐng)D表,Unity會(huì)為它創(chuàng)建800個(gè)紋素。盡管這個(gè)數(shù)字看上去相對(duì)較小,但說明了當(dāng)光照?qǐng)D表的數(shù)量一大就會(huì)快速拉高紋素的數(shù)量。越多的紋素意味著更多的光照運(yùn)算要處理,更多的光照數(shù)據(jù)需要被計(jì)算、壓縮和儲(chǔ)存,這些因素都會(huì)提高場景的復(fù)雜度,并導(dǎo)致運(yùn)行時(shí)長時(shí)間的計(jì)算和較低的效率。

不合理的光照?qǐng)D表規(guī)劃一般是導(dǎo)致預(yù)計(jì)算耗時(shí)過長或無法完成的主因。也因?yàn)槿绱耍覀冊(cè)S多減少預(yù)計(jì)算時(shí)間的明顯策略大多都是思考如何降低場景內(nèi)光照?qǐng)D表的數(shù)量。


下一篇:Unity預(yù)計(jì)算全局實(shí)時(shí)GI(四)- 預(yù)計(jì)算處理過程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容