当前位置:   article > 正文

UnityUGUI优化合批规则实战_ugui z

ugui z

简介

通过本篇你能处理好大部分UI多余的drawcall,以及本人在项目过程中处理drawcall的经验(算不上啥哈哈!),Drawcall越多会造成Cpu过载,减少drawcall是优化的大头,希望本篇能对你产生帮助。

什么是Drawcall

简单来讲就是Cpu通过图像编程接口向命令缓存区添加命令,让Gpu通过缓存区获取命令处理。难的我也讲不来.

如何减少Drawcall

通过分析帧画面和打断合批的问题来解决

如何查看项目中的drawcall

Unity FrameDebug

一目了然,Unity真是太棒了,你能通过它知道Unity是怎么绘制图像的

在这里插入图片描述

UnityProfiler

yyds!一下子就能知道被打断,图中显示的就是因为图集不同,那么如何让图集相同呢,那么就可以用到精灵图集了,什么?!你说精灵图集是什么,那你接着往下看
在这里插入图片描述

精灵图集

哎呀!一下子让我说精灵图集什么什么什么的,我怎么说的完,我们就针对问题来学习,上面说到它被打断合批的理由是图集不同,那么我们就让他图集相同不就解决问题了吗,那么如果让他们相同呢,那就使用精灵图集,将sprite打包成一个大的图集

精灵图集的使用
  • 创建图集

在这里插入图片描述
-塞入图片
在这里插入图片描述
-打包图集
在这里插入图片描述

Drawcall减少实战经验

-接下来请看使用图集减少了多少从14到5个

在这里插入图片描述
在这里插入图片描述

接下来我们分析能不能再少点–(是不是丧心病狂了,哈哈!通常界面10个左右是正常的),但是为了教学我必须丧心病狂!
1:通过分析器我发现都是纹理不同造成的,第一我们以及打了图集,那么纹理为什么不同呢,
在这里插入图片描述
2:通过帧调试器发现是文字Text 是存储在Font Texture的,所以导致不能合批,这个不可避免,但是却可以优化,直接往下看合批规则
在这里插入图片描述

合批规则

简介
这个百度真的一大堆我随便抄个吧,但是实战的却比较少,他们随便拿几个图,就开始教了,我接下来直接通过一个项目的界面来分析,简单来讲就是先计算层级号,再计算材质,再计算纹理

下图 两个drawcall都是同一个Font Texture但是没有被合批,因为计算层级时将他们分离了,那么什么是层级呢?在相叠的两张图片中,会优先渲染被叠在下面的那张,然后在渲染上面那张,如果两个图片的材质,纹理相同那么他们同为一个层级(就会被合批为一个drawcall),否则都是不同层级(从0开始加1),下图中,两个材质相同纹理相同,但是由于层级不同导致不能合批,所以我们要想办法让他们相同
在这里插入图片描述
就是我不能传视频只能靠图和白话让你们尽量懂
下图中蓝色箭头和红色箭头分别为两个层级,可以明显的看到红色箭头的文字没有压到下面的灰色底图,但是蓝色箭头就压到了,所以导致了他们层级不同,解决方法就是将文字下移,压到灰色地图就解决了–补充一下–{在大背景的上面存在文字和图片并相互不接触的情况下,文字的渲染优先于图片}
在这里插入图片描述
在这里插入图片描述

Z轴 旋转

其实可以简单的理解成 UI不能与canvas成为异面,必须与canvas紧紧贴合

材质和纹理

材质一定要一样,纹理也要一样,纹理不一样可以通过图集来解决,老项目可以用texturepacket

深度–此深度不是合批的深度计算

深度的话,如果有兴趣的通过UGUI源码可以MaskableGraphic所继承的Graphic的抽象类内部有一个depth的只读属性。通过访问它你可以得到该UI的深度
在这里插入图片描述

到此Drawcall从14个到4个,希望大家能点个赞,不懂的话就多看看,可能是我表述的不好!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/48627?site
推荐阅读
  

闽ICP备14008679号