Version: Unity 6.0 (6000.0)
语言 : 中文
URP 中的可编程渲染管线 (SRP) 批处理程序
在 URP 中检查游戏对象是否与 SRP 批处理程序兼容

URP 中的可编程渲染管线批处理程序

可编程渲染管线 SRP 批处理程序 (SRP Batcher) 是一种绘制调用优化,可显著提高使用 SRP 的应用程序的性能。SRP Batcher 减少了 Unity 为使用相同着色器变体的材质准备和分发绘制调用所需的 CPU 时间。

可编程渲染管线 SRP Batcher 减少了 Unity 使用大量着色器变体相同的材质渲染场景所需的 CPU 时间。
可编程渲染管线 SRP Batcher 减少了 Unity 使用大量着色器变体相同的材质渲染场景所需的 CPU 时间。

要求和兼容性

本节包含有关 SRP Batcher 的渲染管线兼容性的信息。

渲染管线兼容性

功能 通用渲染管线 (URP) 高清渲染管线 (HDRP) 自定义可编程渲染管线 (SRP) 内置渲染管线
SRP Batcher

SRP Batcher 的工作原理

优化绘制调用的传统方法是减少绘制调用的数量。相反,SRP Batcher 会减少绘制调用之间的渲染状态更改。为此,SRP Batcher 组合了一系列 binddraw GPU 命令。每个命令序列被称为 SRP 批次。

绑定 (Bind) 和绘制 (Draw) 命令的批处理可以减少绘制调用之间的 GPU 设置。
绑定 (Bind) 和绘制 (Draw) 命令的批处理可以减少绘制调用之间的 GPU 设置。

为了实现渲染的最佳性能,每个 SRP 批次应包含尽可能多的 binddraw 命令。为此,请使用尽可能少的着色器变体。您仍然可以根据自己的需求,使用尽可能多的、带有相同着色器的不同材质。

在渲染循环中,当 Unity 检测到新材质时,CPU 会收集所有属性并将它们绑定到 GPU 中的常量缓冲区。GPU 缓冲区的数量取决于着色器如何声明其常量缓冲区。

SRP Batcher 是一个低级渲染循环,使材质数据持久保留在 GPU 内存中。如果材质内容没有变化,SRP Batcher 不会进行任何渲染状态更改。实际上,SRP Batcher 会使用专用的代码路径来更新大型 GPU 缓冲区中的 Unity 引擎属性,如下所示:

SRP Batcher 渲染工作流程。SRP Batcher 会使用专用的代码路径来更新大型 GPU 缓冲区中的 Unity 引擎属性。
SRP Batcher 渲染工作流程。SRP Batcher 会使用专用的代码路径来更新大型 GPU 缓冲区中的 Unity 引擎属性。

在此处,CPU 仅处理上图中标记为每对象大型缓冲区 (Per Object large buffer) 的 Unity 引擎属性。所有材质在 GPU 内存中都有持久的常量缓冲区,可供随时使用。这样会加快渲染速度,原因在于:

  • 所有材质内容如今都持久保留在 GPU 内存中。
  • 专用代码为所有的每个对象的属性,管理一个大型的每个对象的 GPU 常量缓冲区。
URP 中的可编程渲染管线 (SRP) 批处理程序
在 URP 中检查游戏对象是否与 SRP 批处理程序兼容