NGUI 降低drawcall
前置说明一:
Unity中的drawcall定义:
每次引擎准备数据并通知GPU的过程称为一次Draw Call。
Unity(或者说基本全部图形引擎)生成一帧画面的处理过程大致能够这样简化描写叙述:引擎首先经过简单的可见性測试。确定摄像机能够看到的物体,然后把这些物体的顶点(包含本地位置、法线、UV等),(顶点怎样组成三角形),变换(就是物体的位置、旋转、缩放、以及摄像机位置等)。相关光源,纹理,渲染方式(由材质/Shader决定)等数据准备好,然后通知图形API——或者就简单地看作是通知GPU——開始绘制,GPU基于这些数据,经过一系列运算,在屏幕上画出成千上万的三角形。终于构成一幅图像。
前置说明二:
NGUI中的UIWidget的显示顺序:
每个UIWidget的显示顺序由depth值决定。跟z轴没关系,而这个depth值是由两部分组成的,一个是UIWidget所在的UIPanel的depth和UIwidget自身的depth值进行加权计算。
而且。UIPanel的权重很大。能够觉得,UIPanel的depth大的全部UIWidget比UIPanel的depth小的全部UIWidget比最后计算的depth一定大。举个样例:
UIPanel1 depth x UIPanel2 depth y
UIWidget1 depth m UIWidget2 depth n
仅仅要 x > y,那么无论m和n的大小,UIWidget1最后的depth一定大于UIWidget2。
降低drawcall的规则:
1、同一个UIPanel下的texture和font尽量放在同一个altals下。
也表达了另外一个意思。使用同一个altals的元素尽量放在同一个UIPanel以下。
2、假设一个UIPanel以下使用了多个altals,那么尽量让使用同样altals的元素连续,尽量避免altals交叉。
规则1的前半部分好理解。后半部分,參照前面显示顺序问题能够知道。
假设使用同一个altals的元素在两个不同的UIPanel以下,这就必定导致它们的drawcall分离。所以即使调整它们的depth一致。也无法合并成一个drawcall.
规则2的意思,举个样例就明确了:
同一个UIPanel下有4个UIWidget。w1,w2。w3。w4。
当中 W1和W2引用altals1。
当中 W3和W4引用altals2。
假设它们的depth顺序为 w1 : 1,w2 :2,w3 : 3,w4 : 4。
那么整个渲染须要2个drawcall。由于渲染顺序为 w1,w2。w3,w4。
而w1和w2公用一个altals,所以能够合并成一个drawcall。同理w3和w4能够合并成一个drawcall。
而假设它们的depth顺序为: w1 : 1。w2 :3,w3 : 2,w4 : 4。
那么整个渲染须要4个drawcall。由于渲染顺序为 w1。w3,w2,w4。
由于w1和w3不是公用一个altals,所以仅仅能分开渲染。同理w3和w2,w2和w4也仅仅能分开渲染。
NGUI 降低drawcall的更多相关文章
- 【Unity3D游戏开发】NGUI之DrawCall数量 (四)
看了非常多关于NGUI drawCall的文章.见得比較多的一个观点是:一个 Atlas 相应一个Drawcall. 但事实上NGUI内部有自己的一套对DrawCall的处理规则. 相关的规则有: 1 ...
- NGUI 减少drawcall规则
前置说明一: Unity中的drawcall定义: 每次引擎准备数据并通知GPU的过程称为一次Draw Call. Unity(或者说基本所有图形引擎)生成一帧画面的处理过程大致可以这样简化描述:引擎 ...
- NGUI之渲染DrawCall的合并
在Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call.Draw Call值越低,会得到更好的渲染性能. (NGUI 查看DrawCall工具(NGUI-OPEN-Draw Ca ...
- NGUI诡异的drawCall
看了很多关于NGUI drawCall的文章,见得比较多的一个观点是:一个 Atlas 对应一个Drawcall. 好奇心下做了个demo,两个panel中只用到一个Atlas,却产生了10个draw ...
- NGUI中显示DrawCall详细信息
[NGUI显示DrawCall详细信息] UIDrawCall中有个宏,SHOW_HIDDEN_OBJECTS,默认为关闭状态.将此宏打开,NGUI即会将DrawCall对象显示在Hierarchy中 ...
- NGUI优化之Drawcall
今天在运行之前的程序时,无意中发现一个简单的menu菜单页面drawcall居然达到接近30了,这个数值感觉太高了. 后网上查询关于降低drawcall的方法,发现主要有以下几点: 1.少用Panel ...
- 如何降低Unity程序的Drawcall
[如何降低Unity程序的Drawcall] Unity can combine a number of objects at runtime and draws them together with ...
- Cocos2d-x 学习笔记(26) 从源码学习 DrawCall 的降低方法
[Cocos2d-x]学习笔记目录 本文链接:https://www.cnblogs.com/deepcho/cocos2dx-drawcall-glcalls 1. 屏幕左下角 我们通常在Cocos ...
- NGUI 新手引导
现在我们的游戏已到了开发后期,这个时候需要做新手引导这一块(恶心的新手引导,真想说游戏行业究竟哪个2B最先想出来要引导的???代码搞的到处都是,改了一次又改!) 吐槽过后进入正题:主要还是UI相关的操 ...
随机推荐
- jquery.timers使用说明
jQuery Timers提供了三个函式 1. everyTime(时间间隔, [定时器名称], 函式名称, [次数限制], [等待函式程序完成])2. oneTime(时间间隔, [定时器名称], ...
- Android反编译工具的用法
Android的APK文件时可以反编译的,通过反编译我们就能查看到大体的代码,帮助学习.反编译仅仅提供的是学习的方式,禁止使用该技术进行非法活动. 其实就是两个命令: 1:运行(WIN+R)-> ...
- 《Google Glass开发指南》
<Google Glass开发指南> 基本信息 作者: BestApp工作室 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115349477 上架时间:2014-3-19 ...
- Mysql 的子查询
子查询: 子查询:嵌套在其它查询中的查询语句.(又称为内部查询) 主查询:包含其它子查询的查询称为主查询.(又称外部查询) 非相关子查询: 在主查询中,子查询只需要执行一次,子查询结果不再变化,供主查 ...
- 架构模式数据源模式之:表数据入口(Table Data Gateway)、行数据入口(Row Data Gateway)、活动记录(Active Record)
一:表数据入口(Table Data Gateway) 表数据入口提供了用于访问单个表或者视图(也包含了联表查询)的所有SQL,通常一个表一个类.其它代码通过它来实现对数据库的交互.基于这个特点,表数 ...
- 浅谈volatile与automicInteger
在并发环境中有三个因素需要慎重考量,原子性.可见性.有序性. voatile 保证了有序性(防止指令冲排序)和变量的内存可见性(每次都强制取主存数据),每次取到volatile变量一定是最新的 ...
- MECE分析法(Mutually Exclusive Collectively Exhaustive)
什么是MECE分析法? MECE,是Mutually Exclusive Collectively Exhaustive,中文意思是“相互独立,完全穷尽”. 也就是对于一个重大的议题,能够做到不重叠. ...
- [转]MongoDB基本使用
转自 : http://www.cnblogs.com/TankMa/archive/2011/06/08/2074947.html 成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可 ...
- [转]Apache 配置虚拟主机三种方式
转自: http://www.cnblogs.com/hi-bazinga/archive/2012/04/23/2466605.html 一.基于IP 1. 假设服务器有个IP地址为192.168. ...
- dubbo源码解析-spi(一)
前言 虽然标题是dubbo源码解析,但是本篇并不会出现dubbo的源码,本篇和之前的dubbo源码解析-简单原理.与spring融合一样,为dubbo源码解析专题的知识预热篇. 插播面试题 你是否了解 ...