2018年8月6日 星期一

Unity Batching與GPU instance效能分析

相關測試畫面如下(這邊提供的是GPU Instance的畫面,所以可以給不同的顏色,但材質卻是一樣的,Mesh都是Cylinder):






















測試分析結果如下:


由此可知,使用DrawMeshInstanced效能最佳,而且還可以利用MaterialPropertyBlock來給予不
同的參數(共用一個Material),而且它對三角形數量影響效能的狀況不明顯,但缺點就是Mesh要一樣,不過效能實在差太多了,Unity Object Transform量大的話,影響效能真的甚巨,。另外值得注意的是,原本只要OpenGLES3.0,就有支援GPU Instance,但是高通的Andreno要OpenGLES3.1以上才支援,所以低階的硬體只能走回batching的老路。

總結,如果有相同大量的物件GPU Instance是最好的選擇。

Dream continues in...

4 則留言:

  1. 不認為 Instance Draw 還需要 16.7ms,這有關閉 VSYNC 嗎?

    回覆刪除
    回覆
    1. 那是因為在手機下會被鎖在60,上面有說platform是S8。

      刪除
  2. Instance by GameObject Render 是使用Material里的Enable GPU Instancing那种方式嗎? 同樣是Instance為什么與DrawMeshInstanced差別那么大?

    回覆刪除
  3. 因為一個是使用接近底層Graphic API的做法,完全沒有Object、component、Transform的負擔。

    回覆刪除