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

ゲームラグ白書 › 同期設計

ロールバックネットコードの予測失敗 Rollback misprediction

原因ID sy-rollback · 主担当 ゲーム開発チーム・クライアント開発

図と実験のあるメインページでこのカードを開く →

相手の入力を予測して先に見せ、外れたら巻き戻して計算し直します。Pingが大きいほど巻き戻す幅が大きくなります。

なぜ 相手が入力を変える(予測と違う) → すると 実際の入力がPingの半分だけ遅れて届き、その分を巻き戻して再計算 → 画面では 相手の動きが数フレーム飛んだり、急に変わったりする

症状
ワープ
要因
遅延, ジッター
誰に起きるか
自分だけ
いつ
特定の操作をしたとき, ときどきランダムに
担当
主担当 ゲーム開発チーム・クライアント開発
ゲーム開発チームの対応
入力遅延を1〜3フレーム組み合わせて巻き戻し幅を減らす、巻き戻しの上限を設ける。
数値の目安
Ping 100ms(片道50ms)なら、60fpsで約3フレーム巻き戻します。入力遅延を2フレーム設けると1フレームに減ります。
グラフでは
不定期なスパイク · 巻き戻したフレーム数、RTT(Ping)
確認箇所
クライアントが巻き戻しのたびに、巻き戻したフレーム数、その時のRTT、入力遅延の設定、巻き戻し・再計算にかかった時間を記録
該当する場合
相手の動きが飛んだという瞬間に巻き戻したフレーム数が大きく、平均の巻き戻し幅がおおよそ(片道遅延 − 入力遅延)÷ フレーム時間で、Pingが大きいほど大きくなる
該当しない場合
巻き戻し幅が小さいのにカクつきが起きるなら、再計算が1フレームの時間を超える性能の問題。巻き戻した後も2つの画面の結果が食い違い続けるなら計算結果のずれ(desync)
確認手段
ゲームサーバー・クライアントのログ・メトリクスが必要

出典

  1. GGPO Rollback Networking SDK GGPO
    相手の入力を予測して先に進め、実際の入力が違えば、ずれた時点から現在までを計算し直す
  2. 8 Frames in 16ms: Rollback Networking in 'Mortal Kombat' and 'Injustice 2' GDC
    ロールバックでロックステップのローカル入力遅延をなくし、16ms以内に最大8フレームを巻き戻して再計算

あわせて読みたい原因

同じ層:同期設計

同じ症状(ワープ)を起こすほかの層の原因

図と実験のあるメインページでこのカードを見る