关于UGUI的合批的一些要注意的地方(Batch和drawcall)

关于UGUI的合批的一些要注意的地方(Batch和drawcall)

关于我们UGUI的DrawCall合批,我们先定义几个自己认知的概念先讲一下

第一个叫叠加
就是当GPU在绘画的时候 在一块区域 有多个一样或者不一样的控件 如下图的text和图片,图片和图片 凡是物理上的叠加 那么我们就称呼这个为叠加
我们可以通过Scene窗口调为overdraw就能看到UI的叠加情况
关于UGUI的合批的一些要注意的地方(Batch和drawcall)

第二个叫物理层级
物理层级就是指的我们的子节点父节点、order、等

第二个概念叫层级
这个层级和我们UGUI里面的物理层级layer/order的概念不一样,这里所说的层级指的是GPU在绘画界面的时候 会从最底下画起一层一层的把我们的UI画出来 如下图所示
关于UGUI的合批的一些要注意的地方(Batch和drawcall)
上图中第一批画的就是图片 第二批画的就是text 那么这里我们把text称呼为第二层
关于UGUI的合批的一些要注意的地方(Batch和drawcall)
这边第一层就画了图片和text两个 第二层就只画了两个text 所以这边第二层就只有两个text 其余的图片和text则是第一层。
关于UGUI的合批的一些要注意的地方(Batch和drawcall)
了解概念以后我们大概讲一下UGUI的合批
1、 如果两个控件的材质、贴图完全一致 则无论你怎么排列 不管你如何叠加 那么UGUI一定会自动帮你把当前的batch合批为一个
2、 如果在同一层 所有的控件材质、贴图完全一致 在第二层中的<“物理层级”最小>的材质贴图如果和上一层的材质贴图完全一致的时候 这个时候是可以合批处理的 并合批完这一层 直到被一个材质或者贴图不一致的控件所打断时才会出现新的合批
3、 如果在同一层出现不一致的 则按照材质或者贴图的数量去计算合批 并且依然遵循当前层<“物理层级”最大>和下一层的<“物理层级”最小>的控件去判断是否可以继续合批

欢迎批评 欢迎补充


更新一波19.02.22
关于粒子特效的合批渲染
粒子比较特殊 与UI有区别
粒子无论当前是何种方式存在 无论是否叠加 是否分层 只要材质一样 那么必然会被动态合批
但是若粒子当前为disable状态则不产生drawcall / able则必产生draw call
总结 粒子的drawcall只和材质相关

欢迎批评 欢迎补充