各位《银河破裂者》的玩家们! 我们经常在文章、更新说明以及与大家的其他互动中提到优化。这是编程的核心支柱之一。通常来说,让计算机执行某项任务并不困难,真正的挑战在于如何让计算机快速完成你想要的操作,同时避免占用100%的CPU、GPU或内存资源。《银河破裂者》包含了数千个这样的功能特性。确保所有功能都能和谐运行,往往比开发这些功能本身花费更多时间。在今天的文章中,我们想向大家展示,优化有多种形式,它绝不是事后才考虑的事情,而是开发过程中不可或缺的组成部分。
就像你努力优化自己的基地一样,我们也在不断争取每一点性能提升。如果要定义优化,我们会说它是在功能和资源利用之间寻找平衡的过程。你希望在保持预期功能的同时,降低某个功能的性能成本。其中一个简单的例子就是我们3D模型的制作方式。首先,我们的美术师会用非常复杂的几何图形雕刻模型。原始模型的多边形数量很容易达到数百万。如果我们想在游戏中使用这样的模型,GPU在一次显示几个模型后就会不堪重负,更不用说一大群这样的生物了。
游戏后期的典型攻击波规模大致如此,可能会稍小一些。要显示这么多敌人并非易事。 不过,由于《银河破裂者》仅提供固定高度的俯视视角,我们可以通过降低多边形数量来解决这一问题。在初始模型通过后,美术师会创建几何结构简化的低多边形模型。球体变得不那么圆润,棱角更加分明,腿部看起来像细棍。在25米的距离外(我们的摄像机高度),你不太可能注意到这些细节,但这能让GPU更轻松地处理模型。这一过程可将多边形数量从数百万减少到数千(比如9001这样的具体数值)。优化让我们能够以多种方式向你的基地派遣史诗级的敌人潮!


这两张图片展示了原始模型与游戏就绪模型之间的差异。我们的美术师雕刻的所有细节在这个过程中都没有丢失——它们通过法线贴图进行了复制。 我们用于生物优化的另一种方法从未出现在你的屏幕上,但对游戏的运行至关重要。《银河破裂者》中的地图相当大,到处都散布着许多自然形成的障碍物。如果我们希望敌方生物到达你的基地,游戏必须计算出不违反我们设定规则的路径。例如,大多数生物无法飞越墙壁和峡谷。此外,导航系统必须每秒刷新多次路径,以适应游戏世界的变化。道具可能会被摧毁,从而极大地改变最佳路径。这听起来已经是很多工作了——现在把这些工作乘以每一个生物,然后享受慢动作吧,因为电脑跟不上了。
这是一段2018年的视频,展示了生物寻路的最基础形式。生物必须仅使用可用网格并避开障碍物,以到达目标【基地】。有时生物可能会互相阻挡,这就需要它们寻找其他路径。需要计算的内容太多,而时间却如此有限。 为解决这一问题,我们决定将游戏世界划分为64x64米的区域。每个区域有两种状态:激活或未激活。如果区域未被【战争迷雾】覆盖或处于雷达覆盖范围内,我们就认为它处于“激活”状态。位于这些区域的敌人会进行完整的寻路模拟,并随时准备冲击你的墙壁。处于未激活区域的单位则处于“打包”状态——游戏知道它们应该在那里,但它们不参与游戏世界的模拟。当你靠近未激活区域时,我们会将单位“解包”,让它们能够积极参与游戏。这有点像下棋,棋盘被分成多个方格,棋子可以移动到任意方格,但你无需时刻计算所有可能性。你只需确定当前哪些棋子是相关的,并计算它们可能的移动(然后还是会不小心弄丢你的皇后——试试桑多梅日弃兵开局吧,它太强了)。正因为如此,你能释放大量的脑力资源,就像“打包”生物能节省大量CPU资源,让我们可以将其用在其他地方一样。
很难展示这种“打包”过程具体是什么样子,但在早期多人测试阶段我们能看到一些端倪——有时你会看到生物的空壳卡在动画里。它们没有碰撞箱,没有生命值,几乎什么都没有,只是单纯存在着。里格斯先生也可能会这样卡住! 今天我们想分享的最后一项优化与你在星球各处前哨站的经济系统有关。如果你曾经建造过一个拥有大量管道、工厂、发电站和防御建筑的基地,可能会注意到游戏速度会有所放缓。这是因为所有与经济相关系统的计算过于复杂,超过了更新游戏状态所分配的33毫秒时间。这是一个经过深思熟虑的选择——通过降低游戏节奏,我们让游戏玩法计算能够跟上渲染速度,而渲染速度通常要快好几倍(另一种选择是丢帧,所以我们选择了两害相权取其轻)。现在,试想一下,如果你有好几个这样的基地,散布在整个星球上,并且想要实时更新它们的状态。我们绝不可能在33毫秒内完成这一任务。
多人模式的加入让建造巨型基地变得更加轻松。如果要为你所有庞大的前哨站运行实时经济系统,我们可能得请欧洲核子研究中心、美国国家航空航天局以及其他类似的机构来帮忙计算。 我们考虑了多种优化方案,但都未能奏效。这些方案要么影响了功能的正常运作,要么提升性能的潜力有限。如果没有额外数月的开发时间,我们无法动态跟踪前哨站的状况。因此,我们不得不做出妥协,选择了趣味性而非真实性。当你离开前哨站前往新的行星地点时,游戏会对你基地的经济状况进行快照。基于此快照,我们会模拟一个简化版的前哨站运行情况。你的工厂会持续运作,并不断消耗其所需的资源矿床。一旦矿床耗尽,生产就会停止。此外,电力消耗也未被纳入考量。得益于这些简化处理,我们无需每帧都更新完整的经济系统。这已是一项彻底的解决方案,但这并非全部情况。
加拉提亚生物非常友好,它们会一直等到你回到基地才会来到你的家门口。 我们还决定在你离开前哨站时阻止敌人的攻击。你需要返回并击退攻击,或者置之不理并接受部分建筑被摧毁的结果。这也会迫使我们更频繁地更新前哨站的模拟系统,从而引发更多问题。这样一来,我们可以将模拟系统的范围限制在经济层面,并一次性消除一个潜在的痛点。事后看来,这是我们能做出的最佳折中方案。《银河破裂者》本身就已经足够复杂,无需再强迫玩家同时照管多个前哨站!
为了简化游戏流程,我们决定移除玩家不在时远程前哨站受到的攻击。根据玩家反馈,这是一个不错的决定。 像这样的优化案例还有很多。我们的每位程序员都能花上数小时来讲解他们所做的优化工作。仅2.0版本更新就要求他们重新审视几乎每一段代码,并使其适应在线游戏模式,这通常意味着需要进行大量的优化工作。我们希望通过这篇文章,让大家了解到优化绝不是事后才考虑的事情,而是软件开发中不可或缺的一部分。如果您想了解更多关于游戏开发的其他方面,欢迎在这里向我们提问。同时,记得在此处订阅我们的新闻通讯。EXOR Studios




换一换 

























