NGUI优化之Drawcall

今天在运行之前的程序时,无意中发现一个简单的menu菜单页面drawcall居然达到接近30了,这个数值感觉太高了。

后网上查询关于降低drawcall的方法,发现主要有以下几点:

1.少用Panel;

2.少用Atlas;

3.尽量避免夹层(即不同材质的UISprite相互间层级夹杂,如L2,L4使用mat1,L1,L3使用mat2,这样就形成夹层现象);

分析了一下自己的实现,发现其实主要问题都是夹层引起的,因此重新设计了以下层的分布,并在开发过程中有意识的注意这个问题,

具体实现思路如下:

1.背景、按钮等置于底层,因为彼此间可能有层级关系,因此分配了1-4这么几个层级来放置底层UISprite;

2.文字展现基本置于顶层,因此把所有UILabel的层次提高,如第5层这样的;

完成以上两个步骤以后,发现DC立马降低到2,即两个material最后形成了两个drawcall。

NGUI优化之Drawcall,布布扣,bubuko.com

时间: 2024-10-17 23:37:20

NGUI优化之Drawcall的相关文章

减少NGUI 3的DrawCall数量

刚升级到NGUI3, 这下不打紧,DrawCall数由5个增长到了十七八个,想想应该不会是NGUI的问题吧.后来整理了一下,发现有两点: 1.对于同一Atlas,DrawCall数取决于Panel的数量(实际上是UIPanel这个脚本的数量).比如说,我有两个Sprite,这两个Sprite属于同一Atlas,但是位于不同的Panel下,这时候DrawCall 数是2, NGUI 2中则是1.使用建议就是只使用一个Panel. 2.对于不同Atlas,同一Panel下的Sprite,可通过Dep

NGUI之渲染DrawCall的合并

在Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call.Draw Call值越低,会得到更好的渲染性能. (NGUI 查看DrawCall工具(NGUI-OPEN-Draw Call Tool)) Unity默认会按照控件的Depth来渲染.从后往前渲染,NGUI为了减少GPU状态切换的消耗(比如切换material),把相同material的widget合并,减少DrawCall的数量.如果和前一个材质不相同则会重新产生一个Draw Call. 如图:

NGUI中显示DrawCall详细信息

[NGUI显示DrawCall详细信息] UIDrawCall中有个宏,SHOW_HIDDEN_OBJECTS,默认为关闭状态.将此宏打开,NGUI即会将DrawCall对象显示在Hierarchy中.如下: 对象的命名规则如下:

【转】 各种 基于Unity3d 引擎的Android游戏优化 (drawcall)

1. 更新不透明贴图的压缩格式为ETC 4bit,因为android市场的手机中的GPU有多种,每家的GPU支持不同的压缩格式,但他们都兼容ETC格式, 2. 对于透明贴图,我们只能选择RGBA 16bit 或者RGBA 32bit. 3. 减少FPS,在ProjectSetting-> Quality中的VSync Count 参数会影响你的FPS,EveryVBlank相当于FPS=60,EverySecondVBlank = 30: 这两种情况都不符合游戏的FPS的话,我们需要手动调整FP

drawcall优化

Unity(或者说基本全部图形引擎)生成一帧画面的处理过程大致能够这样简化描写叙述:引擎首先经过简单的可见性測试,确定摄像机能够看到的物体,然后把这些物体的顶点(包含本地位置.法线.UV等),索引(顶点怎样组成三角形),变换(就是物体的位置.旋转.缩放.以及摄像机位置等).相关光源,纹理,渲染方式(由材质/Shader决定)等数据准备好.然后通知图形API--或者就简单地看作是通知GPU--開始绘制,GPU基于这些数据.经过一系列运算.在屏幕上画出成千上万的三角形.终于构成一幅图像. 在Unit

【Unity3D游戏开发】NGUI之DrawCall数量 (四)

看了非常多关于NGUI drawCall的文章.见得比較多的一个观点是:一个 Atlas 相应一个Drawcall. 但事实上NGUI内部有自己的一套对DrawCall的处理规则. 相关的规则有: 1.Atlas图集数量有关 2.Atlas图集的调用顺序(绘制顺序)有关 3.和UIPanel的数量有关 一.降低NGUI 3的DrawCall数量 升级到NGUI3. DrawCall数由5个增长到了十七八个.想想应该不会是NGUI的问题吧.后来整理了一下.发现有两点: 1)对于同一Atlas.Dr

【Unity NGUI游戏开发之四】NGUI的DrawCall数量

看了很多关于NGUI drawCall的文章,见得比较多的一个观点是:一个 Atlas 对应一个Drawcall. 但其实NGUI内部有自己的一套对DrawCall的处理规则.相关的规则有: 1.Atlas图集数量有关 2.Atlas图集的调用顺序(绘制顺序)有关 3.和UIPanel的数量有关 一.减少NGUI 3的DrawCall数量 升级到NGUI3, DrawCall数由5个增长到了十七八个,想想应该不会是NGUI的问题吧.后来整理了一下,发现有两点: 1)对于同一Atlas,DrawC

DrawCall

[精]draw call 理解和优化 http://bubuko.com/infodetail-387899.html DrawCall 优化 . http://www.cnblogs.com/softimagewht/p/3812978.html U3D DrawCall优化手记 http://www.cnblogs.com/ybgame/p/3588795.html [风宇冲]Unity3D性能优化:DrawCall优化 http://blog.sina.com.cn/s/blog_4711

draw call 理解和优化

draw call是openGL的描绘次数(directX没怎么研究,但原理应该差不多)一个简单的openGL的绘图次序是:设置颜色→绘图方式→顶点座标→绘制→结束.每帧都会重复以上的步骤.这就是一次draw call 如果有两个model,那么需要  设置颜色→绘图方式→顶点座标A→绘制→结束.设置颜色→绘图方式→顶点座标B→绘制→结束.两次draw calls;也就是说在openGl绘制前,如果色彩通道(color filter),绘图方式(shader),顶点座标(model)不同的情况下