UGUI batch 规则和性能优化

时间:2021-07-28 04:12:46

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&lpar;uGUI&rpar;使用心得与性能总结

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

  7. U3D开发性能优化笔记&lpar;待增加版本&period;x&rpar;

    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. 单点登录SSO

    转载自 http://www.blogjava.net/xcp/archive/2010/04/13/318125.html   摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当 ...

  2. 【Android】如何将eclipse工程导入studio

    1.eclipse工程右键->export->Generate Gradle build files 2.studio->New->import project->选择工 ...

  3. python的基础类源码解析——collection类

    1.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能 ################################### ...

  4. TFS 强制撤销别人签出的代码

    有个同事离职一段时间了,今天改一下她的代码,发现有个文件签出了,晕,而且TFS用的也是只允许单用户签出. 1,找原来的用的机器,已经被人占用了,系统已经重做. 2,只有用命令行来搞了. 大致如下: t ...

  5. dorado中的creationType选择类型

    新建model层中 DataType类型的时候,有几个属性creationType,matchType时候需要在右侧选择对应的javaBean,这是时候要在弹出的对话框搜索. 此时,只要搜索javaB ...

  6. html5 拖放---(二)转

    draggable是一个枚举属性,用于指定一个标签是否可以被拖拽.有以下四种取值: true 表示此元素可拖拽 false 表示此元素不可拖拽 auto 除img和带href的标签a标签表示可拖拽外, ...

  7. asp&period;net core 3&period;0 gRPC框架小试

    什么是gRPC gRPC是google开源的一个高性能.跨语言的RPC框架,基于HTTP2协议,采用ProtoBuf 定义的IDL. gRPC 的主要优点是: 现代高性能轻量级 RPC 框架. 协定优 ...

  8. C&num;后台接java接口传输字节数组(byte&lbrack;&rsqb;)

    事情是这样的C#t代码之前接的WCF接口,后来那边统一改为java的接口,我是用的HttpClient从后台发请求调用的java接口,其他接口都很顺利,是的....知道遇到一个需要传byte[]类型数 ...

  9. C&plus;&plus;&lowbar;调用约束

    1.要求 声明定义处调用约定必须相同 int __stdcall add(int a, int b); int __stdcall add(int a, int b) {  return a + b; ...

  10. Python 全栈开发七 面向对象

    一.编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式 ...