Files
obsidian-notes/3Resources/游戏开发/性能优化/性能优化-面试.md
zzzisfunnyboy b73da8d702 8.10 家
2025-08-10 23:44:07 +08:00

39 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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顶点数据