Unity中URP Shader 的 SRP Batcher


前言

在上一篇文章中,我们知道了使用了常量寄存器CBUFFER才可以被允许SRP Betcher。

我们在这篇文章中,了解一下SRP Batcher是什么。


一、SRP Batcher是什么

  • SRP Batcher 是一个渲染循环,可通过许多使用同一着色器变体的材质来加快场景中的 CPU 渲染速度。

  • Unity帮助文档


二、SRP Batcher的使用条件

1、可编程渲染管线

  • URP
  • HDRP
  • 自定义 SRP

2、我们用URP作为例子

  • 保证项目使用了URP
    在这里插入图片描述

3、URP 设置中 Use SRP Batcher开启

  • 打开Inspect面板的Debug模式
    在这里插入图片描述
  • 确保 Use SRP Batcher 开启
    在这里插入图片描述

4、使 SRP Batcher 代码路径能够渲染对象

  • 渲染的对象必须是网格或蒙皮网格。该对象不能是粒子。
  • 着色器必须与 SRP Batcher 兼容。HDRP 和 URP 中的所有光照和无光照着色器均符合此要求(这些着色器的“粒子”版本除外)。
  • 渲染对象不得使用 MaterialPropertyBlocks。

5、使着色器与 SRP Batcher 兼容:

  • 必须在一个名为“UnityPerDraw”的 CBUFFER 中声明所有内置引擎属性。例如:unity_ObjectToWorld 或 unity_SHAr。
  • 必须在一个名为 UnityPerMaterial 的 CBUFFER 中声明所有材质属性。即上篇文章的常量缓冲区

CBUFFER_START(UnityPerMaterial)
half4 _Color;
CBUFFER_END

在这里插入图片描述


三、不同合批之间的区别

BuildIn Render Pipeline下:

  1. Static Batching(静态合批)
  1. Dynamic Batching(动态合批)
  1. GPU Instancing(GPU实例化)

Universal Render Pipeline下:

SRP Batcher(SRP合批)
需要满足:上面所说的 SRP Batcher 的使用条件


四、对比 BRP 和 SRP 每一批次渲染间的区别

1、BRP下

在这里插入图片描述

2、SRP下(CPU部分就是SRP的核心)

在这里插入图片描述

五、在Unity中,测试一下开启 和 不开启 SRP Batcher的效果

  • 在Unity中,准备这样一个场景用于测试,4个物体使用了同一Shader的不同材质球
    在这里插入图片描述

1、不开启 SRP Batcher(需要关闭HDR)

在这里插入图片描述

扫描二维码关注公众号,回复: 17152761 查看本文章

在这里插入图片描述
4个对象用了4个批次

2、开启SRP Batcher

在这里插入图片描述
只用了一个批次

猜你喜欢

转载自blog.csdn.net/qq_51603875/article/details/135021128