unity学习之可编程渲染管线 SRP Batcher

本文介绍了Unity的可编程渲染管线SRP Batcher的工作原理,强调了其在CPU渲染速度上的提升。内容包括如何在URP中启用SRP Batcher,Shader的兼容性条件,以及通过帧调试器和SRP BatcherProfiler.cs进行性能分析的方法。通过案例展示了关闭和开启SRP Batcher对DrawCall的影响,揭示了SRP Batcher如何提高渲染效率。

基本概念

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 设置。

Unity 6 中查看或配置渲染管线主要通过图形设置(Graphics Settings)和质量设置(Quality Settings)进行,同时也可以使用脚本 API 实现动态管理。以下是具体的操作方法: ### 查看当前渲染管线 1. 打开 Unity 编辑器后,进入 **Edit > Project Settings > Graphics**。 2. 在打开的窗口中,找到 **Scriptable Render Pipeline Settings** 字段。该字段会显示当前项目使用的 SRP 资源(如 URPAsset 或 HDRPAsset),如果为空,则表示正在使用内置渲染管线[^2]。 ### 配置渲染管线 #### 切换为 URP/HDRP 渲染管线 1. 创建所需的 SRP 资产(URPAsset 或 HDRPAsset)。可以通过右键点击项目面板,选择 **Create > Rendering > Universal Render Pipeline Asset**(用于创建 URP 资产)或相应的 HDRP 资产。 2. 将创建好的 SRP 资产拖放到 **Graphics Settings** 和 **Quality Settings** 的对应字段中: - **Graphics Settings**:位于 **Project Settings > Graphics** 页面。 - **Quality Settings**:位于 **Project Settings > Quality** 页面。 3. 这一步操作会将项目切换到所选的 SRP 管线(如 URP 或 HDRP)[^2]。 #### 切换回内置渲染管线 若希望将项目恢复为使用 Unity 的内置渲染管线,请清空所有 SRP 相关字段: - 在 **Graphics Settings** 和 **Quality Settings** 中,将 **Scriptable Render Pipeline Settings** 设置为空。 - 同时可通过脚本调用以下代码实现同样的功能: ```csharp GraphicsSettings.defaultRenderPipeline = null; QualitySettings.renderPipeline = null; ``` 此操作将移除对 SRP 的引用,并使项目重新使用内置渲染管线[^2]。 #### 动态切换渲染管线 Unity 允许在运行时通过脚本动态切换渲染管线。例如,可以在加载新场景时更改当前使用的 SRP 资产: ```csharp // 假设 urpAsset 是预先定义好的 URPAsset 资源 GraphicsSettings.defaultRenderPipeline = urpAsset; ``` 此外,还可以监听 `activeRenderPipelineTypeChanged` 事件,以便在管线类型发生变化时执行特定逻辑[^2]。 ### 注意事项 - **编辑器与运行时一致性**:在 Unity 编辑器中切换渲染管线后,建议重启编辑器以确保 Scene 视图和材质预览正确更新。 - **运行时切换风险**:运行时切换管线可能导致当前帧渲染异常,因此建议在场景加载阶段完成此类操作。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值