zoukankan      html  css  js  c++  java
  • UGUI 之 Mask 和 RectMask2D 与 drawcall

    转(https://blog.csdn.net/akak2010110/article/details/80964416

    虽然 Mask 的名声不是很好,但是在做界面的时候很多时候都需要它,比如滚动列表。要想精算出一个UI的drawcall数和渲染顺序,光掌握上一篇的知识或许还有些吃力,因为mask在项目里真的太常见了。也往往是UI的drawcall数的一个重灾区。本文不说Mask和RectMask2D是如何实现的,仅仅设立一些案例来总结出两者的性质,希望能给我们做UI时一些实用的指导性作用。也希望看完了本文之后,能了解这两者的区别。
    希望看到这篇文章的朋友确定已经掌握了上一篇的知识。

    一、RectMask2D
    RectMask2D不需要依赖一个Image组件,其裁剪区域就是它的RectTransform的rect大小。

    性质1:RectMask2D节点下的所有孩子都不能与外界UI节点合批且多个RectMask2D之间不能合批。
    性质2:计算depth的时候,所有的RectMask2D都按一般UI节点看待,只是它没有CanvasRenderer组件,不能看做任何UI控件的bottomUI。
    二、Mask
    Mask组件需要依赖一个Image组件,裁剪区域就是Image的大小。

    性质1:Mask会在首尾(首=Mask节点,尾=Mask节点下的孩子遍历完后)多出两个drawcall,多个Mask间如果符合合批条件这两个drawcall可以对应合批(mask1 的首 和 mask2 的首合;mask1 的尾 和 mask2 的尾合。首尾不能合)
    性质2:计算depth的时候,当遍历到一个Mask的首,把它当做一个不可合批的UI节点看待,但注意可以作为其孩子UI节点的bottomUI。
    性质3:Mask内的UI节点和非Mask外的UI节点不能合批,但多个Mask内的UI节点间如果符合合批条件,可以合批。
    从Mask的性质3可以看出,并不是Mask越多越不好,因为Mask间是可以合批的。得出以下结论:
    当一个界面只有一个mask,那么,RectMask2D 优于 Mask
    当有两个mask,那么,两者差不多。
    当 大于两个mask,那么,Mask 优于 RectMask2D。

    三、drawcall数和渲染顺序
    利用本文的性质,再利用上一篇的知识,就可以精算出一个带有mask的UI的drawcall数和渲染顺序。多利用 Frame Debugger 窗口多多练习,熟能生巧!!
    ---------------------
    作者:Black-Coder
    来源:CSDN
    原文:https://blog.csdn.net/akak2010110/article/details/80964416
    版权声明:本文为博主原创文章,转载请附上博文链接!



  • 相关阅读:
    DbHelper数据操作类
    获取cpu序列号,硬盘ID,网卡MAC地址
    用户必备资料 103个Windows XP运行命令
    在Web.config配置文件中自定义配置节点
    Microsoft.NET PetShop4架构与技术分析
    数字转英文(货币)大写(vb)
    如何计算dba_tables中的avg_row_len.
    行选移与行链接的介绍
    如何使用动态SQL
    如何导致全表扫描原因
  • 原文地址:https://www.cnblogs.com/cyct/p/11288585.html
Copyright © 2011-2022 走看看