文章目录
- 前言
- 一、SRP Batcher是什么
- 二、SRP Batcher的使用条件
- 1、可编程渲染管线
- 2、我们用URP作为例子
- 3、URP 设置中 Use SRP Batcher开启
- 4、使 SRP Batcher 代码路径能够渲染对象
- 5、使着色器与 SRP Batcher 兼容:
- 三、不同合批之间的区别
- BuildIn Render Pipeline下:
- Universal Render Pipeline下:
- 四、对比 BRP 和 SRP 每一批次渲染间的区别
- 1、BRP下
- 2、SRP下(CPU部分就是SRP的核心)
- 在这里插入图片描述
- 五、在Unity中,测试一下开启 和 不开启 SRP Batcher的效果
- 1、不开启 SRP Batcher(需要关闭HDR)
- 2、开启SRP Batcher
前言
在上一篇文章中,我们知道了使用了常量寄存器CBUFFER才可以被允许SRP Betcher。
- Unity中 URP Shader 常量缓冲区CBUFFER
我们在这篇文章中,了解一下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下:
- Static Batching(静态合批)
- Unity中Batching优化的静态合批
通常用在场景烘培中使用。
需要满足:同一个材质球、可以使用不同的网格、必须勾选静态合批
- Dynamic Batching(动态合批)
- Unity中Batching优化的动态合批
需要满足:同一个材质球、可以使用不同的网格、有225个顶点的单个模型顶点数限制
- GPU Instancing(GPU实例化)
- Unity中Batching优化的GPU实例化整理总结
需要满足:必须要有相同的网格、可以使用不同的材质球属性、必须为同一个Shader
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)
4个对象用了4个批次
2、开启SRP Batcher
只用了一个批次