我们需要将被动优化改变为主动优化
项目周期
在不同的项目时间段使用不同的策略
- 需求收集:确定性能目标,了解游戏玩法,确定性能预算以满足游戏玩法的需要
- 实现——早期阶段:因为没啥逻辑,所以没有性能压力,可以通过压力测试来找出性能问题会从什么地方出来,这个时候也适合重构一些子系统,在更多代码在上面编写之前。
- 实现——中期:性能问题悄悄出现,并且在最低限度的性能条件下出现问题。告诉程序员不要担心,告知问题并且以此为戒,防止危机出现。
- 实现、测试期:项目末期,每一毫秒都很重要,我们会进行分级以及部分删减来满足发行的性能目标。最后的hack来将代码的最后一点性能发挥出来。
架构修改要趁早。
早期处理系统,中期算法,后期微观
性能预算
每个工程都有性能考量,并且性能考量的标准并不相同。
设置标准
在预算的一开始必须决定两条线,高端设备的性能目标以及低端机的性能目标。
针对GPU和CPU等设备需要有明确的型号。
研发标准线
多条指标是预算的子项。
30fps是高端设备中的一个指标。帧率和每帧耗时是更细致的至此。每帧耗时是线性指标 更适合于测量与计算。
预留好buffer也是必要的。
misc其实是用于不可知的一些消耗。
性能预算不可能完美,在执行的时候会不断调整。不要让标准框柱你。它只是用于指导。
- 查看理论性能:算法选择
- 查看硬件信息:是缓存还是运算,在GPU还是CPU
- 降低工作负载:减少多余的工作
- 快速实现并且迭代
典型的工程轨迹
投资回报率最大化
尽可能使用可维护修改而减少Hack
性能可视化
好的性能可视化可以让非专业背景的人也可以简单理解性能瓶颈在什么地方
理解缓慢
缓慢是一种感觉,我们需要将时间花在处理玩家可以感知到的缓慢。高帧率很重要,因为影响到输入与反馈之间的间隔。
高帧率
100Hz以上才能骗过人类的眼睛
连续性(抖动)
抖动实际上比更高的帧率更加重要。人类的眼睛可以适应更低的帧率,但是抖动却不行。