基本概念
SRP Batcher 是一个渲染循环,可通过许多使用同一着色器变体的材质来加快场景中的 CPU 渲染速度。(可以理解为合批处理),如标题所讲要使用SRP Batcher项目必须使用可编程渲染管线。可以是URP(通用渲染管线)/HDRP(高清渲染管线)/SRP(自定义)。
本文主要讲述在URP中使用SRP Batcher,在创建好URP工程之后(如何新建URP工程不是本文重点这里不在赘述),需要在对应的UniversalRenderPipelineAsset的Inspector窗口,找到Advance勾选SRP Batcher,当然默认也是勾选的。也可以在代码中动态修改
GraphicsSettings.useScriptableRenderPipelineBatching = true;
SRP Batcher 的工作原理
Unity 中,可以在一帧内的任何时间修改任何材质的属性。但是,这种做法有一些缺点。例如,DrawCall 使用新材质时,要执行许多作业。因此,场景中的材质越多,Unity 必须用于设置 GPU 数据的 CPU 也越多。解决此问题的传统方法是减少 DrawCall 的数量以优化 CPU 渲染成本,因为 Unity 在发出 DrawCall 之前必须进行很多设置。实际的 CPU 成本便来自该设置,而不是来自 GPU DrawCall 本身(DrawCall 只是 Unity 需要推送到 GPU 命令缓冲区的少量字节)。
SRP Batcher 通过批处理一系列 Bind
和 Draw
GPU 命令来减少 DrawCall 之间的 GPU 设置。