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相关推荐

  1. [UGUI源码剖析]—Rebuild 网格重建(画布刷新)系统

    几个比较重要的类和接口: Canvas.CanvasUpdateRegistry.ClipperRegistry.LayoutRebuilder.LayoutGroup.Graphics.Maskab ...

  2. Unity3d:UGUI源码,Rebuild优化

    Image怎么绘制的 Unity中渲染的物体都是由网格(Mesh)构成的,而网格的绘制单元是图元(点.线.三角面) 绘制信息都存储在Vertexhelper类中,除了顶点外,还包括法线.UV.颜色.切 ...

  3. Unity Ugui 优化 DrawCall

    1.使用Frame Debug 2.不要出现 如果有 给他替换成一像素透明 常见的是 image里的source没有赋值 3.mask 有两次dc 并且里外不能合并 可以用rect mask 2d 代 ...

  4. Unity UGUI如何计算drawcall

    看这个问题的时候,先来两张图,一样的ui,只是有一个遮挡为啥batches数据增加了1 我们用framedebug来慢放,你会发现 很明显的,文字覆盖了,打断了合批的问题,而原来是可以先渲染图片ima ...

  5. UGUI合批drawcall高的原因

    各个UI界面Batches 高的原因 通用原因 1.UI  重叠  打断合批   增加一倍的 drawcall  特别是列表里面的重叠 同样材质球的  字体尽量放在一起  有便于合批 同样图集的图片 ...

  6. 如何快速优化手游性能问题?从UGUI优化说起

    WeTest 导读 本文作者从自身多年的Unity项目UI开发及优化的经验出发,从UGUI,CPU,GPU以及unity特有资源等几个维度,介绍了unity手游性能优化的一些方法. 在之前的文章< ...

  7. 从CPU和GPU出发的UGUI优化

    UGUI优化 就在前几天去B站面试实习岗位,发现学习的方向出现了一些小问题 对UGUI的优化理解出现了不小问题,面试之后,查询了不少的文章,并吸取他们的知识,对UGUI有了一定的理解,希望可以避免再出 ...

  8. Unity UGUI优化与原理【unity官方】

    来源( 来源:unity官方 Optimizing Unity UI ) 官方链接: [1]  https://unity3d.com/cn/learn/tutorials/temas/best-pr ...

  9. 手游UGUI性能优化

    WeTest 导读 本文作者从自身多年的Unity项目UI开发及优化的经验出发,从UGUI,CPU,GPU以及unity特有资源等几个维度,介绍了unity手游性能优化的一些方法. 在之前的文章< ...

最新文章

  1. 每日一皮:用户“这个项目很容易嘛”~
  2. asterisk1.8 账号信息mysql存储(动态)
  3. 服务里4个oracle,ORACLE RAC安装问题解决记录(4)- 一个隐藏的Windows服务(OraFenceService)...
  4. 关于使用JAVA正则表达式报java.lang.StackOverflowError错误问题
  5. 小敏同学利用计算机设计,福建省晋江一中、华侨中学2015-2016学年七年级数学上学期期中质量检测试题(无答案) 华东师大版...
  6. Codeblocks下载安装
  7. 高清加载具体(如清明上河图)
  8. appscan如何扫描移动应用APP
  9. php dth网络节点,基于 DHT 网络的磁力链接和BT种子的搜索引擎架构
  10. 数据结构实训-运动会分数统计
  11. 实现坐标转换--不同地理位置系统转换入门
  12. ROS2:Humble 教程
  13. Efficient Graph-Based Image Segmentation论文思路
  14. 软件开发职业是青春饭
  15. 独享IP有什么特点?
  16. “无剑胜有剑”软件大师之路的一点探索(一)
  17. win 7 我的计算机,从“我的电脑”到“此电脑”,Win7/Win10为啥这么改?
  18. java基于ssm的学校教务管理系统的设计与实现论文-计算机毕业设计
  19. iOS crash 定位方式
  20. python中字典是什么类型_Python入门-Python中的基本数据类型-dictionary(字典)

热门文章

  1. springboot配置两个parent的方法
  2. IT30: IT人创业项目路演!!!
  3. HTML中加入背景音乐
  4. 网络直播平台近些年发展
  5. 户外直播信号差,老出现卡顿现象怎么办?
  6. 7. CUDA内存访问(一)提高篇------按部就班 ------GPU的革命
  7. Linux终端分屏软件tmux工具基本快捷键
  8. 知云文献翻译打不开_沙拉查词—— 划线翻译的一股清流
  9. 这一周CSDN人都看了些什么?(5.14-5.20)
  10. Python数据可视化第 7 讲:matplotlib绘制直方图函数hist