可编程渲染管线 SRP 批处理程序 (SRP Batcher) 是一种绘制调用优化,可显著提高使用 SRP 的应用程序的性能。SRP Batcher 减少了 Unity 为使用相同着色器变体的材质准备和分发绘制调用所需的 CPU 时间。
本节包含有关 SRP Batcher 的渲染管线兼容性的信息。
| 功能 | 通用渲染管线 (URP) | 高清渲染管线 (HDRP) | 自定义可编程渲染管线 (SRP) | 内置渲染管线 |
|---|---|---|---|---|
| SRP Batcher | 是 | 是 | 是 | 否 |
优化绘制调用的传统方法是减少绘制调用的数量。相反,SRP Batcher 会减少绘制调用之间的渲染状态更改。为此,SRP Batcher 组合了一系列 bind 和 draw GPU 命令。每个命令序列被称为 SRP 批次。
为了实现渲染的最佳性能,每个 SRP 批次应包含尽可能多的 bind 和 draw 命令。为此,请使用尽可能少的着色器变体。您仍然可以根据自己的需求,使用尽可能多的、带有相同着色器的不同材质。
在渲染循环中,当 Unity 检测到新材质时,CPU 会收集所有属性并将它们绑定到 GPU 中的常量缓冲区。GPU 缓冲区的数量取决于着色器如何声明其常量缓冲区。
SRP Batcher 是一个低级渲染循环,使材质数据持久保留在 GPU 内存中。如果材质内容没有变化,SRP Batcher 不会进行任何渲染状态更改。实际上,SRP Batcher 会使用专用的代码路径来更新大型 GPU 缓冲区中的 Unity 引擎属性,如下所示:
在此处,CPU 仅处理上图中标记为每对象大型缓冲区 (Per Object large buffer) 的 Unity 引擎属性。所有材质在 GPU 内存中都有持久的常量缓冲区,可供随时使用。这样会加快渲染速度,原因在于: