国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Unity-優(yōu)化著色器變體

2021-04-15 09:26 作者:unity_某某師_高錦錦  | 我要投稿

著色器是在 GPU 上執(zhí)行的小程序,加載它們可能需要一些時間。每個單獨(dú)的 GPU 程序通常不會花費(fèi)很多時間來加載,但著色器通常在內(nèi)部有很多“變體”。

例如,標(biāo)準(zhǔn)著色器在完全編譯后,最終將成為數(shù)千個略微不同的 GPU 程序。這種情況可產(chǎn)生兩個潛在問題:

  • 大量的這些著色器變體將增加游戲構(gòu)建時間和游戲數(shù)據(jù)大小。

  • 在運(yùn)行時加載大量著色器變體將很慢并占用內(nèi)存。

構(gòu)建時剝離

在構(gòu)建游戲時,Unity 可能檢測到游戲不使用某些內(nèi)部著色器變體,并從構(gòu)建數(shù)據(jù)中排除(“剝離”)它們。構(gòu)建時剝離將用于以下各項(xiàng):

  • 對于使用?#pragma shader_feature?的著色器,Unity 會自動檢查是否使用了變體。如果構(gòu)建中的材質(zhì)都不使用某個變體,則該變體不會包含在構(gòu)建中。請參閱內(nèi)部著色器變體文檔。標(biāo)準(zhǔn)著色器會使用此功能。

  • 任何場景未使用的可處理霧效和光照貼圖模式的著色器變體不會包含在游戲數(shù)據(jù)中。如果要覆蓋此行為,請參閱?Graphics?窗口。

  • 還可以手動識別變體并使用?OnProcessShader?API 告訴 Unity 將這些變體從構(gòu)建中排除。

上述的組合通常會大大減小著色器數(shù)據(jù)大小。例如,完全編譯后的標(biāo)準(zhǔn)著色器將占用幾百兆字節(jié),但在典型的項(xiàng)目中,通常最終僅占用幾兆字節(jié)(并且通常會由應(yīng)用程序打包過程進(jìn)一步壓縮)。

默認(rèn)的 Unity 著色器加載行為

在所有默認(rèn)設(shè)置下,Unity 在運(yùn)行時將?shaderlab 著色器對象加載到內(nèi)存中,但在實(shí)際需要之前不會創(chuàng)建內(nèi)部著色器變體。

這意味著仍然可以使用包含在構(gòu)建中的所有著色器變體,但是在需要它們之前不會有內(nèi)存或加載時間成本。例如,著色器可能總是包含一個變體用于處理帶陰影的點(diǎn)光源,但是如果一直未能在游戲中使用帶陰影的點(diǎn)光源,那么加載這個特定的變體是沒有意義的。

然而,這種默認(rèn)行為有一個缺點(diǎn),即第一次需要某個著色器變體時可能會出現(xiàn)暫時性中斷問題,這是因?yàn)楸仨殞⑿碌?GPU 程序代碼加載到圖形驅(qū)動程序中。在游戲過程中通常不希望發(fā)生這種問題,因此 Unity 提供了?ShaderVariantCollection?資源來幫助解決該問題。

著色器變體集合

ShaderVariantCollection 資源基本上是一個著色器列表,對于每個著色器,都要提前加載一組 Pass 類型和著色器關(guān)鍵字組合,而不是等到需要時再加載。

著色器變體集合檢視面板 (Inspector)

為了幫助根據(jù)實(shí)際使用的著色器及其變體來創(chuàng)建這些資源,編輯器可以跟蹤實(shí)際使用的著色器及其變體。在?Graphics?窗口中,有一個按鈕可基于當(dāng)前跟蹤的著色器創(chuàng)建新的 ShaderVariantCollection,或清除當(dāng)前跟蹤的著色器列表。

基于編輯器使用的著色器創(chuàng)建 ShaderVariantCollection

有了一些 ShaderVariantCollection 資源后,即可設(shè)置在加載應(yīng)用程序時自動預(yù)加載這些變體(位于?Graphics?窗口中的 Preloaded Shaders 列表下),或者也可從腳本預(yù)加載單個著色器變體集合。

Preloaded Shaders 列表列出的是常用著色器。此處列出的著色器變體將在應(yīng)用程序的整個生命周期內(nèi)加載到內(nèi)存中。對于包含大量變體的 ShaderVariantCollections 資源,這可能會占用大量內(nèi)存。為避免這種情況,應(yīng)以較小的粒度創(chuàng)建 ShaderVariantCollection 資源并從腳本進(jìn)行加載。一種策略是為每個場景記錄使用過的著色器變體,將它們保存到單獨(dú)的 ShaderVariantCollections 資源中,并在場景啟動時加載它們。

請參閱?ShaderVariantCollection?腳本類。


Unity-優(yōu)化著色器變體的評論 (共 條)

分享到微博請遵守國家法律
南投县| 夏邑县| 高州市| 铜陵市| 禹城市| 宣恩县| 丰原市| 新营市| 文成县| 平昌县| 临邑县| 壶关县| 兴隆县| 太康县| 清河县| 富顺县| 温州市| 色达县| 封开县| 永平县| 滨海县| 南郑县| 信宜市| 屏东市| 江安县| 宣城市| 贺州市| 曲靖市| 曲阜市| 台东市| 明水县| 隆尧县| 聂拉木县| 西平县| 台州市| 长阳| 铜陵市| 桦川县| 六枝特区| 沅陵县| 伊金霍洛旗|