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

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

ラグコンペンセーションのない判定 Server-now hit validation

原因ID sy-no-lagcomp · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 ゲーム開発チーム・クライアント開発

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

サーバーが「今のサーバー上の位置」だけで命中を判定すると、自分が見た画面と判定が食い違います。

なぜ 自分の画面の相手は約0.2秒前の位置(Ping 150ms、補間100msの場合) → すると サーバーは現在位置で判定するため、自分が狙った場所にはもういない → 画面では 確かに当てたのに外れる。動く対象には偏差撃ちが必要

症状
不発・ロールバック
要因
遅延
誰に起きるか
自分だけ
いつ
特定の操作をしたとき
担当
主担当 ゲーム開発チーム・サーバー開発 · 副担当 ゲーム開発チーム・クライアント開発
ゲーム開発チームの対応
サーバー:攻撃者が見ていた時点に巻き戻して判定(ラグコンペンセーション)、またはターゲット指定方式に変更。クライアント:攻撃時に自分が見ていた時点(補間中のサーバー時刻)も一緒に送る。
グラフでは
一部だけ高い · 動く対象への命中率(Ping帯別)
確認箇所
サーバーの判定ログに、攻撃時刻、攻撃者の画面上の対象位置(クライアントが送った値)、判定に使ったサーバー上の対象位置、攻撃者のRTTを一緒に記録。開発ビルドでサーバーが判定に使った位置をクライアント画面に重ねて描くと、すぐにわかる
該当する場合
外れた判定での2つの位置の差がおおよそ対象の速度 ×(攻撃者のRTT + 補間時間)で、Pingが高いほど動く対象の命中率だけが下がる
該当しない場合
止まっている対象にも外れるなら、ヒットボックス・衝突判定の問題。巻き戻しをしているのに食い違うなら、クライアントが補間時間をサーバーに誤って伝えていないかを確認
確認手段
ゲームサーバー・クライアントのログ・メトリクスが必要

出典

  1. Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization (Yahn W. Bernier, GDC 2001) Valve
    ラグコンペンセーションがないと、遅延の分だけ偏差撃ちが必要。サーバーが遅延と補間時間の分だけ巻き戻して判定するラグコンペンセーション
  2. Peeking into VALORANT's Netcode Riot Games
    サーバーが射撃の瞬間にプレイヤーが見ていたゲーム状態へ巻き戻して命中を判定、クライアントは見ていたシミュレーション時刻も一緒に送る
  3. Source SDK 2013: player_lagcompensation.cpp Valve
    Sourceエンジンの巻き戻し時間 = ネットワーク遅延 + 補間時間

あわせて読みたい原因

同じ層:同期設計

同じ症状(不発・ロールバック)を起こすほかの層の原因

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