我们看一下SRP Batcher对项目有什么具体的影响?

SRP Batcher 在 Unity 的通用渲染管线(URP)中引入了一种新的合批机制,显著提升了渲染性能,尤其是在复杂场景和动态物体的处理上。以下是 SRP Batcher 对项目的具体影响:

1. 降低 SetPassCall 的开销

在传统的内置管线中,DrawCall 的开销主要来自 SetPassCall。SRP Batcher 的核心原理是通过减少 SetPassCall 的数量来提升性能,而不是单纯地减少 DrawCall 的数量。这种方法的优势在于:

  • 减少状态切换:SRP Batcher 通过将渲染所需的参数变量拆分成多个 Constant Buffer,减少了每次渲染时需要进行的状态切换。这意味着在渲染同一类型的物体时,能够更高效地使用 GPU 资源。

  • 优化参数传递:在 SRP Batcher 中,只有模型和材质参数需要变化,而 Shader 程序和渲染状态保持不变。这使得每次 DrawCall 只需传递少量参数,从而降低了 CPU 和 GPU 之间的通信开销。

2. 提高动态物体的合批效率

传统的合批方式(如动态合批、静态合批和 GPU Instancing)在处理动态物体时存在局限性。SRP Batcher 解决了这些问题:

  • 动态物体支持:SRP Batcher 对动态物体的支持更为友好,能够有效地合批动态物体,提升渲染性能。这对于次世代游戏尤为重要,因为这些游戏通常包含大量动态元素。

  • 复杂场景的处理:在复杂场景中,SRP Batcher 能够更好地管理和优化 DrawCall,确保即使在高三角面数和高 DrawCall 的情况下,性能依然保持良好。

3. 性能测试结果

通过实际测试,SRP Batcher 在不同配置的设备上都表现出显著的性能提升。例如,在一个包含三栈动态光源的测试场景中:

  • 高配机型:40W 三角面和 500 DrawCall 的场景在开启 SRP Batcher 后,性能得到了明显提升。
  • 中配机型:32W 三角面和 400 DrawCall 的场景同样受益于 SRP Batcher。
  • 低配机型:25W 三角面和 280 DrawCall 的场景在开启 SRP Batcher 后,能够流畅运行,这在内置管线中通常需要高配设备才能实现。

4. 可视化对比

通过 RenderDoc 的对比图可以清晰地看到 SRP Batcher 的优势:

  • 开启 SRP Batcher:渲染流程简洁,绑定贴图、传递顶点指针和更新 Constant Buffer 的步骤明显减少,整体流程更高效。
  • 未开启 SRP Batcher:渲染流程复杂,涉及大量的设置和状态更改,导致性能开销显著增加。

总结

SRP Batcher 在 Unity 的 URP 中带来了显著的性能提升,尤其是在处理动态物体和复杂场景时。通过减少 SetPassCall 的开销、优化参数传递和支持动态合批,SRP Batcher 使得次世代游戏的开发变得更加高效,能够在各种设备上实现更好的性能表现。这使得开发者能够更专注于游戏的创意和内容,而不必过于担心性能瓶颈的问题。