龙空技术网

《绝地求生》开发者日记 公布改善服务器性能做出的努力和成果

特玩游戏网 191

前言:

当前小伙伴们对“netflush”大约比较看重,你们都想要知道一些“netflush”的相关资讯。那么小编同时在网络上网罗了一些关于“netflush””的相关文章,希望看官们能喜欢,大家快快来了解一下吧!

以下为PUBG官博发布公告:

今天我们要在本次开发者日记和大家分享目前为止为了改善服务器性能做出的努力和成果。

估计很多玩家们都非常了解服务器性能的重要性。 PUBG使用的虚幻引擎是客户端-服务器模式为基础的引擎,因此所有的客户端需要通过服务器更新每个Actor的状态信息。

※ actor是虚幻引擎中非常重要的概念,是能在游戏Level中布置的大多物体,包括角色,建筑,背景,玩家视角镜头等。

服务器性能通常通过服务器的FPS(每秒帧数)检测。 如果服务器的性能上升的话,每帧的时间会减少,按照这个时间的减少,服务器的响应时间会减少。

服务器响应时间也可以描述为‘网络延迟’。如果服务器的响应时间减少(或者网络延迟减少) 的话,玩家们可以体验到更加顺畅的游戏环境。因为服务器响应越快,向其他人显示我的行动/动作所需的时间就越少。举个例子,玩家们可以更快看到我发射子弹的动作和效果。如果我们想要减少我们通常所知的‘非同步’现象,我们需要减少服务器响应时间。

第14轮更新之前的网络流程结构

在第14轮更新之前,虚幻引擎在服务器处理网络的方式如下:

我们先来解释一下上面的网络流程。

在‘Net Dispatch’阶段,服务器会处理从客户端收到的信息报。此阶段会处理枪械的发射,角色移动等内容。在此阶段中处理的许多内容会按照效率和适应性,以一种形式(RPC或Relication)传达给其他客户端。此后,服务器所需的游戏逻辑处理(例如,物理模拟)会在“Simulate & Render ”阶段中完成,处理结果会通过“Net Flush” 传送给所有的客户端。

上述的流程结构会让“Net Dispatch”阶段处理的RPC进入Buffer 队列而不会直接传送。进入“Net Flush”阶段时,所有的现有Buffer保存内容会传送给所有的客户端,并会 刷新Buffer。

在这种结构中,RPC 传递到“Net Flush”之前必须通过“Simulate & Render”阶段,从而导致延迟。我们预测虚幻引擎的结构是为了减少传送给UDP的数据包数量。因为数据包的数量越少,网络的使用效率会越提高

新的网络流程结构和改善内容

但我们内部认为减少网络延迟比减少数据包的数量要重要,因而在第14轮更新更改了处理流程,我们如下图 在“Simulate & Render”之前添加了叫“Net Send Flush”的新阶段。

在第14轮更新添加的“Net Send Flush”阶段,系统会传送Buffer内保存的所有UDP数据,并会 刷新

。通过这个新流程,我们不再需要“Simulate & Render”所需的时间,从而减少了之前发生的延迟时间。“Net Send Flush”里系统会处理之前进入队列的所有数据

这流程上的更改可以让游戏通过两次更新网络数据, 因此从14轮更新开始游戏提高的网络更新率为2倍。(部分玩家猜测的是服务器帧率的提高,然而,我们实际提高的是网络更新率。处理服务器帧数的过程中可以追加传送服务器更新数据,所以玩家们可以体验到60HZ了)

更改的结果可以在Youtube主播Battle(non)sense的第14轮更新网络代码分析视频中找到。

通过以下分析图片我们可以确认40名玩家生存时,Gunfire(开火)时发生的平均延迟从94.5减少为77msec(较少了18%)

第19轮更新之前的数据分析结果和新假设

19轮更新之前的2018年6月25日,在90名生存的情况下检测的游戏数据结果如下:

“Net Flush”阶段需要的时间为43.2msec,是整个帧数时间的 41%。这时间的相当部分是为了复制(Replication) 各个 actor至客户端,系统‘序列化(Serialize)’的时间。

