在某些极少数情况下,您可能希望故意使特定游戏对象与 SRP 批处理程序 (SRP Batcher) 不兼容。例如,如果要使用与 SRP Batcher 不兼容的 GPU 实例化。如果要使用完全相同的材质渲染许多相同的网格,GPU 实例化可能比 SRP Batcher 更高效。要使用 GPU 实例化,必须:
有两种方法可以从游戏对象中删除与 SRP Batcher 的兼容性:
提示:如果使用 GPU 实例化而不是 SRP Batcher,请使用性能分析器 (Profiler) 确保 GPU 实例化比 SRP Batcher 对应用程序更加有效。
可以使手动编写的着色器和 Shader Graph 着色器与 SRP Batcher 不兼容。但是,对于 Shader Graph 着色器,如果经常更改和重新编译 Shader Graph,则让渲染器不兼容是更简单的选择。
要使 Unity 着色器与 SRP Batcher 不兼容,需要对着色器源文件进行更改:
Properties 代码块中。切勿在 UnityPerMaterial 常量缓冲区中声明新材质属性。材质属性不需要执行任何操作;如果仅具有 UnityPerMaterial 常量缓冲区中不存在的材质属性,那么着色器会与 SRP Batcher 不兼容。
警告:如果使用 Shader Graph,请注意,每次编辑和重新编译 Shader Graph 时,都必须重复此过程。
可以使单独的渲染器与 SRP Batcher 不兼容。为此,请将 MaterialPropertyBlock 添加到渲染器。