UGUI性能优化学习笔记(二)合批

本文详细解析Unity中UI合批的工作原理及其优化方法,包括如何通过调整UI元素属性来减少DrawCall,以及Mask与RectMask2D组件对合批的影响。

一、合批规则

合批:把渲染时使用相同材质、相同贴图的网格合并在一起,成为一个大网格,然后再调用一次Draw Call,直接渲染这一个大网格。这样做可以降低Draw Call的数量,以优化性能。

Unity是如何确定哪些网格可以进行合批的呢?

  • 首先,合批是以Canvas为单位进行的。也就是说在不同Canvas下的UI元素是无法合批的。
  • 接下来需要计算Canvas下所有UI元素的深度值。深度值计算规则如下:
    • 如果当前UI元素不进行渲染,则Depth = -1
    • 如果当前UI元素没有其他UI元素与其相交,则Depth = 0
    • 如果当前UI元素与其他UI元素相交,则判断它们能否进行合批(Material ID、Texture ID是否相等),如果满足合批的条件,则它们的Depth相同;如果不满足合批条件,则取下方UI的最大深度值,并在其基础上+1。
  • 计算完深度值后,按照「深度值->Material ID->Texture ID->Renderer Order(Hierarchy面板上的顺序)」对UI元素进行排序,剔除深度值为-1的元素,形成一个队列。
  • 根据得到的队列,判断相邻元素之间的材质和贴图是否相同,只要相同就可以进行合批。注意这里不会对深度值进行判断,即使相邻元素深度值不同,只要满足上述条件也可以进行合批。

下面我们通过一个具体的示例加深理解

在上图中,白色Image位于所有UI元素的最底层,所以Depth = 0。接下来的文本位于白色Image的上层,所以Depth = 1。这里需要注意,UI元素进行深度判断是通过网格进行的,而不是通过rect。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值