Shader Variants 打包遇到的問題


1. 遇到的問題

最常見的是打包到手機后效果與PC上不一致,具體情況比如:

  • 光照貼圖失效
  • 霧失效
  • 透明或者cutoff失效
    以上首先需要檢查的地方是Shader變體的編譯設置

2. 超級着色器編譯成N個變體

如果需要多吧功能類似的shader, 比把透明,Cutoff和不透明等多個功能集合到一個Shader上,通常把這樣的Shader稱之為"超級着色器(uber shader)"

實際上這種集合是對shader代碼的分支管理, 通過開關不同的宏代碼實現功能的切換, 所以在Unity打包時,需要預編譯所有可能出現的分支版本.

變體的數量可能非常恐怖, Unity blog有一篇詳提到過變體的編譯: Stripping scriptable shader variants

3. 在Unity中管理shader變體編譯

3.1 Shader Stripping

菜單位置: Edit - Graphic Setting - Shader Stripping

Shader Stripping設置總結

  1. Shader Stripping包括以下幾個方面:
    • 光照模式
    • 霧模式
    • GPU Instance
    • 預加載變體
  2. 按實際使用勾選,如果全勾選, 打包shader幾個小時都編不完
  3. 如果選擇Auto, 結果可能不受控制

3.2 Shader Variant Collection

手動創建

手動修改

選中存出來的Shader Variants Collection文件, 直接在Inspector面板中點擊+ -號添加或刪除:

自動生成

Edit - Project Settings - Graphics

運行游戲, 讓游戲跑一會, 按下"Save to asset" 按鈕, 可以把自動搜集打開過場景的shader變體,存到一個文件中:

通過這個變體集合文件進行依賴打AssetBundle包的方式可以實現shader變體的預加載.

注意

自動搜集的功能不夠可靠, 做完還是要打包驗證,查缺補漏去除冗余是必須的.

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM