在Unity PRGI里,一個光照圖表(Chart)是表示一個光照貼圖(Lightmap)的區域,這個區域用來映射一個給定場景對象的光照貼圖的UV。你可以認為它是能影響對象的一張瓦片圖。一個光照圖表由兩部分組成:輻射度(irradiance)和方向性(directionality)(對主要的光線方向進行編碼)
當PRGI被生成時,光照圖表里的每個紋素都會被計算光照。一個場景中有大量的光照圖表對預計算時間來說是最大的劣勢之一,所以為了優化光照預計算時間,理解光照圖表的工作原理以及怎么樣去管理它們是很重要的。
默認情況下,每個光照圖表至少是4*4的紋素大小,不管世界中的對象物體或者對應的UV shell有多大,一個光照圖表至少需要16個紋素。因此如果有一個1x1米的對象物體并帶有一個光照圖表并且我們的間接分辨率是1,那么這個對象物體就需要16個紋素來表現。最小的尺寸使Unity能夠將這些圖表縫合在一起用于計算模型邊緣的無縫光照。Unity需要每張圖表的邊緣至少有4個紋素,方便在縫合不同光照圖時有對照的依據。.
要注意的是使用實時GI時不需要自己去填充這些UV的邊,因為Unity在mesh導入管線包裝階段,在截取光照貼圖UV時在光照圖表的四邊上會留出半個紋素。這樣就能讓相鄰的圖表無需做滲色處理,也能保持雙線性插值(Bilinearly Interpolated),能節省寶貴的光照貼圖的空間。
可以想象一下: 1x1米的對象如果帶有50張光照圖表,Unity會為它創建800個紋素。盡管這個數字看上去相對較小,但說明了當光照圖表的數量一大就會快速拉高紋素的數量。越多的紋素意味著更多的光照運算要處理,更多的光照數據需要被計算、壓縮和儲存,這些因素都會提高場景的復雜度,并導致運行時長時間的計算和較低的效率。
不合理的光照圖表規劃一般是導致預計算耗時過長或無法完成的主因。也因為如此,我們許多減少預計算時間的明顯策略大多都是思考如何降低場景內光照圖表的數量。