unity如何计算drawcall

简介: unity如何计算drawcall

UGUI在合批之前,会根据ui的Depth、MatID 、ImgID、RendererOrder进行排序,之后对相邻的UI进行检测,判断ImgID和MatID是否相同,如果相同则可以进行合批处理,如果这两个UI的MatID和ImgID都相同,但是不连续,中间有其他不同MatID或ImgID的UI则会打断合批。

Depht排序:

   先筛选掉Depht为-1的值,这部分默认不渲染

   接着判断是否该元素底部是否有物体,如果没有则赋值Depth为0,如果盖住物体(这块是通过Mesh进行判断,判断Mesh是否相交)则等于底部盖住的UI元素中Depth最大的值+1、

   如果两个相邻元素通过了合批测试,则这两个相邻元素的深度值相等。

深度排序之后,就会根据matID进行排序,如果材质相同则对ImgID进行排序,如果也相同,那会根据inspection面板上的RendererOrder,最后真正进行UI的合批。

如图示:

1.png

hierrchy面板顺序如图

2.png

drawCall如下:

3.png

可以看到是5个,因为文本打断了Depth的合批。

在Debug Frame里我们可以清楚的看到他有3个DrawMesh

4.png

那只需要将hierrchy的顺序修改到最后,我们看会发生什么。

5.png

hierrchy面板顺序如图:

6.png

drawCall如下:

7.png

降为了4,代表三张image进行了合批。

8.png

用FrameDebug也可以清楚的看到优化是成功的。

特殊情况:

下面我们在看一个特殊的案例

9.png

请注意面板上的顺序,按我们理解的情况看,他应该排序后的顺序是:文本,图片,图片,之后因为两个图片的材质一致所以能够进行合批。

10.png

但是通过frameDebug我们发现,实际上顺序却是:图片,文本,图片这样的顺序,那这是为什么呢,我们更进一步,通过Profiler的UI的modules来看具体的细节

11.png

给出的原因是贴图不同,目前两个图片的贴图都是Nil,那我们尝试修改两张图片的贴图

12.png

之后我们再观察会发现

13.png

这里的顺序就是我们预期的顺序文本,图片,图片了,那为什么会发现这种问题呢,是因为在默认情况下,排序了depth之后,这两个层级相同,就会比较matID,image和text的默认材质都是ui defult,mat也一致,在比较TextureID时,img为nil比默认的Text的TextureID小,所以排序在了text前,但是替换了贴图后,图片的TextureID大于Text的TextureID,下面的显示就达到了预期的效果。




相关文章
|
前端开发 图形学 异构计算
Unity优化之Drawcall
Unity优化之Drawcall
515 0
|
图形学
Unity UGUI如何计算drawcall
Unity UGUI如何计算drawcall
127 0
|
前端开发 图形学 异构计算
unity优化之DrawCall
unity优化之DrawCall
245 0
|
存储 图形学
Unity实战之王者荣耀段位计算
Unity实现王者荣耀段位计算
Unity实战之王者荣耀段位计算
|
C# 图形学
【Unity】贝塞尔曲线关于点、长度、切线计算在 Unity中的C#实现
原文:【Unity】贝塞尔曲线关于点、长度、切线计算在 Unity中的C#实现 写在前面 最近给项目做了个路径编辑,基本思路是满足几个基本需求: 【额外说明】其实本篇和这个没关系,可以跳过“写在前面”这部分,跨到正文部分 编辑时: ① 随意增减、插入、删除路点,只要路点数量大于1,绘制曲线,曲线必定经过路点。
3349 0
|
测试技术 API 图形学
|
Java 图形学 iOS开发
unity3d Drawcall优化方法
unity3D 对于移动平台的支持无可厚非,但是也有时候用3D 开发出来的应用、游戏在移动终端上的运行有着明显的效率问题,比如卡、画质等各种问题。自己在做游戏开发的时候偶有所得。
1472 0
|
图形学 缓存 程序员
[Unity3d]DrawCall优化手记
在最近,使用U3D开发的游戏核心部分功能即将完成,中间由于各种历史原因,导致项目存在比较大的问题,这些问题在最后,恐怕只能通过一次彻底的重构来解决 现在的游戏跑起来会有接近130-170个左右的DrawCall,游戏运行起来明显感觉到卡,而经过一天的优化,Draw...
1074 0
|
4月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
207 6
|
3月前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
131 4