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

ゲームラグ白書 › 一部のユーザーだけに起きる問題

回線が重い人がほかの人の画面でまとめて動く Laggy player seen by others (bursty inputs)

原因ID pt-slow-burst · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 外部・外部

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

回線が悪い人の入力は、不規則にまとまってサーバーに届きます。サーバーがティックごとに受け取った分だけ適用すると、ほかの人の目にはそのキャラクターが一瞬止まってから一気に何歩も進んで見えます。

なぜ 回線が重い人の移動コマンドが、あるティックには0個、あるティックには2〜3個ずつ届く → すると サーバーが受け取ったティックに一度に適用するため、そのキャラクターの位置が階段状に変わる → 画面では ほかの人の画面でそのキャラクターだけが一瞬止まっては一気にまとめて移動。ほかは問題なし

症状
早送り, ワープ
要因
ジッター, パケットロス
誰に起きるか
特定のキャラだけおかしく見える, 特定の地域・ISP
いつ
常に, 移動中・マップ切り替え時
担当
主担当 ゲーム開発チーム・サーバー開発 · 副担当 外部・外部
ゲーム開発チームの対応
プレイヤーごとの入力バッファでコマンドを均等に分けて適用、入力のシーケンス番号を見て元の間隔どおりに適用、ほかの人の画面の補間バッファを増やすだけでは不十分(サーバーでの位置の記録自体が階段状になっているため)。
外部の対応
回線が重いユーザーに、有線接続、Wi-Fi・ルーターの点検を案内。
数値の目安
ジッターが80msなら、20ティック(50ms)のサーバーでティックあたりのコマンド数が0〜3個でばらつきます。
グラフでは
一部だけ高い · プレイヤーごとのティックあたり適用コマンド数、プレイヤーごとのジッター
確認箇所
サーバー側のパケットキャプチャで、報告されたユーザーが送ったパケットだけに絞り、ティック間隔(例:50ms)ごとに何個ずつ届いたかを数えてほかのユーザーと比較。サーバーログがあれば、プレイヤーごと・ティックごとに適用した移動コマンド数と入力のシーケンス番号を確認
該当する場合
報告されたユーザーのパケットだけがティックごとに0個と2〜3個を行き来してまとまって届き、そのユーザーのジッター・パケットロスが高く、ほかのユーザーのパケットは均等に届いている。そのユーザーが有線に切り替えると減る
該当しない場合
複数のキャラクターが一斉にまとめて動くなら、サーバーのティック遅延か見ている人側の回線。到着と適用が均等なのにそのキャラクターだけ飛んで見えるなら、見ている側の補間・表示の問題
確認手段
インフラのツールで確認(ゲームコード不要)
もっと詳しく
サーバー権威型の構成では、これは正常な動作です。回線が重い1人のラグは、ほかの人には「その人がおかしな動きをする姿」としてだけ見え、ほかの人の操作やモンスターの動きには影響しません。ただし、その人と直接やり取りすること(取引、パーティでのギミック、PvPの判定)は一緒に遅れます。

出典

  1. Peeking into VALORANT's Netcode Riot Games
    サーバーはプレイヤーごとの移動キューに届いた入力をティック順に入れ、空になれば予測で埋める。補正はそのプレイヤーにだけ見え、ほかの人にはなめらかに見える
  2. State Synchronization Gaffer On Games
    毎秒60回送ったパケットでも、あるフレームに2個、次のフレームに0個のようにまとまって届く
  3. Source SDK 2013: player.cpp Valve
    まとまって届いたコマンドをサーバーのティックに分けて処理(meter out)

あわせて読みたい原因

同じ層:一部のユーザーだけに起きる問題

同じ症状(早送り)を起こすほかの層の原因

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