【关于存在多个UIMask合批的问题】

关于存在多个UIMask合批的问题

原因

最近因为某个需求需要在UI上同时使用大约25个Mask组件,这些Mask对象以及被Mask的对象都是一样的

实验过程

因为担心过多的Mask会增加不少的渲染负担,特意测试了下怎么处理可以稍微减少dc的调用。理论上如果不能进行合批的话,对于每个Mask对象,开启模板一个dc,渲染被Mask对象一个dc,关闭模板一个dc,那么总共需要25* 3个dc。所做的测试也很简单,因为在UI上都是同一个材质,第一次测试是把所有的对象(测试用例4个)都堆叠在一起,打开FrameDebug看了下是使用了12个dc,和预期一样。测试对象都是Mask是100* 100的Image,被Mask的对象是200*200.测试用图:
在这里插入图片描述场景
在这里插入图片描述FaemeDebug
可以看到每个对象都没有进行合批,所以消耗了12个dc.

然后我们将4个对象分别移开位置,让他们没有彼此交叉(有三种情况,一种是mask对象不交叉,一种是包括子节点都不交叉,还有一种mask和另一个对象的被Mask的对象不交叉)

首先是只是mask对象没有交叉,结果如图:
在这里插入图片描述结果仍然是消耗了12个dc

然后让他们的mask对象与其他对象的被Mask对象不交叉,结果:

在这里插入图片描述
可以看到,这时只用了3个dc就把4个对象绘制结束,而且从FrameDebug看到第一个dc就是用来开启模板缓冲,第二个dc就是绘制4个被mask的对象,最后一个dc就是关闭模块缓冲

最后让4个对象完全不交叉,我没有特意去做了,显然结果会跟上述结果一样,只需3个dc就可以绘制完。

结论

因此如果需要使用多个这样的Mask对象时,尽量避免当前对象的Mask对象与其他对象的被Mask的对象有交叉。

扩展

关于UGUI的对象交叉时,这时候关于合批的处理是怎样的,需要了解一下。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值