※ 序列化(Serialize)是翻译一段数据并记录到内存的一种过程,这可以让Actor的状态通过网络传送给客户端

当我们根据上述分析结果搜索优化方法时,我们想到“如果我们能够减少复制的“Actor(尤其是Character)”的数量,那么总Net Flush时间也会减少很多”

因为《绝地求生》比使用虚幻设计服务器的游戏,同时玩游戏的玩家人数多,因此Actor的数量必然要高得多。Actor的的大数据量是一个问题,但Actor的数量是更大的问题。 当我们苦恼减少Actor数量的方案时,想到了低频率复制远距离角色的方法。因为这方法会只会给远距离的角色带来一些变化,所以不悔影响到游戏的玩法,并切会减少大量的序列化Actor数量,从而减少Net Flush的消耗时间。

开发过程:复制交错系统(Replication Interleaving)

从上述想法出发,我们得出结论来实现一个系统叫‘复制交叉’系统,因为该系统会根据客户端和Actor距离,合适的频率下跳过复制要求。首先,我们强制性分开了Actor被复制的部分,并降低了远处角色的复制频率。 然后我们分析了问题的类型和视觉变化的类型。

测试后,我们解决了降低频率时发生的问题,并结论到降低频率至之前复制频率的4分之1也不会很影响到游戏体验。

完成的复制交错系统实现内容如下:

· 根据距离决定在多少帧数之间跳过多少个复制

·可以设置为3个步骤:步骤1跳过1帧,步骤2跳过2帧,步骤3跳过3帧。

在实施该系统后,QA团队测试了该系统,以便为每个步骤找到合适的距离值。由于测试结果显示跳过3帧时, 角色动作会出现晃动的现象,因此我们决定不使用步骤3。每个步骤的的使用数值如下:

·步骤1:离玩家70米以上的角色跳过1帧

·步骤2:离玩家400米以上的角色跳过2帧

·(注意:这是目前反应到游戏的内容,此后也许会变更具体的数据,以改善服务器性能及角色动作的流畅度 )

改善结果

新系统更新后,服务器性能提高了20%。在下图为当85个玩家还活着时的NA服务器的帧率数据检测结果。通过更新,服务器帧率从18.5增加到22.9,增长了22%。其他地区的平均帧率增幅也超过20%

更令人惊讶的是响应时间的变化。

在上表中,你可以看到,当85名玩家还活着时,开火(Gunfire)的平均延迟时间下降了58%,从149.4毫秒下降到61.6毫秒。该结果表明非同步的问题已经改善了很多。

除了复制交错之外,通过其他改进,当超过80个玩家还活着时,服务器帧率增加了20%,网络延迟减少了50%。

卷尾语

自PUBG推出以来,我们已经在改进服务器FPS方面做了很多努力。除改善软件外,还对硬件进行了改进。然而,在第19轮更新之前,过去几个月的更新中没有包含到玩家们可以明确的体验到的游戏环境改善内容

在绝地求生,百日行动期间,我们明确优先考虑服务器性能改进,并正在研究和试验各种方法。

为了实现单个功能,我们必须完成初步研究并且在实现该功能之后,需要大量的分析,验证和测试过程。因为每个问题都需要不断地投入精力和时间,很难在短时间内解决。新功能的错误实现可能会导致更大的问题。因此,我们必须尽可能谨慎地实施和应用新功能。

进行上述改善内容的更新后,我们现在正处于优化过程中的““Net Dispatch”阶段。根据我们的分析,大部分时间都用于角色移动处理,并且已经确认了优化这部分的可能性。角色的移动对PUBG游戏的影响很大。因此,此任务需要大量注意,以确保此优化不会以异常方式影响角色的移动。

我们正在尝试一系列的优化方案,如果这些想法通过测试的话,我们预计“Net Dispatch”所需的时间将从当前的41.8毫秒下降50%以上。但新的方案的稳定工作预计会需要一个多月,我们将尽最大努力快速开发和完成。

目前的目标是始终将服务器帧率从游戏的开始到结束保持在30。我们将坚持不懈地努力实现这一目标,并提供更好的 战术竞技体验。

标签: #netflush