关于shader.createGPUProgram耗时较高的问题
生活随笔
收集整理的這篇文章主要介紹了
关于shader.createGPUProgram耗时较高的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
UNITY對于shader的加載策略是:只有第一次在相機中出現時才會去創建相應的shader,測試用例如下:
1,創建測試場景 testscene
2,在testscene中創建一個 cube,為它創建一個材質 matx,使用一個shaderx
3,確保cube不在相機視野內
4,添加一個按鈕 btnUseShader,添加腳本如下,
public class btnUseShader : MonoBehaviour {public GameObject cube;void Start(){//=============================warm start===============================/*var sv = Resources.Load<ShaderVariantCollection>("warmups");if (sv != null){sv.WarmUp();Debug.LogError("load success ========================================");}*/
//=============================warm end================================
GetComponent<Button>().onClick.AddListener(() => { //當點擊按鈕時將cube移到相機視野內,用profiler觀察有線程的cpu波峰cube.transform.position = Vector3.zero;});} }
5,【不使用shader預熱】:打安卓包測試,運行游戲,ADB方式連接unity profiler,點擊按鈕的一瞬間發現主線程cpu有一個明顯的巨大波峰,點擊查看正是shader.createGPUProgram
6,【使用shader預熱】:將 warm start和 warm end之間的代碼打開,并在Resources目錄下創建一個名為warmups的shaderVarriantCollection,添加第2步中創建的 shaderx到其中,
再次打包測試,運行游戲,連接profiler,點擊按鈕時CPU不再有明顯的波動,說明已沒有了shader.creategpuprogram消耗
總結
以上是生活随笔為你收集整理的关于shader.createGPUProgram耗时较高的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 强大的mono.ceil
- 下一篇: 空场景在安卓上的渲染消耗问题