UGUI batch 规则和性能优化

UGUI batch 规则和性能优化html


(基础) Unity 绘图性能优化 - Draw Call Batching : http://docs.unity3d.com/Manual/DrawCallBatching.html

性能优化

1.名词性能

  1)Batch 单词 google 翻译的解释是:批量、批次。
  2)Stats中的Batches参数:意思是batching后产生的批次数。(其实每个批次就会调用一次DrawCall)
  3)Unity官方文档中的batching是指batch操做和batching技术的称呼。(这里的batching是指“将符合条件的mesh经过CPU变换到统一的世界坐标中”这个操做,也就是合并mesh为一个批次的意思)字体

2.UGUI 中全部显示物体的网格都是本身填充的,例如Image,UGUI会自动生成四个顶点,和表明两个三角形的顶点索引。全部显示物体若是不设置它的material都会使用同一个默认材质(shader:“UI/Default”,color:RGBA(1,1,1,1),pass count:1,render queue:3000)优化

3.因此,根据官方文档DrawCallBatching可知,UGUI很是符合DynamicBatching。可是有一点是不符合的那就是UI的图片,因此咱们能够把图片打成一张大图集来达到DynamicBatching的效果。这样就能减小batching后的batches个数,也就减小了DrawCall次数。google

4.由于UI部分涉及的图片比较多,若是打一个图集在提交到GPU的时候会占用很大的内存,因此通常UI图集都会根据必定的规则进行,texture atlasing。spa

5.因此通常咱们看到的UGUI优化方案,都是基于这些点来讲的。这些知识点明白了,才知道为何要作texture atlasing,为何要分层,何时要合并等等。翻译

 

UGUI排序规则3d

1.相邻的层级若是它们的texture在一个atlas中,就会被batching到一块儿。
2.在同一个层级区间而且没有交叉区域的物体(遮挡会按组件的transform的矩形区域计算),若是texture在一个atlas中,就会被batching到一块儿。orm

 

咱们要作的事

1.对于atlas总来的来讲就是让同一时刻,UI中平均包含的atlas尽量少。
常常用的图片要打成一个atlas。
2.其余atlas按功能划分。好比,背包界面,除了公用图集中出现的元素之外,全部出现的图片都打成一个atlas。
3.可重用的组件尽可能在前期就都考虑到,由于到后期可能会产生混乱,同一个按钮在A界面出现也在B界面出现。(固然除了为了减小draw call这么作之外)
4.若是在某种状况下对顶点数限制不高,能够考虑将图片作成对称的,而后用原图的一半拼出想要的效果

5.对于drawcall来讲,咱们UI中有N层,N越大越靠前,会遮住后面的组件。咱们从0到N数,而后看每一个组件的材质,咱们要尽可能让这个材质变化的次数减小。
6.相同图集的组件在不影响最终效果的状况下尽可能使得相同图集的组件相邻。
7.相同字体的文本控件在不影响最终效果的状况下劲量使得相同字体的组件相邻。
8.对于不一样的图集尽可能不要去穿插,字体也是同样(纵向交叉,Herichy中的顺序)。
9.若是UI元素能够没有交叉区域尽可能不交叉,特别是文字。(横向交叉,矩形区域的交叉)
10.若是可能的话能够把层叠交叉的文字作到图片中

11.若是不用mask能够实现的功能尽可能不用。Mask组件用到了透明,因此他会被绘制两次。因此,带mask的组件不适用dynamic batching的规则。

相关文章
相关标签/搜索