Files
zzzisfunnyboy b73da8d702 8.10 家
2025-08-10 23:44:07 +08:00

1.8 KiB
Raw Permalink Blame History

UGUI优化

  • HUD刷新

    • 可以在代码逻辑中做一定的延迟
  • 颜色不同导致无法合批

    • 可以用MaterialPropertyBlock解决
    • UGUI的shader中虽然有顶点颜色但是却从来没有使用过提交顶点颜色也依赖CanvasRender无法使用顶点色
  • Canvas下网格的变化会引起Canvas.BuildBatch的调用

    • 減少Canvas下网格顶点的变换例如UI元素的Transform变动
  • 合并批次

    • 无法合批的情况
      • 不同Canvas|图集交叉|深度交叉
      • 同一个Canvas同一图集深度但无法合批的情况
        • 动态合批未通过超过顶点限制缩放不为1
        • 对于Alpha为0的Image需要勾选其CanvasRender组件上的Cull Transparent Mesh选项否则依然会产生DrawCall且容易打断合批。
  • FGUI的处理方式

    • 自动合并相邻组件
      • UGUI无法做到的原因是因为依赖底层的动态合并以及静态合并但FGUI只处理UI
    • 顶点数据重组
      • 将多个组件的顶点UV颜色数据合并到单个顶点缓冲区一次性提交到GPU
    • 文本处理:
      • 将某几个字的纹理和图片的纹理打到同一个图集
      • 动态变更字体的时候,往图集里更新新的字体,避免发生材质重建
      • 颗粒度不同
        • UGUI的Canvas下元素被设置Dirty后会导致整个CanvasReBuild
        • FGUI的局部更新更高效

改变颜色是否能合批的本质原因

  • UGUI 将颜色存储在材质属性层级
  • FGUI 将颜色存储在顶点数据层级

FGUI的字体与图片合批

  • FGUI的字体图片合批 本质是Texture2DArray字体纹理与图集纹理形成
    • 字符纹理生成
      • 与动态图集差不多
      • 申请一张512*512的贴图
      • 如果动态图集里没有这个字的图调用系统字体渲染API
      • 写入数据兵返回uv顶点数据