反射探針性能和優(yōu)化
由于諸多原因,渲染反射探針的立方體貼圖需要大量的處理器時間:
1.必須使用探針原點處的“攝像機”單獨渲染立方體貼圖六個面中的每一面。
2.對于反射的每個反彈級別,探針都需要單獨的時間進(jìn)行渲染(請參閱高級反射探針的文檔以了解更多詳細(xì)信息)。
3.立方體貼圖的各種 Mipmap 級別必須經(jīng)過模糊處理才能進(jìn)行光澤反射。
渲染探針?biāo)ㄙM的時間會影響 Editor 中的烘焙工作流程,更重要的是會影響播放器的運行時性能。以下是將反射探針的性能影響降至最低的一些提示。
一般提示
以下問題會同時影響脫機烘焙和運行時性能。
分辨率
立方體貼圖的分辨率越高,渲染時間就越長。可以通過在反射細(xì)節(jié)不太重要的位置設(shè)置較低分辨率來優(yōu)化探針(例如,如果反射對象較小和/或較遠(yuǎn),自然就會顯示較少的細(xì)節(jié))。在細(xì)節(jié)明顯的位置仍應(yīng)當(dāng)使用較高的分辨率。
剔除遮罩 (Culling Mask)
提高普通攝像機性能的一項標(biāo)準(zhǔn)技術(shù)是使用?Culling Mask?屬性來避免渲染無關(guān)緊要的對象;該技術(shù)同樣適用于反射探針。例如,如果場景包含許多小對象(例如,巖石和植物),可以考慮將它們?nèi)糠旁谕粚由希缓笫褂锰蕹谡謥肀苊庠诜瓷渲袖秩舅鼈儭?/p>
紋理壓縮
要優(yōu)化渲染時間并降低 GPU 內(nèi)存消耗,請使用紋理壓縮。要控制烘焙反射探針的紋理壓縮,請打開 Lighting 窗口(菜單:__Window__ >?Lighting?>?Settings__),導(dǎo)航到?Environmental Lighting__ >?Reflections__,然后使用?Compression__ 下拉菜單。請注意,在內(nèi)存中不會壓縮實時反射探針,這些探針在內(nèi)存中的大小取決于分辨率和 HDR 設(shè)置。因此,采樣實時反射探針通常比采樣烘焙反射探針更耗費資源。
實時探針優(yōu)化
實時探針的渲染開銷通常高于 Editor 中的烘焙探針。實時探針的更新可能非常頻繁,如果管理不當(dāng),可能會對幀率產(chǎn)生影響。考慮到這一點,實時探針提供了以下屬性,讓您盡可能高效處理探針渲染:
刷新模式 (Refresh Mode)
通過?Refresh Mode?可選擇探針的更新時間。就處理器時間而言,最耗費資源的選項是?Every Frame。此模式可通過最少的編程工作提供最頻繁的更新,但如果對所有探針都使用此模式,可能會遇到性能問題。
如果此模式設(shè)置為 __On Awake__,探針將在運行時更新,但只在場景開始時更新一次。如果場景(或場景的一部分)在運行時設(shè)置好,而在其生命周期內(nèi)不再改變,則此模式非常有用。
最后一個模式?Via Scripting?允許您從腳本控制探針更新。盡管在編寫腳本時需要耗費一些精力,但這種方法確實可以實現(xiàn)有用的優(yōu)化。例如,您可以根據(jù)經(jīng)過對象的表觀大小更新探針(即,小對象或遠(yuǎn)處的大對象不值得更新)。
時間切片 (Time Slicing)
上述?Refresh Mode?設(shè)置為?Every Frame?時,處理負(fù)載可能相當(dāng)繁重。Time Slicing?允許您在幾個幀之間分?jǐn)偢鲁杀?,從而減少任何給定時間的負(fù)載。此屬性有三個不同的選項:
1.All Faces at Once?將立即渲染立方體貼圖的六個面(在同一幀上),但六個第一級 Mipmap 中每一個的模糊操作將在不同的幀上進(jìn)行。然后,剩余的 Mipmap 將在單個幀上進(jìn)行模糊處理,并將結(jié)果復(fù)制到另一個幀上的立方體貼圖。因此,完整更新需要九幀才能完成。
2.Individual Faces?與?All Faces at Once?的工作方式相同,只是立方體貼圖每個面的初始渲染都在自己的幀上進(jìn)行(而不是所有六個面都在第一幀上進(jìn)行渲染)。完整更新需要十四幀才能完成;此選項對幀率的影響最小,但是假如光照條件突然改變時(例如,突然開燈),更新時間可能明顯會相對較長。
3.No Time Slicing?完全禁用時間切片操作,因此每次探針更新都在一個幀內(nèi)進(jìn)行。這樣確保了反射與周圍對象的外觀精確同步,但是處理成本可能過高。
與其他優(yōu)化一樣,您應(yīng)該考慮在反射不太重要的位置使用質(zhì)量較低的選項,而在能注意到細(xì)節(jié)的位置保留?No Time Slicing?選項。