抓手

根据我的理解总结,SRP Batcher就是

1、把调用draw call前,一大堆CPU的设置工作给一口气处理了,增加了效率。

2、把材质的属性数据直接永久放入到显卡的CBUFFER里,那只要数据不变,CPU就可以

不需要把这些数据重新做设置工作。节省了CPU调用,增加了效率。

3、用专用的代码将引擎的属性(比如objects transform)直接放入到GPU显存,这个专用的代码是不是更快更强呢,

官方是这样么说的,用的词语是quickly,就是快。

4、SRP Batcher并没有减少drawcalls,而仅仅是提高了效率。相当于一个人减肥了,减去了多余的脂肪和水分,但是器官结构啥的一个没少。总之就是有用。

具体的解释

SRP Batcher定义:

SRP Batcher是一个渲染循环(loop),可在有很多使用相同的shader Variant的材质 的场景中,加速你的CPU渲染。

注意它的定义,也就是用的同一个shader,但是不同的材质,也能加速。

如果想使用SRP Batcher,必须符合以下任意一个管线:

1、URP管线(The Universal Render Pipeline)

2、HDRP管线(The High Definition Render Pipeline)

3、一个自定义的SRP(也就是自己写的SRP,手打牛肉丸)。

SRP Batcher的工作原理

SRP Batcher诞生的原因:

在一个Drawcall被一个新的material使用的时候,有很多工作要做。

所以如果场景有越多的materials,就会有越多的CPU必须使用去设置GPU 数据。

传统的方法是减少DrawCalls的数量去优化CPU渲染性能。

因为Unity必须在调用drawcall前设置很多东西。

并且真正的CPU消耗来自那些设置工作,而不是GPU drawcall本身。

Drawcall只是一些Unity向GPU command buffer发送的bytes。

SRP Batcher 通过批处理(batching)一系列绑定(Bind)和绘制(Draw)GPU 命令,来减少DrawCalls之间的GPU 设置(工作量)。也就是之前一堆绑定和绘制的GPU命令,老子一口气给它处理完。不需要一步步设置。

上面的图是我翻译的,可能有些不好理解,但是左右图比较看看的话,右图的工作量确实大大减少了,

毕竟从6个设置步骤减少成了2个。

为了让你的渲染达到最大的性能,这些批处理必须尽可能大。

为了达到这样的效果,你可以使用尽量多的同一个shader,但不同的材质,但是尽量少的shader变体。

SRP Batcher 是一个低级渲染循环,它使得Material 数据长久在GPU内存里。

如果Material内容不变,SRP Batcher就不需要设置并上传buffer到GPU里。

相反( 如果Material内容有变),SRP Batcher 使用专用的代码路径去快速更新Unity Engine属性到一个大型的GPU bufer里。如下:

上图,CPU仅仅处理Unity Engine 属性,

所有Materials 有长久的CBUFFERs在GPU 显存里,并准备去使用了。

这会加速渲染,因为所有的Material 内容现在长久在GPU显存里。

专用的代码管理大型的每个object GPU CBUFFER,给所有的objecct 属性。

SRP Batcher 兼容性

用SRP Batcher去渲染一个物体的条件如下:

1、渲染的物体必须是一个mesh或者skinned mesh。不能是粒子。

2、Shader代码必须兼容SRP Batcher。

3、该材质不能在运行中被代码修改MaterialPropertyBlock,否则也无法compatible SRP Batcher。(12月24号更新)

兼容SRP Batcher的Shader的条件如下:

1、必须声明所有内建引擎properties 在一个名为"UnityPerDraw"的CBUFFER里。

例如:URP内置的UnityInput.hlsl里。也就是说,如果你的代码有引用或间接引用UnityInput.hlsl,那就不用做这一步了。

2、必须声明所有材质properties在一个名为"UnityPerMaterial"的CBUFFER里。

这个我上一篇文章有具体的实现步骤,这个是传送门:

https://blog.csdn.net/zakerhero/article/details/107690964

在C#代码中,可以用以下代码在游戏运行时打开SRP Batcher.

GraphicsSettings.useScriptableRenderPipelineBatching = true;

支持的手机平台:

IOS Metal

OpenGL ES 3.1以上

Vulkan

以上,希望本文能给正在使用URP和HDRP的人提供一些帮助。

本文参考文章:

https://docs.unity3d.com/Manual/SRPBatcher.html

