NGUI 降低drawcall】的更多相关文章

前置说明一: Unity中的drawcall定义: 每次引擎准备数据并通知GPU的过程称为一次Draw Call. Unity(或者说基本全部图形引擎)生成一帧画面的处理过程大致能够这样简化描写叙述:引擎首先经过简单的可见性測试.确定摄像机能够看到的物体,然后把这些物体的顶点(包含本地位置.法线.UV等),(顶点怎样组成三角形),变换(就是物体的位置.旋转.缩放.以及摄像机位置等).相关光源,纹理,渲染方式(由材质/Shader决定)等数据准备好,然后通知图形API--或者就简单地看作是通知GP…
看了非常多关于NGUI drawCall的文章.见得比較多的一个观点是:一个 Atlas 相应一个Drawcall. 但事实上NGUI内部有自己的一套对DrawCall的处理规则. 相关的规则有: 1.Atlas图集数量有关 2.Atlas图集的调用顺序(绘制顺序)有关 3.和UIPanel的数量有关 一.降低NGUI 3的DrawCall数量 升级到NGUI3. DrawCall数由5个增长到了十七八个.想想应该不会是NGUI的问题吧.后来整理了一下.发现有两点:          1)对于同…
前置说明一: Unity中的drawcall定义: 每次引擎准备数据并通知GPU的过程称为一次Draw Call. Unity(或者说基本所有图形引擎)生成一帧画面的处理过程大致可以这样简化描述:引擎首先经过简单的可见性测试,确定摄像机可以看到的物体,然后把这些物体的顶点(包括本地位置.法线.UV等),(顶点如何组成三角形),变换(就是物体的位置.旋转.缩放.以及摄像机位置等),相关光源,纹理,渲染方式(由材质/Shader决定)等数据准备好,然后通知图形API——或者就简单地看作是通知GPU—…
在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的文章,见得比较多的一个观点是:一个 Atlas 对应一个Drawcall. 好奇心下做了个demo,两个panel中只用到一个Atlas,却产生了10个drawCall,百思不得其解.寻觅已久终于找到三篇文章: 一.http://game.ceeger.com/forum/read.php?tid=14653 [NGUI]减少NGUI 3的DrawCall数量 刚升级到NGUI3, 这下不打紧,DrawCall数由5个增长到了十七八个,想想应该不会是NGU…
[NGUI显示DrawCall详细信息] UIDrawCall中有个宏,SHOW_HIDDEN_OBJECTS,默认为关闭状态.将此宏打开,NGUI即会将DrawCall对象显示在Hierarchy中.如下: 对象的命名规则如下:…
今天在运行之前的程序时,无意中发现一个简单的menu菜单页面drawcall居然达到接近30了,这个数值感觉太高了. 后网上查询关于降低drawcall的方法,发现主要有以下几点: 1.少用Panel: 2.少用Atlas: 3.尽量避免夹层(即不同材质的UISprite相互间层级夹杂,如L2,L4使用mat1,L1,L3使用mat2,这样就形成夹层现象): 分析了一下自己的实现,发现其实主要问题都是夹层引起的,因此重新设计了以下层的分布,并在开发过程中有意识的注意这个问题, 具体实现思路如下:…
[如何降低Unity程序的Drawcall] Unity can combine a number of objects at runtime and draws them together with a single draw call. This operation is called “batching” 每帧能够有多少batch依赖于cpu.每个drawcall提交多少个三角形,对cpu压力变化不大,但是每帧有多少个drawcall则影响很明显. Currently, only Mesh…
[Cocos2d-x]学习笔记目录 本文链接:https://www.cnblogs.com/deepcho/cocos2dx-drawcall-glcalls 1. 屏幕左下角 我们通常在Cocos2d-x项目运行前,在AppDelegate::applicationDidFinishLaunching()方法中,执行 director->setDisplayStats(true); 用于开启屏幕左下角的数据显示,数据一共三行,分别是: 第一行GL verts表示此时绘制的顶点数. 第二行GL…
现在我们的游戏已到了开发后期,这个时候需要做新手引导这一块(恶心的新手引导,真想说游戏行业究竟哪个2B最先想出来要引导的???代码搞的到处都是,改了一次又改!) 吐槽过后进入正题:主要还是UI相关的操作,3D场景操作引导的东西比较少.这一块我们使用的是unilua来做这件事,因为我们还没考虑用完善的热更新方案(比如ulua)来做新手引导,所以使用unilua也能暂时满足需求. 具体的做法是:新手引导这一块属于一个单独的界面,其中的Panel层次是比较高的(高于被引导的所有其他界面),其中主要的包…
精灵(Sprite).图集(Atlas)和贴图(Texture)的区别 图集:由多张小图拼合而成的一张大图,其好处是降低DrawCall的次数.减少载入内存的次数和方便管理同一类型的小图.一般图集都会携带一个配置文件用来记录每张小图的名称和区域信息等. 精灵:图集上的一个小图即为一个精灵. 贴图:比如游戏中的背景图等较大的图片,如果不作为图集的一部分打包,而是直接使用,那么可以称为一个贴图. 标签(Label)和字体(Font) 标签:用来显示文本的控件. 字体:NGUI中存在两种字体. 静态字…
序: 1.项目过程中不可避免的需要用到大量Shader 和 UITexture,由于Ngui对Shader支持非常糟糕,导致项目drawCall异常的高 2.Panel裁剪无法裁剪自定义shader内容,这部分暂不研究,后续再说 始: 1.本文主要解决项目中大量使用shader & UITexture 导致drawCall过高的问题(如下图),图中每个不同的图片都会导致增加一个drawCall,那么如何减少这个drawcall呢?当然只有打图集了! 步骤: 0. 将所有图片打包成图集,通过Tex…
unity官方承诺的新ui系统一直没有推出来,我们的UI使用的是原生的OnGUI系统,刚好UI需要改版,索性就想迁到NGUI上面来,于是看了一下NGUI源码,发现NGUI可以大大的降低DrawCall,减轻GPU负担,但是各个组件类上面,也有很多浪费cpu的运算可以改进,这一点对开发移动平台的游戏一定很重要.因此需要对他有针对性的做一些修改,以适应自己的需要. 在迁移过程中,首先要解决的问题就是屏幕分辨率的问题,因为我们是开发移动平台的游戏,分辨率当时是设定在800*480像素,用OnGUI可以…
[精]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…
转载:http://www.jianshu.com/p/061e67308e5f Unity GUI(uGUI)使用心得与性能总结 背景和目的 小哈接触Unity3D也有一段时间了,项目组在UI解决方案的选型一直是用的原生的uGUI,因此本人也是使用了一段时间的uGUI,在uGUI的使用方面积累了一些自己的经验,在此进行一个记录与总结. 本文接下来将会对uGUI的Runtime性能进行着重讨论,其它的因素也很多而且很重要,但是一篇文章讲清楚一件事就好了,文后会提供uGUI的最佳实践与一些使用技巧…
前言 在游戏开发中,DrawCall 作为一个非常重要的性能指标,直接影响游戏的整体性能表现. 无论是 Cocos Creator.Unity.Unreal 还是其他游戏引擎,只要说到游戏性能优化,DrawCall 都是绝对少不了的一项. 本文将会介绍什么是 DrawCall,为什么要减少 DrawCall 以及在 Cocos Creator 项目中如何减少 DrawCall 来提升游戏性能. 正文 什么是 DrawCall? DrawCall 中文译为"绘制调用"或"绘图指…
WeTest 导读   本文作者从自身多年的Unity项目UI开发及优化的经验出发,从UGUI,CPU,GPU以及unity特有资源等几个维度,介绍了unity手游性能优化的一些方法.   在之前的文章<手游内存占用过高?如何快速定位手游内存问题>中提到,Mono内存和native内存是PSS内存主要的组成部分,mono内存更多的起到内存调用的功能,因此常常成为了开发人员优化内存的起点:而在游戏的其他的进程中,同样有很多因素影响着游戏的性能表现.本文将从UGUI的优化角度,介绍unity游戏性…
一.什么是渲染管道?是指在显示器上为了显示出图像而经过的一系列必要操作.渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去.主要步骤有:本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化. 二.如何优化内存?有很多种方式,例如1.压缩自带类库:2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉:3.释放AssetBundle占用的资源:4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小:…
一:什么是协同程序? 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足. 二:Unity3D中的碰撞器和触发器的区别? 碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性.当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数:当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效…
当Canvas上的UI元素变化时,会重新生成网格并向GPU发起绘图调用,从而显示UI.划分画布:1.每块画布上的元素都与其他画布的元素相隔离,使用?工具来切分画布?,从而解决ui的批处理问题.2.也可以通过嵌套画布来解决,这样能允许设计师创建大型分层ui,子画布内容与父画布和同级画布相互隔离.保持自带几何体,执行自己的批处理.3.当使用子画布分离画布时,尝试根据画布更新时间来分组.例如:分离动态元素和静态元素. ==========================================…
一:什么是协同程序? 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足. 二:Unity3d中的碰撞器和触发器的区别? 碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性.当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter\/Stay\/Exit函数:当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰…
这个是我刚刚整理出的Unity面试题,为了帮助大家面试,同时帮助大家更好地复习Unity知识点,如果大家发现有什么错误,(包括错别字和知识点),或者发现哪里描述的不清晰,请在下面留言,我会重新更新,希望大家共同来帮助开发者 一:什么是协同程序? 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足. 二:Unity3d中的碰撞器和触发器的区别? 碰撞器是触发器的载体,而触发器只是碰撞器身上的一个…
一:什么是协同程序?答:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行.换句话说,开启协程就是开启一个可以与程序并行的逻辑.可以用来控制运动.序列以及对象的行为. 二:Unity3d中的碰撞器和触发器的区别?答:碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性.当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数:当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果…
1.       [C#语言基础]请简述拆箱和装箱. 答: 装箱操作: 值类型隐式转换为object类型或由此值类型实现的任何接口类型的过程. 1.在堆中开辟内存空间. 2.将值类型的数据复制到堆中. 3.返回堆中新分配对象的地址. 拆箱操作: object类型显示转换为值类型或从接口类型到实现该接口值类型的过程. 1.判断给定类型是否是装箱时的类型. 2.返回已装箱实例中属于原值类型字段的地址. 2.        [.NET(C#)] attribute,property,markup,ta…
一:什么是协同程序? 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足. 二:Unity3d中的碰撞器和触发器的区别? 碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性.当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数:当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效…
NGUI的DrawCall drawcall定义:对底层图形程序(比如:OpenGL ES)接口的调用,以在屏幕上画出东西. List在内存中连续的空间保存 List是线性直接存储类型 mipMap是什么? mipMap是摄像机离得远近用不同的图片 折半查找算法 GitHub #include <stdio.h> #include <stdlib.h> #define MAX 100 int main() { int binaryFind(int[],int,int); void…
开篇: 前段时间,网上流出了一套手游源码,本想着把服务器端搭一下,给自己认识小伙伴们调试着把这套源码学习一下.于是就买一个阿里云服务器,可是花了几天时间,就是run不起来了啊.还好网上已经有人搭出来了,暂且连上他们的服务器调试吧.哎,还是不说这些糗事了. 那阿里云服务器买都买了,总不能空着把.那就开个网站吧.于是心血来潮的,注册域名,备案,balabala.就是现在这个了.www.shihuanjue.com,个人觉得还是很好记的.以后会把之前写在有道云的笔记梳理一下搬过来吧.我不是大神,有不足…
  检测方式: 一,unity3d 渲染统计窗口 Game视窗的Stats去查看渲染统计的信息: 1.FPS fps其实就是 frames per second,也就是每一秒游戏执行的帧数,这个数值越小,说明游戏越卡. 2.Draw calls batching之后渲染mesh的数量,和当前渲染到的网格的材质球数量有关. 3.Saved by batching 渲染的批处理数量,这是引擎将多个对象的绘制进行合并从而减少GPU的开销: 很多GUI插件的一个好处就是合并多个对象的渲染,从而降低Dra…
提要 此篇是一个国外教程的翻译,尽管有点老,可是适合新手入门. 自己去写代码.debug,布置场景,能够收获到非常多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一篇中,我们学会了怎么在Unity中搭建游戏的场景,而且设置模型的物理属性. 在第二篇中.我们学会了怎么在unity中使用脚本.而且创建了大部分的游戏逻辑,包括投球和得分! 在这最后一节中,我们将会为用户创建一个菜单系统,而且和GameController进行交互,我们開始吧. 在设备上測试 到眼下为…
我们的游戏已经wp8.ios和android平台上的线. 这是我第一次做Unity工程,过程中遇到很多困难和挫折,但是,我和小伙伴探路,现在.该游戏已经上线一段时间.而且很稳定.为Unity.我一直在学习项目.己的学习,欢迎看到文章的朋友多多交流. 项目中后期,我做了一些优化工作.这里记录总结一下. 一.纹理压缩格式 非GPU支持的纹理格式,须要经过CPU解码:而GPU支持的纹理格式,GPU直接解码和显示,GPU的解码有非常多优化,随机訪问.高速寻址和并行解码等,因此效率高得多.并且,压缩过的纹…