在多人联网对战游戏中逐渐风靡的「回滚式网络代码」究竟是何方神圣?

全文约 2300 字,阅读只需要 4 分钟。

最近一种名为「回滚式网络代码」的多人联机对战处理机制引发了越来越多的讨论*,本次我想结合过去传统的「延迟式网络代码」来详细谈谈这一项最新技术。为了方便理解,下文将会以一款 1P 和 2P 互相进行对战的格斗游戏为蓝本来进行讲解。

*越来越多的讨论:2021 年 6 月发售的《罪恶装备 斗争》将「回滚式网络代码」作为了游戏的一个重要卖点,经典格斗游戏《街头霸王 5》同样也采用了这种处理方式。

什么是「延迟式网络代码」?

一款游戏的数据运算流程,通常是基于画面的刷新频率,也就是我们常说的帧数来进行的。举个例子,如果是一款 60 帧(每秒刷新 60 次)的游戏,那么游戏运行时系统就会将 1/60 秒作为最小的时间单位循环进行以下的数据处理流程:

1P 输入操作指令

2P 输入操作指令

基于两名玩家输入的操作指令进行游戏内的判定

以判定产生的数据为基础渲染游戏画面

如果两名玩家是在同一台游戏主机上进行游玩,那么整个处理流程自然就会在这一台主机上完成。但当两名玩家进行联网对战时,1P 输入的操作指令和 2P 输入的操作指令就必须以两边各自的现实时间为基准通过互联网传输到彼此使用的游戏设备上才能进行运算。

因此为了让联网对战得以成立,两台游戏设备必须频繁地进行情报的传递和交换。在这种情况下,要想上文所提到的数据处理流程能够顺利进行,系统必须得掌握两位玩家各自输入的操作指令究竟是在游戏内的哪一个时间点发出的才行。然而哪怕能够将各玩家的输入指令和输入时机都转化为情报在游戏设备间互相传递,系统本身也无法判断接收到的操作指令究竟是在什么样的情况下输入的。

为了解决这个问题,游戏在通过网络传输玩家输入的操作指令时,通常还会附带 1/60 秒更新一次的游戏内时间情报。这样一来,两名玩家各自使用的游戏设备就能够「基于两名玩家输入的操作指令完成判定」了。

而这其实就是传统延迟式网络代码的基础处理逻辑。

如果游戏采用的是这种处理方式,那么双方在游戏过程中一旦产生网络延迟,1P 和 2P 各自使用的游戏设备在实际获取到对方输入的操作指令前,就将无法完成上文提到的数据处理流程。换句话说,就是游戏的数据处理循环将很大程度上受到网络延迟的影响*。

*网络延迟的影响:网络延迟越低,游戏就运行得越流畅,反之网络延迟越高,游戏的反应就越迟缓。因此网络延迟的波动将会大幅影响游戏的流畅度。

延迟式网络代码的处理逻辑示意图

尽管有这样的缺陷,但延迟式网络代码的使用门槛较低,且只要能够营造出类似局域网这样的低延迟网络环境,游戏就能够顺利进行。因此在网络对战刚刚开始普及的黎明时期,大量的游戏都采用的是这种处理方式。

那什么是「回滚式网络代码」呢?

回滚式网络代码的基础运算流程和延迟式网络代码并没有太大差别,都需要两台游戏设备互相传递玩家所输入的指令和具体的输入时机。但两者之间最大的区别在于,起用回滚式网络代码可以让两台游戏设备在完成数据处理流程时,不用等实际接收到对方玩家的输入情报之后再开始运算,也就是说能够「先斩后奏」地进行数据处理。

还是以一款 60 帧的游戏为例,游戏虽然每 1/60 秒就要进行一次数据处理,但并不是每一帧玩家都会输入操作指令。既然如此,在尚未接收到对方玩家操作指令的情况下,游戏是不是可以通过推测对手玩家当前的动作来完成数据处理呢?没错,回滚式网络代码的一大特征,就是能够依照「假想情况」来让两名玩家各自使用的游戏设备提前完成「基于两名玩家输入指令的判定」。举个例子,在尚不清楚 1P 玩家输入的攻击指令是否命中 2P 玩家,或是否被格挡的情况下,系统将会先行按照「攻击一定命中」的情况来完成数据处理。

由于不用再等对方玩家输入的指令抵达后再开始进行运算,所以起用回滚式网络代码的一大优势,就是能够一定程度地掩盖两名玩家间网络延迟所造成的影响。

倘若这种通过「先斩后奏」得出的假想运算结果与实际情况产生冲突,1P 和 2P 玩家彼此所看到的游戏画面就会出现差异,这很明显是行不通的。因此,当切实接收到对方玩家的输入指令后,系统首先得对「假想出来的处理结果」是否正确进行判定。只有运算结果与实际情况相符时才会进入到下一步流程,若运算结果与实际情况不符,就需要再度回到「先斩后奏」前的那个时间点,对此后的运算结果进行修正。换句话说,就是必须得进行「回滚处理」。

说是「对运算结果进行修正」,实际上在这个时间点两台游戏设备早就已经按照「先斩后奏」的假想情况得出了结果。因此想要修正错误的运算结果,唯一的办法就是像「视频倒带」一样让游戏内的时间倒流,但这样做无疑会对游玩体验造成很大影响,所以大部分游戏选择的处理手段都是仅仅只修正结果*。

*只修正结果:以格斗游戏为例,如果假想情况是「己方的攻击指令成立」,那么通过「先斩后奏」运算得到的结果就是对方玩家会被击飞,倘若后续的回滚处理判定「攻击其实并不成立(攻击被格挡)」,那么一下瞬间,原本被击飞的角色就会突然安然无恙地出现在地面上,并且做出格挡的姿势。

回滚式网络代码只修正结果时的处理逻辑示意图

综上所述,起用回滚式网络代码可以让游玩双方哪怕存在一定的网络延迟,也不容易出现画面卡顿、动作迟缓的情况,这毫无疑问是这种处理方式的最大优势。但另一方面,延迟的高低其实也会同步影响到回滚处理数据量的大小,因此并不可能通过这种方式完全消除网络延迟的影响。

值得一提的是,在最近推出的网络对战游戏中,为避免出现过多的回滚处理,一种根据网络延迟的高低来动态改变回滚判定频率,在双方玩家延迟较低的情况下优先起用延迟式网络代码的高度复合型处理方式也已经悄然诞生。

编译:Bluestoon

为您推荐

发表评论

邮箱地址不会被公开。 必填项已用*标注