Unity SRP Batcher的工作原理相关推荐

  1. unity SRP Batcher与GPU instancing使用情况

    SRP Batcher更合适大量不同的物体, 比如材质上用了不同的贴图.参数.等等,只要shader变种不变,即使不同材质也能合并: GPU instancing 必须同材质同参数,只是可以自定义ma ...

  2. Unity SRP Batcher 合批 BUG?- SRP: Node use different shader keyword

    文章目录 环境 问题 论坛发现同问 发问者解答 环境 Unity : 2019.4.30f1 URP : 7.7.1 问题 合批失败的原因显示:SRP: Node use different shad ...

  3. SRP Batcher:提升您的渲染性能

    简介 在2018年,Unity引入了一种高可定制的渲染技术,称之为Scriptable Render Pipeline(SRP). 其中一部分是一个名为SRP Batcher的新底层渲染路径,它可以在 ...

  4. SRP Batcher 原理及应用

    SRP Batcher 概述 SRP Batcher 是 Unity 在 2018 年随着 SRP 的发布而推出的一种新的批处理方式.启用 SRP Batcher 并不会减少 Draw Call,而会 ...

  5. Unity URP shader 出现 SRP Batcher 为 not compatible时 渲染性能会下降 应该怎么处理 ?

    以下是Unity官网对SPR Batcher 加速渲染的介绍 https://blog.unity.com/technology/srp-batcher-speed-up-your-rendering ...

  6. Unity SRP自定义渲染管线学习2.2: 合批(Batching) SRP Batcher

    接下来我们要来学习下自定义渲染管线中的合批,这一节主要学习SRP Batcher 每一次的Draw Call都需要CPU和GPU之间的通信,如果有大量的数据需要从CPU发送到GPU中,那GPU就可能因 ...

  7. Unity游戏通用mod框架BepInEx生态的工作原理简介

    背景   几个月前, 游戏雨中冒险2 (Risk of Rain2)出了新的DLC, 工作之余跟伙伴联机受受苦还是惬意的.RoR2 这个游戏在设计上的一些机制(比如没有小地图)使得本来操作就不精湛的我 ...

  8. 每天执行一次批处理_关于静态批处理/动态批处理/GPU Instancing /SRP Batcher的详细剖析...

    静态批处理[1] 定义 标明为 Static 的静态物件,如果在使用相同材质球的条件下,在Build(项目打包)的时候Unity会自动地提取这些共享材质的静态模型的Vertex buffer和Inde ...

  9. Unity SRP系列——DrawCalls

    实例原文 Unity通用渲染管线(URP)系列(二)--Draw Calls(Shaders&Batches) - 知乎 (zhihu.com) Draw Calls (catlikecodi ...

最新文章

  1. kali扫描内网ip_来,我们聊聊内网渗透!
  2. python自动化办公都能做什么菜-python接口自动化
  3. Codeforces Round#310 div2
  4. 基于数据库的分布式锁实现
  5. SAP CRM呼叫中心toolbar的cancel按钮会导致session清理
  6. Matlab中的类(Class),Matlab中的class用法
  7. Java编程思想—第三四五六七章
  8. 23岁女子搬家途中跳车身亡!货拉拉官方回应......
  9. 【oracle】changePerm.sh
  10. Helm 3 完整教程(十):Helm 函数讲解(4)加密函数、编码和解码函数
  11. jqueryui时间插件_jQueryUI工具提示插件
  12. 2019美联社写作指南为区块链相关术语提供指导
  13. Fisher精确检验的通俗理解
  14. 高仿QQ创建搜索框以及拼音检索好友
  15. 国际贸易术语解释通则(DEQ 目的港码头交货(……指定目的港))
  16. 移动电源有哪些产品?热门的移动电源推荐
  17. 红黑树的深入分析和实现
  18. Win10设置局域网共享打印机,动态切换默认打印机总结
  19. [BJDCTF 2nd]燕言燕语-y1ng解析
  20. 零和博弈、正和博弈和负和博弈

热门文章

  1. Deepin 深度系统更新(2021.02.03)发布
  2. css 图片紧贴页面底部,CSS StickyFooter——当内容不足一屏时footer紧贴底部
  3. VUE跳转外部链接和网页的方法
  4. pycharm切换python环境_Pycharm 的 python 运行环境切换
  5. 阿联酋外汇业务的监管宽松?一篇看懂如何在阿联酋做外汇交易!
  6. mac如何清理缓存的垃圾?误删mac缓存怎么恢复
  7. php实现语音留言,手机留言怎么设置(手把手教你实现手机语音留言)
  8. 愿逝者安息,生者坚强 !!!- 民间捐助的最佳实践及捐助建议
  9. SQL Server Express LocalDB 问题两例实例已损坏、错误代码: 575解决方法
  10. AI做题家卷疯了!高数考试正确率81%,竞赛题成绩超过计算机博士