概述优化目的

  1. 达成目标帧率
  2. 运行帧率稳定
  3. 确保目标画质

优化参与角色

优化需要整个团队一起来做,不是某个“神人”可以搞定一切的。

三个关键职能:

  • 美术:建模、贴图、绑定、动作、关卡搭建
  • 技术美术(如果有):材质、Shader编程、特效制作
  • 程序:游戏逻辑编程

优化流程

性能分析工具

  • Unity Profiler(主要)
  • Frame Debugger
  • Physics Debugger
  • UIElements Debugger
  • IMGUI Debugger
  • Memory Profiler (Package Manager提供)
  • Profiler Analyzer (Package Manager提供)

优化时所用环境

  1. 编辑器中运行
  2. 真机中运行
    • 在构建时建议勾选 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 压力的方法。反之亦然。

因此我们要分析找到影响运行性能的短板