GPU Instancing 功能與計劃

- 團隊開發重點

  • The Terrain Team

- 什麼是 GPU Instancing?

  • 一個 draw call 同時繪製多個 geometry 相同物體

- 用途

  • 透過減少 draw call 數量降低 CPU,但不能減少 GPU 消耗

- 應用

  • 大量相同 Material、Mesh 的物體 (Ex: 植被、太空隕石)

- 渲染方式

  • instance data (世界矩陣、顏色等自訂屬性) -> 打包 Uniform Array -> 存入 Instance Constant Buffers -> Shader 讀取

- 限制

  • 使用 lightmap 的物體
  • 受不同 light probe / reflection probe 影響的物體
  • 使用 multi-pass shader 的物體,只有 first pass 可以 instancing
  • Forward Rendering 時,受多個光源影響的物體只有 base pass 可以 instancing , add passes 不行
  • 受制於 constant buffer 的大小限制 , 一個 instanced draw call 能畫的物體數量是有上限的 (參見 UnityInstancing.cginc 中的 UNITY_MAX_INSTANCE_COUNT)最後需要
  • 再次強調的是,Instancing在Shader上有額外的開銷,並不代表一定能提高FPS。永遠要以實際Profiling結果為準!

- 實作方式

  • 5.6前 project right -> create instancing shader
  • 5.6後 Material setting enable instancing

- New API

- 其他

  • 需要 OpenGL ES 3.1+ 手機目前支援度不高
  • Material setting enable instancing 時,打包時 shader 參考會被引入,造成打包後大小變大

- 相關參考



results matching ""

    No results matching ""