Unity中GPU Instancing使用整理
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.自定义着色器开启:
兼容性:
特征 | 内置渲染管线 |
---|