概述优化目的
- 达成目标帧率
- 运行帧率稳定
- 确保目标画质
优化参与角色
优化需要整个团队一起来做,不是某个“神人”可以搞定一切的。
三个关键职能:
- 美术:建模、贴图、绑定、动作、关卡搭建
- 技术美术(如果有):材质、Shader编程、特效制作
- 程序:游戏逻辑编程
优化流程
性能分析工具
- Unity Profiler(主要)
- Frame Debugger
- Physics Debugger
- UIElements Debugger
- IMGUI Debugger
- Memory Profiler (Package Manager提供)
- Profiler Analyzer (Package Manager提供)
优化时所用环境
- 编辑器中运行
- 真机中运行
- 在构建时建议勾选 Development Build 和 Autoconnect Profiler
帧率目标帧率
- 大多数游戏:60 FPS
- 移动游戏(普通):30 FPS
- 移动游戏(高端):60 FPS
- VR:不同设备要求不同,但基本要求在 70 FPS以上。
每帧事务
渲染一帧所需要时间 > CPU计算所需时长 + GPU消耗所需时长
每帧中所有事务完成得足够快时,游戏流畅运行;每帧中所有事务完成得不够快时,游运行卡顿。
CPU事务
- Skinning
- Batching(Static Batching、Dynamic Batching 等)
- 物理相关计算
- 粒子效果
- 用户脚本(处理玩家输入等)
- ……
GPU事务
- Shader
- DrawCall
- Image Effects(后处理)
CPU与GPU并不各自孤立
如果 CPU 在物理计算和脚本运行要花很多时间,那么即使 Shader 优化得再好,也不会提高帧率;
如果 GPU 处理 Shader 消耗大量时间,那么即使优化物理系统和脚本也不会对提高帧率有什么帮助。
当 CPU 压力大,而 GPU 压力小时,就不应该采取一些加大 CPU 压力以减少 GPU 压力的方法。反之亦然。
因此我们要分析找到影响运行性能的短板。