在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表的工作原理以及怎么樣去管理它們是很重要的。

默認(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ù)量。