了解Edgegap的工作原理

了解Edgegap的工作原理

回滚型网络代码

回滚网络代码(Rollback netcode)能够预测远程玩家的动作,立即进行前向模拟,并在收到其实际输入时倒带并重新播放模拟。本地输入绝不需要等待网络,因此在较高延迟下游戏依然能保持即时响应。其代价是,当预测错误时,修正过程会变得肉眼可见。

又称

回滚

由

由

由

菲利普·科特

菲利普·科特

菲利普·科特

,

首席技术官

首席技术官

首席技术官

已发布

已发布

已发布

回滚型网络代码是如何工作的?逐帧解析

在网络联机中,另一位玩家的输入总是会延迟到达。回滚技术的应对方式是不进行等待。在每一帧中,游戏都会:

  1. 立即运行您的输入,在下一帧进行,就像在单机离线状态下一样。

  2. 预测另一位玩家的输入,通常是重复他们上一次的输入。在每秒 60 帧的速度下,一帧大约持续 16.7 毫秒,而玩家改变按键的频率要低得多,因此这种预测通常是正确的。

  3. 保存过去几帧的游戏状态。

  4. 当真实输入到达时进行修正。如果真实输入与预测不符,游戏会恢复该输入所属的帧,应用该输入,并重新模拟自该帧以来的每一帧,然后再渲染下一帧。

玩家会将步骤 4 视为一种修正:例如一个攻击动作在出现时就已经进行了几帧,或者一个角色瞬间移动到某个位置。这并不是延迟补偿,延迟补偿是服务器倒退位置仅用于检测射击是否击中。

每次修正的幅度取决于一个数值:输入延迟到达的时间有多长。

回滚型与延迟型网络代码:回滚能隐藏多少延迟?

基于延迟的网络代码会保留每个输入,直到同一帧的远程输入到达。两个屏幕始终保持一致,不需要进行任何修正,但控制会出现延迟,而且当比赛中途延迟发生变化时,每个动作的时机也会随之改变。

回滚网络代码将控制保持在离线时的时机,并将成本转移到修正中,而延迟决定了修正的幅度。延迟 100 毫秒的输入在 60 fps 下大约属于六帧前,因此对手的动作会在六帧后显现。在 30 毫秒时,则是两帧,玩家通常根本不会注意到。回滚隐藏了延迟。它并没有消除延迟,延迟越大,显现得就越多。

大多数市面上的游戏两者都使用:一个较小的固定输入延迟吸收了部分延迟,回滚覆盖其余部分,并且有一个上限限制了预测运行的超前程度。NetherRealm 为《真人快打 X》和《不义联盟 2》推出的回滚更新保留了三帧的输入延迟,其引擎设计为在一个 16 毫秒的帧内最多可重新模拟八帧(Michael Stallone,GDC 2018)。超过该上限后,额外的延迟通常会变成更多的输入延迟或暂停,而不是更大的修正。

开发回滚型网络代码(Rollback Netcode)需要付出什么代价?

玩家获得了响应灵敏 clonal 的控制体验。而开发者则需要在三个方面为此付出代价:

  • CPU。 回滚需要在单帧的时间预算内重新运行若干帧的游戏逻辑。根据同一场演讲,NetherRealm 的首次实现中,在 16.7 毫秒的预算下,每帧大约需要 30 毫秒,而最终将其交付大约花费了七到八个人/年的时间。

  • 保存和恢复状态。 每一帧中可能发生变化的所有内容,其快照和恢复的成本都必须非常低。粒子和声音需要单独处理,否则它们会在每次回退时重复播放。

  • 确定性(仅传输输入时)。 在由 GGPO 库推广的经典对等网络(peer-to-peer)设计中,每台机器都根据共享的输入运行完整的模拟,因此两者必须计算出完全相同的结果。任何差异都会导致不同步。

这就是为什么回滚机制首先在格斗游戏中流行起来:两名玩家、较小的游戏状态以及固定的 60 fps。每增加一名玩家,就多了一个可能被预测错误的输入,而且更大的状态在保存和重新模拟时会消耗更多成本。

回滚型网络代码是否需要点对点连接?

不。GGPO 风格的回滚是在对等网络连接上发展起来的,在这些连接中,玩家直接向对方发送输入。同样的循环也适用于以专用服务器作为唯一事实来源的情况:任何主机都无法退出或篡改比赛,并且客户端会向服务器的状态进行纠正,而不仅仅是向彼此的输入进行纠正。

《以太之敌 2》(Rivals of Aether 2)就是这样构建的。它在专用服务器上运行 SnapNet 回滚,并且 SnapNet “在不需要严格确定性的情况下重新模拟整个游戏状态”(《以太之敌 2 拆解分析》,2024 年 11 月)。发送状态以及输入放宽了第 3 部分的要求。

服务器还会改变路由,而直接路由并不总是更短。在 2020 年 Edgegap 对一款 1v1 格斗游戏 122,000 场对等网络比赛的分析中,将每场比赛通过两名玩家之间最佳可用位置的服务器进行路由,使得 70% 的比赛的平均往返时间降低了 23%(《1v1 报告》)。延迟越少意味着需要回滚的帧越少,因此第 2 部分的修正量也随之减少。

来自我们的赞助商(其实就是我们自己!)的寄语

大多数延迟来自距离,而非代码。Edgegap 的边缘云是一个分布式网络,按需提供高达 615+ 个可用位置,因此每场比赛都能在最适合玩家的可用位置运行。对直播工作室流量的独立重放测试表明,与公共云相比,平均往返时间减少了 58%。

常见问题

回滚网络代码(rollback netcode)只适用于格斗游戏吗?

回滚型网络代码(rollback netcode)比延迟型网络代码(delay-based netcode)更好吗?

我可以在 Unity、Unreal 或 Godot 中使用回滚网络代码吗?

回滚代码会漏掉输入指令吗?

Get your Game Online Easily & in Minutes

立即开始集成!

轻松在线游戏
且在几分钟内