UGUI batch 规则和性能优化

(基础) 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次数。

4.因为UI部分涉及的图片比较多,如果打一个图集在提交到GPU的时候会占用很大的内存,所以一般UI图集都会根据一定的规则进行,texture atlasing。

5.所以一般我们看到的UGUI优化方案,都是基于这些点来说的。这些知识点明白了,才知道为什么要做texture atlasing,为什么要分层,什么时候要合并等等。

UGUI排序规则

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

我们要做的事

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的规则。

UGUI batch 规则和性能优化的更多相关文章

  1. 网站性能工具-YSlow的23个规则-网站性能优化

    1. 减少HTTP请求次数 合并图片.CSS.JS,改进首次访问用户等待时间. 2. 使用CDN 就近缓存==>智能路由==>负载均衡==>WSA全站动态加速 3. 避免空的src和 ...

  2. UGUI性能优化

    http://www.cnblogs.com/suoluo/p/5417152.html http://blog.csdn.net/uwa4d/article/details/54344423 htt ...

  3. [好文翻译]WEB前端性能优化的14条规则

    作为一个半前端工程师,而且只会写点HTML5和CSS3的“假”前端工程师,为了能更好地理解一下前端的花花世界,最近拜读了<高性能网站建设指南>一书,对作者提出的前端性能优化的14个规则获益 ...

  4. Yahoo网站性能优化的34条规则

    摘自:http://blog.chinaunix.net/uid/20714478/cid-74195-list-1.html Yahoo网站性能优化的34条规则 1.尽量减少HTTP请求次数 终端用 ...

  5. Yahoo关于性能优化的N条规则

    本来这是个老生常谈的问题,上周自成又分享了一些性能优化的建议,我这里再做一个全面的Tips整理,谨作为查阅型的文档,不妥之处,还请指正: 一. Yahoo的规则条例: 谨记:80%-90%的终端响应时 ...

  6. Unity GUI(uGUI)使用心得与性能总结

    Unity GUI(uGUI)使用心得与性能总结 作者 kingshijie 关注 2015.09.26 15:35 字数 3686 阅读 28031评论 10喜欢 49 背景和目的 小哈接触Unit ...

  7. U3D开发性能优化笔记(待增加版本.x)

    http://blog.csdn.net/kaitiren/article/details/45071997 此总结由自己经验及网上收集整理优化内容 包括: .代码方面: .函数使用方面: .ui注意 ...

  8. Unity 性能优化(力荐)

    开始之前先分享几款性能优化的插件: 1.SimpleLOD : 除了同样拥有Mesh Baker所具有的Mesh合并.Atlas烘焙等功能,它还能提供Mesh的简化,并对动态蒙皮网格进行了很好的支持. ...

  9. 数据库访问性能优化 Oracle

    特别说明: 1.  本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2.  本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也 ...

随机推荐

  1. KVO & 通知 小记

    KVO的全称是Key-Value Observing,它实现了一种机制,对所关心的属性对象添加观察者,当属性值发生变化时会得到通知,我们可以对变化做相应的处理.看过设计模式的同学应该知道,这是一种典型 ...

  2. A标签中通过href和onclick传递的this对象

    在blog的后台管理中允许为一个分类添加一个地址,但是不好添加onclick事件.想传递当前对象给一个函数,于是就将这个URL写成"Javascript:shoControlSidebar( ...

  3. 高并发数据库之MySql性能优化

    1.慢查询 SHOW VARIABLES LIKE '%quer%'

  4. Amoeba详细介绍

    Amoeba的中文意思是变型虫 Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy.它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库 ...

  5. python之路: 基础篇

    )或>>> name = )    #按照占位符的顺序):]        #下标识从0开始的 wulaoer >>> print name[:]        # ...

  6. openstack controller ha测试环境搭建记录(十三)——配置cinder(控制节点)

    在任一控制节点创建用户:mysql -u root -pCREATE DATABASE cinder;GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'loc ...

  7. Sping--自动装配(byname, bytype)

    UserDAOImpl.java: package com.bjsxt.dao.impl; import com.bjsxt.dao.UserDAO; import com.bjsxt.model.U ...

  8. OPENCV图像变换-1

    图像变换是指将一幅图像变换为图像数据的另一种表现形式,例如将图像进行傅立叶变换,或者对图像进行X,Y方向的求导等,经过这些变换,可以将图像数据处理中的某些问题换一个别的角度想办法,所以图像变换是图像处 ...

  9. Codeforces#360Div2

    A题 题意:给定d个操作,每个操作当中只包含1和0,若存在0,则表示操作者获胜,求最大的连续获胜个数 分析:直接统计之后用一个数组纪录下来即可 #include <iostream> #i ...

  10. 16、手把手教你Extjs5(十六)Grid金额字段单位MVVM方式的选择

    这一节来完成Grid中的金额字段的金额单位的转换.转换旰使用MVVM特性,总体上和控制菜单的几种模式类似.首先在目录app/view/main/menu下建立文件Monetary.js,用于放金额单位 ...