13. UGUI合批

1.合批的关键渲染状态因素

2.UI特有的层级与顺序因素

3.影响合批的常见陷阱与优化策略


1.合批的关键渲染状态因素

csharp 复制代码
以下是决定UI元素能否合批的主要渲染状态因素, 它们必须全部相同才能合批

1).材质

最重要的因素, 必须使用完全相同的材质实例

这就是为什么Atlas(图集)如此关键, 当多个Image组件使用同一张图集纹理时, 它们引用的是同一个材质, 这是合批的基础

注意: 即使两个材质使用了相同的Shader和相同的Texture, 但如果它们是两个不同的材质实例, 仍然无法合批

2).纹理

作为材质的一部分, 纹理必须相同

UI的默认Sprite Atlas系统就是为了把多个小图片打包到一张大图集里, 让它们共享纹理, 从而满足合批条件

3).Shader和渲染队列

必须使用同一个Shader, 并且渲染队列(Render Queue)值相同

2.UI特有的层级与顺序因素

csharp 复制代码
1).UI特有的层级与顺序因素

由于UI是层级化的, 除了基础渲染状态, 在Hierarchy中的顺序也至关重要; 合批遵循一个"从上到下, 深度优先"遍历规则

同层级连续顺序: 在同一父节点下, 连续的、满足渲染状态相同的子节点可以被合批

2).中断(Break Batch): 如果中间出现了一个不满足合批条件的UI元素(例如使用了不同的材质), 它会中断合批流程, 其之

后的元素即使和前面的元素材质相同, 也需要从新的Draw Call开始

3.影响合批的常见陷阱与优化策略

csharp 复制代码
影响合批的常见陷阱与优化策略

1).不同的图集/纹理: 这是最常见的原因, 确保功能相关的UI精灵打包在同一个图集中

比如: 穿插的不同类型UI元素
csharp 复制代码
2).Mask / RectMask2D:

a.Mask组件(基于模板缓冲区)会强制中断合批, 严重影响性能

b.RectMask2D是更优选择, 它使用简单的轴对齐裁剪, 通常不会打断合批, 性能好得多
csharp 复制代码
3).Canvas层级

每个Canvas组件会生成一个独立的网格, 子Canvas或嵌套Canvas会打断合批边界

频繁改变的UI元素应该放在单独的Canvas中, 这样只需重建这个小的网格, 而不是整个大UI的网格; 这是"静态"和"动态"的

分离
相关推荐
mxwin5 小时前
Unity URP 下抓取当前屏幕内容实现扭曲、镜子与全局模糊效果
unity·游戏引擎·shader
南無忘码至尊10 小时前
Unity学习90天-第2天-认识Unity生命周期函数并用 Update 控制物体移动,FixedUpdate 控制物理
学习·unity·游戏引擎
小林up13 小时前
【Unity URP源码阅读1】ColorGradingLUT
unity·游戏引擎
郝学胜-神的一滴17 小时前
[简化版 GAMES 101] 计算机图形学 04:二维变换上
c++·算法·unity·godot·图形渲染·unreal engine·cesium
南無忘码至尊18 小时前
Unity学习90天-第2天-认识键盘 / 鼠标输入(PC)并实现WASD 移动,鼠标控制物体转向
学习·unity·c#·游戏开发
星夜泊客18 小时前
unity 海底海洋资源OceanEnviromentPackUrp材质丢失修正
unity·游戏引擎·材质
weixin_4242946719 小时前
Unity 的Button Animator
unity·游戏引擎
UQ_rookie20 小时前
【Unity3D】在URP渲染管线下使用liltoon插件出现粉色无法渲染情况的解决方案
unity·游戏引擎·shader·urp·着色器·vrchat·liltoon
aqiu~1 天前
VSCode编辑器用于Unity项目
vscode·unity
小贺儿开发2 天前
Unity3D 心理沙盘互动演示
unity·ai·pdf·人机交互·工具·互动·心理沙盘