版本:Unity 6 (6000.0)
语言:英语
在 URP 中排查 SRP Batcher 问题
URP 中的 BatchRendererGroup API

在 URP 中移除 SRP Batcher 对游戏对象的兼容性

在某些极少数情况下,您可能希望有意使某些 游戏对象Unity 场景中的基本对象,可以表示角色、道具、场景、相机、路径点等等。游戏对象的的功能由附加到它的组件来定义。 更多信息
参见 术语表
与 SRP Batcher 不兼容。例如,如果您想使用 GPU 实例化,而它与 SRP Batcher 不兼容。如果您想使用完全相同的材质渲染许多相同的网格,GPU 实例化可能比 SRP Batcher 更有效。要使用 GPU 实例化,您必须:

有两种方法可以从游戏对象中移除 SRP Batcher 的兼容性

  • 使 着色器在 GPU 上运行的程序。 更多信息
    参见 术语表
    不兼容。
  • 使渲染器不兼容。

提示:如果您使用 GPU 实例化而不是 SRP Batcher,请使用 分析器一个帮助您优化游戏的窗口。它显示了在游戏的各个部分花费的时间。例如,它可以报告渲染、动画或游戏逻辑中花费的时间百分比。 更多信息
参见 术语表
来确保 GPU 实例化比 SRP Batcher 对您的应用程序更有效。

移除着色器兼容性

您可以使手写着色器和着色器图着色器与 SRP Batcher 不兼容。但是,对于着色器图着色器,如果您经常更改和重新编译着色器图,那么使 渲染器不兼容 会更简单。

要使 Unity 着色器与 SRP Batcher 不兼容,您需要对着色器源文件进行更改

  1. 对于手写着色器,打开着色器源文件。对于着色器图着色器,将着色器图的编译后的着色器源代码复制到新的着色器源文件中。在您的应用程序中使用新的着色器源文件,而不是着色器图。
  2. 在着色器的 Properties 块中添加新的 材质属性 声明。不要在 UnityPerMaterial 常量缓冲区中声明新的材质属性。

材质属性不需要做任何事情;只要有一个不存在于 UnityPerMaterial 常量缓冲区中的材质属性,就会使着色器与 SRP Batcher 不兼容。

警告:如果您使用着色器图,请注意,每次编辑和重新编译着色器图时,您都必须重复此过程。

移除渲染器兼容性

您可以使单个渲染器与 SRP Batcher 不兼容。为此,请向渲染器添加一个 MaterialPropertyBlock

在 URP 中排查 SRP Batcher 问题
URP 中的 BatchRendererGroup API