한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

游戏卡顿白皮书 › 同步设计

回滚网络代码预测失败 Rollback misprediction

原因 ID sy-rollback · 主责 研发团队·客户端开发

在含图示和实验的完整版中打开此卡片 →

先预测对手的输入并显示出来,猜错了就回滚重新计算。ping 越高,回滚的幅度越大。

起因 对手改变了输入(与预测不同) → 结果 实际输入晚到约半个 ping,就要回滚这么长时间重新计算 → 画面表现 对手的动作跳过几帧或突然改变

症状
瞬移
因素
延迟, 抖动
谁会遇到
只有我
何时出现
做特定操作时, 偶尔随机
负责方
主责 研发团队·客户端开发
研发团队要做的事
混入 1~3 帧输入延迟以减小回滚幅度,设置回滚上限。
数值参考
ping 100 ms(单向 50 ms)时,60 FPS 下约回滚 3 帧。设置 2 帧输入延迟后减少到 1 帧。
监控图上
偶发随机尖峰 · 回滚帧数,RTT(ping)
查看位置
客户端在每次回滚时记录回滚的帧数、当时的 RTT、输入延迟设置、回滚和重新计算的耗时
确认依据
反馈对手动作跳变的时刻回滚帧数大,平均回滚幅度约为(单向延迟 − 输入延迟)÷ 帧时长,ping 越高越大
排除依据
回滚幅度很小却出现一卡一卡,是重新计算超过一帧时长的性能问题。回滚之后两边画面的结果仍然不同,是计算结果不一致(desync)
确认手段
需要游戏服务器/客户端的日志和指标

出处

  1. GGPO Rollback Networking SDK GGPO
    预测对手输入先行推进,实际输入不同时,从出现偏差的时间点到当前重新计算
  2. 8 Frames in 16ms: Rollback Networking in 'Mortal Kombat' and 'Injustice 2' GDC
    用回滚消除帧同步的本地输入延迟,在 16 ms 内最多回滚 8 帧并重新计算

相关原因

同一层:同步设计

其他层中同样导致“瞬移”的原因

查看含图示和实验的原卡片