GPU Instancing是一種繪制調用優化方法,可在單個繪制調用中渲染具有相同材質Mesh的多個副本(實例),可用于繪制在場景中多次出現的幾何體(例如,樹木或灌木叢),在同一繪制調用中渲染相同的網格,每個實例可以具有不同的屬性(如 Color 或 Scale),渲染多個實例的繪制調用在 Frame Debugger 中顯示為 Draw Mesh (instanced)。
兼容性:
功能 | 內置渲染管線 | 通用渲染管線 (URP) | 高清渲染管線 (HDRP) | 自定義可編程渲染管線 (SRP) |
---|---|---|---|---|
GPU Instancing | 是 | 是 (1) | 是 (1) | 是 (1) |
注:
(1)當著色器與SRP Batcher不兼容時,GPU Instancing支持URP,HDRP,SRP。
(2)GPU 實例化與 SRP Batcher 不兼容,SRP Batcher 優先于 GPU Instancing 執行。
(3)如果項目使用已經使用了 SRP Batcher,并且對游戲對象要使用 GPU 實例化,可以使用 Graphics.DrawMeshInstanced(此 API 繞過了 GameObjects 的使用,使用指定的參數直接在屏幕上繪制網格),手動刪除 SRP Batcher 兼容性(詳細看SRP Batcher中的介紹)。
使用條件:
材質要求??:
1.使用的Shader必須支持GPU Instancing(Unity標準著色器和所有的表面著色器都支持),自定義著色器需手動添加GPU Instancing支持。
網格要求:
1.來源于MeshRenderer 組件或 Graphics.RenderMesh 調用繪制的,Unity 會將這些網格添加到列表中,然后檢查哪些網格可以實例化。
2.使用Graphics.RenderMeshInstanced 或 Graphics.RenderMeshIndirect 調用繪制的。
不支持的情況:
不支持對附加到與 SRP Batcher 兼容的游戲對象的 SkinnedMeshRenderer 或 MeshRenderer 組件進行 GPU Instancing。
注:使用Graphics.RenderMeshInstanced 和 Graphics.RenderMeshIndirect,這些方法使用相同的著色器多次渲染相同的網格,每次調用單獨生成 Draw Call,不會合并。
開啟GPU Instancing:
1.內置的著色器開啟:
直接在材質的屬性面板找到Enable GPU Instancing,并勾選即可。
開啟前開啟后
2.自定義著色器開啟:
兼容性:
特征 | 內置渲染管線 |
---|