ゲームラグ白書 › 同期設計
過剰なラグコンペンセーション Excessive lag compensation
原因ID sy-lagcomp-overreach · 主担当 ゲーム開発チーム・サーバー開発
図と実験のあるメインページでこのカードを開く →
攻撃者を基準に巻き戻しすぎると、撃たれる側はもう隠れたのに当たります。
なぜ Pingが高い攻撃者のために、サーバーが大きく巻き戻して判定 → すると 撃たれる側の画面では、すでに遮蔽物に隠れた後 → 画面では 「壁の後ろで撃たれた」、Pingが高い人が有利
- 症状
- 不発・ロールバック
- 要因
- 遅延
- 誰に起きるか
- 自分だけ, 特定の地域・ISP
- いつ
- 特定の操作をしたとき
- 担当
- 主担当 ゲーム開発チーム・サーバー開発
- ゲーム開発チームの対応
- 巻き戻しの上限を設ける(例:200〜250ms)、それよりPingが高い攻撃者は上限まで巻き戻し、残りは自分で偏差撃ちさせる。
- グラフでは
- 一部だけ高い · 命中ごとの巻き戻し時間(攻撃者のPing別)
- 確認箇所
- サーバーの判定ログに、命中ごとの巻き戻し時間、攻撃者のRTT、撃たれる側が遮蔽物に入ったサーバー時刻を記録。開発ビルドで巻き戻したヒットボックスを画面に描いてみる(Sourceエンジンではsv_showlagcompensation)
- 該当する場合
- 「壁の後ろで撃たれた」という報告の命中が巻き戻し時間の長い攻撃者に集中し、巻き戻し時間が上限なく攻撃者のPingに合わせて延びている
- 該当しない場合
- 巻き戻し時間が短い命中でも壁の後ろでの被弾が起きるなら、ヒットボックス・衝突判定の問題。撃たれる側のPingが高いなら、その人の移動がサーバーに遅れて届いたために起きたこと
- 確認手段
- ゲームサーバー・クライアントのログ・メトリクスが必要
- もっと詳しく
- 巻き戻しによる判定は「撃った側優先」です。撃たれる側が自分の画面ですでに安全な場所に入っていたなら巻き戻さない、「撃たれる側優先」の例外も提案されています。
出典
- Peeking into VALORANT's Netcode Riot Games
巻き戻しに上限がないと、遅延500msの人が遮蔽物に隠れた0.5秒後の相手にも当てられるため、上限を設ける - A Survey and Taxonomy of Latency Compensation Techniques for Network Computer Games (ACM Computing Surveys, 2022) ACM
「角の向こうで撃たれる(shot around the corner)」現象、商用FPSの巻き戻し上限、撃たれる側が安全なら巻き戻さない手法の提案 - Source SDK 2013: player_lagcompensation.cpp Valve
Sourceエンジンの巻き戻し上限sv_maxunlagはデフォルト1秒(最大1秒)、sv_showlagcompensationは巻き戻したヒットボックスを画面に表示
あわせて読みたい原因
同じ層:同期設計
同じ症状(不発・ロールバック)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る