UGUI合批个人学习心得

从目前学到的知识上看,合批就是最基础的条件就是需要贴图和材质相同,这两个一样才有可能合批,UGUI合批是以Canvas为单位的。

UGUI的合批就是把某个Canvas下满足合批规则的UI控件的网格合并为一个大的网格,然后将这些网格合并在一起,调用一次Draw Call,然后提交给GPU进行绘制

一、先按Depth从小到大的顺序排序

Depth的算法可以看我后面的链接,简单来说就是逐个遍历Canvas下所有节点,每个节点去和自己上面的所有节点比较,如果和上面的节点都没相交那么自己的Depth就是0,如果有相交的情况,那么就是看和相交的那个节点是不是材质和贴图一样,如果一样那么Depth就和相交的节点一样,如果有材质或贴图不一样的,那么就比这个节点的Depth多1,然后取对比后这里面的最大值作为自己的Depth。ps:隐藏或者透明度是0的depth=-1

按照图示例子,最先开始Image1这个节点,他的上面没有其他节点,那个他自己Depth就是0。然后到Image2,上面只有Image1,有情况如下

1.这两个image没有相较,那么image2的Depth也是0

2.这两个image有相交,那么又有两种情况

2.1 两个材质和贴图一样,那么image1和image2的Depth相等

2.2 两个材质或贴图不一样,那么image2的Depth = Image1的Depth + 1

接下来到image3了,上面有image1和image2,比较方法和前面一样,就是看1和2有没有和自己相交,如果都没相交那么Depth就是0,如果有相交,那么就按照前面相交的情况来确定Depth,然后取最大值赋给自己。

各个节点的Depth计算完毕后,如果Depth一样,那么就比较material ID,如果material ID相同就比较texture ID,如果texture ID也想同就比较RendererOrder,也就是UI层级队列顺序,即Hierarchy面板上的顺序,所有排序都是从小到大排序。然后剔除Depth = -1的UI元素,得到Batch前的UI 元素队列,这个队列被称之为VisiableList

得到这个队列之后,就开始相邻节点看是否材质和贴图想同,如果相同那么这两个节点就能合批,如果不同就打断合批单独渲染了。

这篇文章讲很详细,可以看这篇文章,我这里主要是做自己的知识点汇总

原文链接:https://blog.csdn.net/sinat_25415095/article/details/112388638

相关推荐
AI服务老曹3 小时前
AI视频平台登录无反应性能优化指南:从接口失效到服务自启动的排查全解
人工智能·性能优化·音视频
techdashen4 小时前
Uber 如何用原生 gRPC 加速 OpenSearch:从 REST/JSON 瓶颈到搜索与写入性能优化
性能优化·json
zyh______5 小时前
C#语法糖(按照实用性排序)
unity·c#
云栖梦泽在7 小时前
原生 IP、机房 IP、住宅 IP、广播 IP 有何不同?从网络身份到 ASN 识别的技术科普
网络·网络协议·tcp/ip·性能优化
avi91118 小时前
[AI教做人]CinemachineCamera 各项调整配置参数入门 + Profiler
unity·游戏开发·camera·cinemachine·visual camera·镜头配置
阿拉斯攀登9 小时前
RAG 性能优化:缓存、批量与并发
人工智能·缓存·性能优化·embedding·agent·loop·rag
要开心吖ZSH1 天前
处方物流信息同步优化:从 36 秒到亚秒级的踩坑记录
java·数据库·mysql·性能优化
郝学胜-神的一滴1 天前
[简化版 GAMES 101] 计算机图形学 16:纹理走样、Mipmap、三线性插值、各向异性过滤原理全解
unity·游戏引擎·godot·图形渲染·three.js·opengl·unreal
搬砖柯1 天前
系列12-接口压测怎么做成平台能力?自研 httpx 引擎、分布式 Worker 与 Locust 选型对照
分布式·测试工具·性能优化·开源·自动化·httpx
云栖梦泽在2 天前
Claude Code / Codex 使用卡顿怎么办?AI 编程 Agent 连接失败与网络排查思路
网络·人工智能·网络协议·chatgpt·性能优化