UGUI的DrawCall和Rebuild
1.DrawCall的概念
DrawCall是CPU调用图像编程接口,命令GPU进行渲染的操作。造成DrawCall过高的性能瓶颈其实是CPU而不是GPU。UGUI的合并原理是将相同的材质进行合并操作。因此UGUI减少DrawCall的方式是尽可能地进行动态合批。
2.DrawCall的计算原理
2.1.计算Depth
(1)跳过不渲染的节点,如果处于渲染状态切没有任何其他相交的渲染元素,depth=0。
(2)如果处于渲染状态切有其他元素相交则找到相交元素中最大的depth,判断能不能合批,如果能合批则depth=maxDepth,否则depth=maxDepth+1。
(3)depth与是否相交有关,与是否为子节点无关。
2.2.材质球
计算出depth后,针对depth相同的情况下,获得材质球的Instance ID进行升序排列
2.3.纹理
再获得纹理的Instance ID进行升序排列
(1)使用图集SpriteAtlas则Instance ID为图集的ID
(2)单个图片没有图集Instance ID为图片的ID
(3)一个字体的Text,Instance ID为字体的ID
2.4.总结
所以DrawCall的计算就是上面3点从上到下的优先级顺序进行升序排列,只有满足3点相同GUI才能进行合批操作,算为一个DrawCall。
3.Rebuild概念
Canvas负责将子节点的UI元素的网格合并,并生成相应的渲染指令再发送到Unity的图形管道的过程。所以Canvas就是渲染UI的组件,当UI发生变化就要执行一次Batch,它是影响性能更大的元凶。注意Canvas的Batch只会影响其子节点,但不会影响其子Canvas。
4.Rebuild操作
Rebuild分为Layout Rebuilds和Graphic Rebuild
4.1.Layout Rebuilds
重新计算一个layout组件的子节点的适当位置或者大小的时候触发
4.2.Graphic Rebuilds
graphic元素基本大小,旋转以及文字变化、图片的修改等触发
4.3.总结
Layout Rebuilds和Graphic Rebuilds都会触发Rebuild,UGUI会收集一帧的所有change,然后统一进行处理。
UGUI的DrawCall和Rebuild相关推荐
- [UGUI源码剖析]—Rebuild 网格重建(画布刷新)系统
几个比较重要的类和接口: Canvas.CanvasUpdateRegistry.ClipperRegistry.LayoutRebuilder.LayoutGroup.Graphics.Maskab ...
- Unity3d:UGUI源码,Rebuild优化
Image怎么绘制的 Unity中渲染的物体都是由网格(Mesh)构成的,而网格的绘制单元是图元(点.线.三角面) 绘制信息都存储在Vertexhelper类中,除了顶点外,还包括法线.UV.颜色.切 ...
- Unity Ugui 优化 DrawCall
1.使用Frame Debug 2.不要出现 如果有 给他替换成一像素透明 常见的是 image里的source没有赋值 3.mask 有两次dc 并且里外不能合并 可以用rect mask 2d 代 ...
- Unity UGUI如何计算drawcall
看这个问题的时候,先来两张图,一样的ui,只是有一个遮挡为啥batches数据增加了1 我们用framedebug来慢放,你会发现 很明显的,文字覆盖了,打断了合批的问题,而原来是可以先渲染图片ima ...
- UGUI合批drawcall高的原因
各个UI界面Batches 高的原因 通用原因 1.UI 重叠 打断合批 增加一倍的 drawcall 特别是列表里面的重叠 同样材质球的 字体尽量放在一起 有便于合批 同样图集的图片 ...
- 如何快速优化手游性能问题?从UGUI优化说起
WeTest 导读 本文作者从自身多年的Unity项目UI开发及优化的经验出发,从UGUI,CPU,GPU以及unity特有资源等几个维度,介绍了unity手游性能优化的一些方法. 在之前的文章< ...
- 从CPU和GPU出发的UGUI优化
UGUI优化 就在前几天去B站面试实习岗位,发现学习的方向出现了一些小问题 对UGUI的优化理解出现了不小问题,面试之后,查询了不少的文章,并吸取他们的知识,对UGUI有了一定的理解,希望可以避免再出 ...
- Unity UGUI优化与原理【unity官方】
来源( 来源:unity官方 Optimizing Unity UI ) 官方链接: [1] https://unity3d.com/cn/learn/tutorials/temas/best-pr ...
- 手游UGUI性能优化
WeTest 导读 本文作者从自身多年的Unity项目UI开发及优化的经验出发,从UGUI,CPU,GPU以及unity特有资源等几个维度,介绍了unity手游性能优化的一些方法. 在之前的文章< ...
最新文章
- 每日一皮:用户“这个项目很容易嘛”~
- asterisk1.8 账号信息mysql存储(动态)
- 服务里4个oracle,ORACLE RAC安装问题解决记录(4)- 一个隐藏的Windows服务(OraFenceService)...
- 关于使用JAVA正则表达式报java.lang.StackOverflowError错误问题
- 小敏同学利用计算机设计,福建省晋江一中、华侨中学2015-2016学年七年级数学上学期期中质量检测试题(无答案) 华东师大版...
- Codeblocks下载安装
- 高清加载具体(如清明上河图)
- appscan如何扫描移动应用APP
- php dth网络节点,基于 DHT 网络的磁力链接和BT种子的搜索引擎架构
- 数据结构实训-运动会分数统计
- 实现坐标转换--不同地理位置系统转换入门
- ROS2:Humble 教程
- Efficient Graph-Based Image Segmentation论文思路
- 软件开发职业是青春饭
- 独享IP有什么特点?
- “无剑胜有剑”软件大师之路的一点探索(一)
- win 7 我的计算机,从“我的电脑”到“此电脑”,Win7/Win10为啥这么改?
- java基于ssm的学校教务管理系统的设计与实现论文-计算机毕业设计
- iOS crash 定位方式
- python中字典是什么类型_Python入门-Python中的基本数据类型-dictionary(字典)