23

游戏性能优化杂谈(二)

 3 years ago
source link: https://zhuanlan.zhihu.com/p/268159689
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

上一篇提到优化的第二个标准:CPU执行周期,但是没有解释什么是CPU执行周期。

其实CPU执行周期就是游戏主循环循环一次。往往,对于当今大部分游戏引擎,这也代表读入了一次用户输入,执行了一遍游戏逻辑,输出了一帧游戏画面。

类比音乐,我们可以将每个CPU执行周期看作乐曲的一个小节。音乐当中,一个小节的时长,是由拍号以及曲速共同决定的。比如,4/4拍表示以四分音符为一拍,每小节4拍。然后曲速如果为96,则表示每分钟96拍。这样的话一小节的时长就是4/96秒。换句话说,每分钟24小节。

游戏当中,帧率就是曲速。60fps表示每个CPU周期为1/60秒。而一个CPU周期当中,要完成诸如用户输入读入、游戏逻辑执行、资源调度、生成渲染命令、网络通信等等步骤。这些步骤就可以看作是小节当中的音符。因此步骤的数量就对应着拍数。当然,每个步骤所要的执行时间并不是完全相等的,就如有十六分音符、八分音符、四分音符、二分音符以及全音符那样。甚至,有的步骤可能要跨多帧执行,就如被延长线连接的几个音符那样。

但是通常来说,一个小节当中的拍数是固定的,并不会忽多忽少。复杂的曲子,在不同的乐章之间会改变拍号,但是绝不是一小节一变。

与其它应用程序不同,游戏,是非常符合这个规律的。帧数一定,代表曲速一定。而无论游戏内容为何,游戏主循环所执行的步骤数量,是非常稳定的,至少在一个宏观可见的范围当中是这样。

单旋律的乐曲,就好像风铃简单,简单明了。单线程的架构,也是最好控制的。但是每个小节所能塞进去的音符数量,也是极为有限的。当你需要更多的音符来进行为复杂的表现时,就需要有和声,有多个声部配合。程序也是一样,你会开启多线程。

对于多声部的曲子,你会需要很多人,也就是一个乐团来演奏。对于多线程程序,你会需要多个CPU核心来执行。协调这一切的,就是节奏。如果每个演奏者能够准确掌握节奏,那么他们各自演奏的旋律自然就能合为一体,并不需要互相看着对方。否则,就好像钢琴师给一个业余演唱者伴奏那样,要两眼死死盯着他。

然而这,恰恰是当前很多游戏项目当中发生的问题。大家都知道目标曲速,但是很多人忽略拍号,忽略每个步骤所容许的执行时长。每个声部都是自吹自擂,最终一场演奏会就变成一锅粥。

这和当今很多项目开发前期不做性能方面的技术调查和预演有关,当然也和手机或者PC开发适配机型甚多有关。国内普遍的开发习惯是先开发再适配,而不是先规定好曲速和拍号再填音符。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK