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。

如图:

时间: 2024-12-12 10:19:07

NGUI之渲染DrawCall的合并的相关文章

NGUI优化之Drawcall

今天在运行之前的程序时,无意中发现一个简单的menu菜单页面drawcall居然达到接近30了,这个数值感觉太高了. 后网上查询关于降低drawcall的方法,发现主要有以下几点: 1.少用Panel: 2.少用Atlas: 3.尽量避免夹层(即不同材质的UISprite相互间层级夹杂,如L2,L4使用mat1,L1,L3使用mat2,这样就形成夹层现象): 分析了一下自己的实现,发现其实主要问题都是夹层引起的,因此重新设计了以下层的分布,并在开发过程中有意识的注意这个问题, 具体实现思路如下:

减少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详细信息

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

【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

NGUI中穿插粒子或者mesh渲染层级

在项目中由于特效的层级与NGUI UI的层级不太还规范,导致特效的渲染层级较为杂乱于是就想把特效层级与NGUI的层级管理混合在一起: 在修改之前首先要了解NGUI的层级管理以及DC的合并: 在NGUI中层级的管理以及Drawcall的合并都是由UIPanel这个组件来完成的:在NGUI中UIpanel就相当于UGUI中canvas和canvasrender,在UIpanel中会维护两个队列分别是UIWidget和UIDrawcall的队列并按照深度排序: 每当该UIPanel下有UIWidget

NGUI UI DrawCall 优化

首先要明确Unity中的drawcall定义: 每次引擎准备数据并通知GPU的过程称为一次Draw Call. Unity(或者说基本所有图形引擎)生成一帧画面的处理过程大致可以这样简化描述:引擎首先经过简单的可见性测试,确定摄像机可以看到的物体,然后把这些物体的顶点(包括本地位置.法线.UV等),(顶点如何组成三角形),变换(就是物体的位置.旋转.缩放.以及摄像机位置等),相关光源,纹理,渲染方式(由材质/Shader决定)等数据准备好,然后通知图形API——或者就简单地看作是通知GPU——开

3.NGUI Draw Call(渲染调用)

在Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call.Draw Call值越低,会得到更好的渲染性能. NGUI 查看Draw工具(NGUI-OPEN-Draw Call Tool) NGUI 方面的Draw Call 优化: (1)     打包图集 一.每个材质/纹理的渲染一定是会产生DrawCall的,这个DrawCall只能通过打包图集来进行优化. 二.从功能角度进行划分,例如UI可以划分为公共部分,以及每个具体的界面,功能上,显示上密切相关的图片打包到一起  

NGUI 渲染流程深入研究 (UIDrawCall UIGeometry UIPanel UIWidget)

上图是一个简要的NGUI的图形工作流程,UIGeometry被UIWidget实例化之后,通过UIWidget的子类,也就是UISprit,UILabel等,算出所需的Geometry缓存(顶点数,UV,Color,法线,切线). 而UIPanel,通过遍历自己子类下所有的UIWidget组件(已经按深度排序),先创建一个UIDrawCall,把Widget的material,texture,shader对象传递给该UIDrawCall,然后把该Widget里的Geometry缓存传给UIDra