unity srpbatch原理(转)

转自:Unity SRP Batcher的工作原理 - 知乎 (zhihu.com)

个人理解:srpbatch不是减少drawcall的次数,而是减少了一次drawcall的耗时,具体参考:

 

 

原理:在gpu内存存储material数据,这样drawcall的时候只需要传参数过来而不用进行一堆material的设置。为了达到这样的效果,你可以使用尽量多的同一个shader,但不同的材质,但是尽量少的shader变体。

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

SRP Batcher 兼容性

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

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

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

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

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

Unity 性能优化 之 非常酷的SRP Batcher! - 知乎 (zhihu.com)

 

动态合批:在绘制前将可以合批(相同材质....)的对象的顶点信息转换到同一坐标系(世界)下,传递给gpu,让gpu认为这些对象是一个对象,一次绘制出来。

静态合批:将静态物体(除root节点不可移动)合并网格,可能会影响包体的大小,与动态批处理相比省去了在运行时cpu的一系列转换操作,但增大了内存占用(如果多个物体在静态批处理之前共享了相同的几何体,则会为每个物体创建几何体的副本)。

 

posted @ 2022-07-14 14:33  mc宇少  阅读(1228)  评论(0)    收藏  举报