1. 前言
很多年前就想将这些年工作中积累的优化经验撰写成文章,但懒癌缠身,迟迟未动手,近期总算潜下心写成文章。
涉及到具体优化技巧时,博主会尽量阐述原理和依据,让读者知其然也知其所以然。要完全读懂这篇文章,要求读者有一定的计算机语言/图形学/游戏引擎基础。希望读者看完后能将自己的游戏性能优化到一定的高度,使得游戏的效果和效率在高/中/低端设备都能符合或超出产品的预期。
以Unity为图例,可举一反三用到其他商业或自研引擎中。
1.1 性能优化的重要性
想必玩过游戏的人会经常感叹:游戏怎么那么卡?手机怎么那么烫?耗电怎么那么快?
其实这些问题都归结于性能问题,性能优化对游戏的重要性不言而喻。
对新游戏项目,中前期可能一直在赶需求赶效果,忽略了性能优化的工作,到中后期性能瓶颈必然会凸显。如果前期做到有效组织资源,制定美术规范,完善开发流程和工具链,后期优化起来会顺手很多,少走很多弯路。
1.2 优化Tips
很多年前,就听到一位图形界的大神说过:优化无止境,优化的最高境界是不渲染。
以前不能完全明白他的话,觉得有点夸张,做过几个游戏项目的性能优化工作之后,深有体会,这么多年过去,言犹在耳,应验了真香定律!
优化的本质就是不渲染或少渲染或用更省的方法渲染。
1.2.1 分清主次
优化性能首先要找出性能瓶颈,对性能影响最大的地方先优化,接着对次影响的进行优化,以此类推。如果能遵守这条规则,优化效果和花费时间的曲线关系大致如下图:
即前期的优化效果会非常明显,但随着时间的推移,花的时间越来越多,优化的效果反而逐渐放缓。这告诉我们:
1. 首先找出性能瓶颈,优化效果最明显;
2. 优化无止境,后期优化效果和时间比降低,要适可而止。
1.2.2 善用分析工具
工欲善其事必先利其器。善用分析工具可以快速定位出性能瓶颈,达到事半功倍的效果。性能分析工具请参看:1.3 辅助工具
1.2.3 平衡好性能和效果
每个游戏偏重点不一样,有些游戏偏重效果而不太讲究性能,有些游戏偏重效率而牺牲效果,有些游戏两者需兼顾。
从博主的经验而言,大多数游戏开发者或者玩家,更偏重性能。举个例子,大多数人在玩吃鸡游戏时,为了帧率稳定和耗电慢一点,将所有的画质参数开至最低。
若为性能故,效果皆可抛。
1.2.4 定制优化参考指标
每个项目在优化前,需要定制一个具体的指标参数,比如高中低端机跑在什么设备上,要达到什么样的帧数等等。游戏Z定的参考指标如下表:
此标准是2017年上半年定的,现在可以酌情放宽参数。定好标准后,就以此为依据进行优化,参数指标达到后即可认为优化任务完成。
1.2.5 做好效果等级管理
建议将等级管理逻辑抽象成单独的模块,增加QualityManager的角色,负责统筹管理和实现等级相关的逻辑。其它模块要只要调用这模块的接口,可以轻易实现差异化逻辑。此外,QualityManager可以收集游戏关键参数:fps/网络Ping值/流量,对外提供查询接口。
1.2.6 具体情况具体分析
每个游戏项目的具体情况不一样,不可生搬硬套本文涉及的参数和方法,否正可能适得其反,花费了时间,性能没能很好地提上去。
1.3 辅助工具
目前市面上分析工具很多,特性和适用的平台都不同,下面就简单介绍常用的工具,具体使用方法另行搜索。
1.3.1 引擎分析工具
- Unity Profiler
Unity Profiler可以查看CPU/GPU/内存/音频/物理/网络等模块的具体消耗参数,是Unity游戏必备的性能分析工具。
- Unreal
Unreal 3及之前的版本要先用命令行生成profiler文件,再通过UnrealFrontend加载生成的文件查看消耗数。Unreal 4提供了类似Unity的Profiler的窗口,更加便捷。更多参看:Unreal Profiler Tool Reference
1.3.2 IDE分析工具
- Visual Studio性能探查器
VS只可运行在windows平台,可对当前项目/指定的exe/运行的进程进行CPU和GPU性能采样并查看具体的消耗指标。
- XCode Instruments
XCode只可运行在Mac OS,可调试Mac OS和iOS的APP的CPU/GPU/内存等性能参数。
- Android Studio Profiler
Android Studio可运行在Windows和Mac OS,但只可分析Android的APP,参数包括CPU/内存/网络等。
1.3.3 GPU厂商工具
几乎每个GPU大厂都提供了调试自家产品的GPU分析工具。它们与引擎和IDE的工具最大的不同点是:可以查看每次Draw Call的渲染状态/引用的资源/绘制的画面,以及其它独特参数。
- Tegra Graphics Debugger(NV)
工具本身可运行在各个主流系统,也可以分析OpenGL和Vulkan,但只支持NV旗下的Tegra K1和X1系列GPU。
- Mali Graphics Debugger(Arm)
类似于Tegra Graphics Debugger, 但全面支持OpenGL的各种版本,还支持Vulkan和OpenCL的调试。
- PVRTrace(Imagination Technology)
只可调试使用Imagination Technology公司GPU的App。
- Adreno Profiler(高通)
只可调试使用高通旗下GPU的App。
- PerfHud(NV)
只支持PC程序,非常强大的GPU调试工具,但无法调试移动设备,需要依赖模拟器。
- PerfHud ES(NV)
PerfHud移动版,支持移动设备调试, 需要下载整个CodeWorks for Android开发包。
1.3.4 其它第三方工具
- PIX(MS)
只运行在windows平台,只支持DirectX的分析。