加载中...
DrawCall
发表于:2024-03-22 | 分类: Grapics

合批处理在UGUI中会有一些不同

先获得一个按Hierarchy的顺序的列表
计算每个物体的深度。
1 深度从0开始递增。如果世界包围盒Z轴不为0(或isCanvasInjectionIndex),则需独占一个批次,同时独占一个深度。即等于之前所有物体最大深度+1,后一个物体深度需要+1。
2 对一般物体的深度。会判断是否可跟之前的物件共享深度,走接下来的流程。
2.1 先按格子(默认大小是120,根据包围盒再计算)划分出多个格子。(只是为了加速求交)。
2.2 计算物体包围相交哪些格子,再跟格子中已有的物体进行包围盒相交判断。如果不相交则使用当前深度;如果相交且可合批,则使用相交物体中最大的深度;如果相交且不可合批,则使用相交物体中最大的深度+1。合批条件:无独占批次+材质相同+贴图相同+裁剪开关和裁剪矩形相同+贴图A8格式一致(kTexFormatAlpha8)
2.3 将该物体加入所有相交的格子中。若遇到独占深度的物体,则格子数据清空。即后续物件不跟之前的物件共享深度。
排序:按照深度-材质-贴图-层级顺序优先级排序。
合批:对排序后的列表,从头开始一个一个检测是否能与前面的物体合批。合批条件:无独占批次(只判断isCanvasInjectionIndex)+材质相同+贴图相同+裁剪开关和裁剪矩形相同+贴图A8格式一致(kTexFormatAlpha8),非SubBatch只判断前两个条件,一般情况下UI的材质都一样。
UGUI批处理原文链接:httpsblog.csdn.nethankangwenarticledetails122667647
在Unity中的shader中会将这些数据存到一些通道里: POSITION、NORMAL、COLOR、 TANGENT、TEXCOOR

UgUI合批de注意事项

首先合批的 原理: 同一Canvas下 同一材质 同一图片或者是图集

Ugui的排序

首先Ugui的排序渲染方式 canvas 的渲染层级 UI的深度渲染层级 index深度 材质的渲染层级 hierarchy次序(textureID 排序)

ugui都是先进行排序 后进行合批
排序的顺序取决于 index深度(box是否遮盖的关系) 材质ID textureID 排序

建议:

  1. 所有有可能打断和皮的层移动到最下边图层,避免UI元素重叠
  2. 拆分多个同级或者嵌套的canvas,减少canvas的rebatch复杂度
  3. 动静分离
  4. canvas 尽量使用overlay模式减少camera的性能开销

引文链接

上一篇:
UitoolKit+ GraphView 开发 可视化节点编译器
下一篇:
关于图形学
本文目录
本文目录