作者:翎上_Probe
大家好,我是一颗虾丸。
电子游戏的发展日新月异,在过去的几个月里发售/释出了许多3A大作比如说《地平线:黎明时分》、《塞尔达传说:荒野之息》和《不义联盟2》(对我是认真的)。
但是尽管游戏在高速发展,但是有些东西还是逃不掉的,那就是加载时间,这么多年一点进步没有。谁都知道那些没耐心的玩家每次看到加载条都会瞬间爆炸但是还是必须要忍受。
大概只有密集的补丁攻势才能和这这个恶魔之条相抗衡。为什么我们明明有更先进的主机和更高效的引擎却还是逃不出加载条的魔爪?
一位游戏程序员告诉我,随着时代的发展,游戏的加载内容在成指数增长,但是硬件却没有以同样的速度进步。
威廉姆斯·阿姆斯特朗是一位有着丰富的游戏编程经验,经手过大量类似《看火人》和《生化奇兵》这样的大作的程序员,他说:“CPU和GPU的发展速度已经远远把硬盘的读写速度甩在身后”。
他解释道:“硬盘是一种严格的受物理学定律约束的设备。硬盘的读写操作包含了大量宏观微观层面的操作,包括电子运动和机械运动。这和纯电路的运行速度相比,慢的不知道到哪里去了。不如说,光速快过一切。”
“(硬盘的)操作比纯电路操作慢太多。不如说光速快过一切。”
与硬盘们的前辈相比,现在的它们的容量确实提升了很多,但是次时代游戏的容量要求提升了更多,这两者完全不成比例。
罗伯特·迪特里希是一位负责游戏环境和单位视觉效果处理的程序员了,他表示如果一名设计师要把纹理的分辨率从1024*1024提到2048*2048的话那么就意味着4倍的容量提升,如果提升到4096*4096的话那就意味着要乘16倍的容量。
同时,他也提到。如果将硬盘的转速从多年前的5400转/分钟提升到7200转/分钟的话,你的读写速度提升只有33%。“
虽然固态硬盘在提高读写速度的效果立竿见影——尽管这样往往意味着更高的成本——但是它们的读写速度还是在指数式增长的游戏容量面前相形见绌。”
这还不全是材质包的锅。阿姆斯特朗在后续的回复中写道:“游戏的视角越来越开阔,意味着同时的计算量更大。什么乱七八糟的东西都要往驱动盘上塞,包括AI、物理引擎还有其他巴拉巴拉的。视角增大的结果远非你想象的那么简单。”
如果能明白硬盘的容量和读写速度的增长到底用多慢之后你就会很容易理解为什么到现在加载条还是没有变短了。那些可爱的程序员们已经竭尽所能去缩短加载时间了。
迪特里希补充道,加载画面的开始并不是加载过程的开始,事实上它往往在最后一幕即将结束的时候就开始了。
比如说,大多数游戏会选择在刚出现公司Logo的时候就开始加载内容,反正Logo是不能跳过的那就让它变得有用一点好了。还有些在你点进去之前就开始加载下一幕内容,这就是加载条在游戏一开始看起来特别长的原因。
现代的游戏还会从程序机制上来减少所占内存,用更少的数据去描述更多的内容。比如,一个砖块的纹理可能并非来自一个BMP文件而是来自一组数学计算式——也就是矢量图形。
“玩家行动的不确定性越大,你就越难预判哪些数据是玩家接下来用的到的。”
一个常用的策略是将游戏的可能加载内容拆分,在加载时只加载要用的数据——还有可能用的到的数据。通常在开发者可以粗略地预测玩家的行动的时候会使用这个策略。
简单来说,一般在每一幕的开头用这个套路。
但是玩家的行为总是难以预料的,特别是在一个开放类游戏里。“玩家的行动越难以预测,我们就越难判断那些数据是玩家接下来用的到的”迪特里希说,“这就是为什么在你瞬移到一个很远的地方需要加载,而走过去就不需要加载。”
大多数情况下,直到开发周期结束前开发者们都不知道该怎么去优化他们的游戏。游戏开发是个巨大的工程,包括了一系列数不清的调试和妥协,你有可能因为一个功能实现而延长整体加载时间、影响其他功能甚至搞出新的BUG。
游戏引擎也是优化的一个重头戏,有些特别开发的引擎会进行针对性优化,而大部分通用引擎早在开发者使用之前就做好了,程序员们只能用预判的方式来猜测玩家的行为,至于能猜多准那就真的只有天知道了。
为了避免游戏进程被突然打断,开发者们通常会在玩家解锁一个有明确指向的内容之前锁定其他的游戏内容。然而问题是直到开发周期结束前这个工作都很难进行,但是每到这时候就意味着开发者的时间已经所剩无几了。
开发者们在这两分钟里能做的只有把重要的几个问题解决到,显而易见的是加载时间这个问题往往不是这个时候要解决的重点问题,为了赶发售的进度这一项优化往往要草草解决。
“发售一款游戏就像打开一扇泄洪闸,我们就像在这闸口上看洪流般的反馈涌来。”制作人兰德·米勒在他的2016年新作《仰冲异界》发售时如是说。
他在邮件里写到,有很多硬件原因导致的问题是他们在优化时没有预料到的,还有大量始料未及的反馈——他们当初根本没想到那些地方会出问题。
“我们在这一次决定在游戏一开始加载非常多的内容”他在邮件结尾补充道,“所以我们不得不将游戏内容分块并且紧急推送一个补丁来进行额外的优化。还有大量类似的工作,不得不陷入问题——推送的循环。”
但是这还是有些好处的,米勒和他的团队这无尽的优化和更新的循环里找出了基本上所有有问题的和低效率的模块。
“我们发现我们选择在加载一个世界的同时加载所有的动画影片,”米勒写道,“看起来解决它只要重新下载就可以了,试试这涉及到整个人物交互系统的重写。”动画部门发现有些问题可以通过缩小材质包的标准实现,可是这么操作却要对触发器处理。诸如此类的问题都是要一凿子一凿子慢慢雕刻的问题,不是一锤子抡过去就能解决的。
我还就此询问了其他两个游戏——一个是开放式游戏《精灵鼠传说》,另一个是奇幻类RPG《矮人》——的开发者。他们就缩短加载时间的问题上持相似的观点,认为缩短加载时间的一个前提条件就是开发者要对他们的游戏了如指掌。
这一点对于《矮人》的开发团队而言尤为重要因为他们近日决定将这一项优化贯穿在整个开发周期当中,这对于这个团队来说将会是一个不小的挑战。
正因为上述举措,《矮人》在缩短加载时间上的工作卓有成效。“精明的数据打包、最高效的内存分配、减少整体容量这些都是细致活,如果你选择呢在开发完再去做这些就会变得极其麻烦。”让·蒂森在邮件里写道,“我们在下个项目里引进的新系统保证会让所有人再仔细想想游戏开始时的加载时间到底意味着什么。”
但是到目前为止只有一小部分人可以做到在游戏开发周期就完成这项优化。只要游戏加载的速度没有和硬盘读写的速度一样快,对它的优化就不会停止。
对于威廉姆斯·阿姆斯特朗而言,加载条就和游戏里的BUG一样,只不过这个BUG不会使你的游戏崩溃,只会拖慢它的运行速度。这些BUG只会在游戏开发进程的最后出现。对他而言,在这个BUG解决之前,开发过程就不算结束。
ref
http://kotaku.com/why-games-still-have-bad-loading-times-1795548921