遊戲 Lag 白皮書 › 同步設計
延遲補償過度 Excessive lag compensation
原因 ID sy-lagcomp-overreach · 主要負責 遊戲開發團隊(伺服器開發)
在含圖解與實驗的完整版中開啟卡片 →
以攻擊者為準回溯得太遠時,被打的一方明明已經躲好了還是會中彈。
為什麼 為了 ping 高的攻擊者,伺服器大幅回溯後判定 → 於是 在被打的人的畫面上,早已躲進掩體 → 畫面上 「躲在牆後還被打中」,ping 高的人占優勢
- 症狀
- 吃指令/回檔
- 因素
- 延遲
- 誰會遇到
- 只有我, 特定地區/電信業者
- 何時
- 做特定動作時
- 負責單位
- 主要負責 遊戲開發團隊(伺服器開發)
- 遊戲開發團隊要做的事
- 設定回溯上限(例:200~250ms),ping 比這更高的攻擊者只回溯到上限,其餘由攻擊者自己預留提前量。
- 圖表上
- 只有部分偏高 · 每次命中的回溯時間(依攻擊者 ping)
- 查看位置
- 在伺服器判定 log 中為每次命中記錄回溯時間、攻擊者 RTT、被打方進入掩體的伺服器時間。在開發版本把回溯後的判定框畫到畫面上(Source 引擎為 sv_showlagcompensation)
- 符合的跡象
- 「躲在牆後還被打中」回報中的命中集中在回溯時間長的攻擊者,且回溯時間沒有上限、隨攻擊者 ping 增加
- 不符合的跡象
- 回溯時間短的命中也出現牆後中彈時,是判定框或碰撞檢測的問題。被打方 ping 高時,是那個人的移動太晚抵達伺服器造成的
- 確認方式
- 需要遊戲伺服器/用戶端的 log 與指標
- 深入了解
- 回溯判定是「射擊者優先」。也有人提出例外做法:被打的一方在自己畫面上已經進入安全處時就不回溯,也就是「被打者優先」。
出處
- 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 會在畫面上顯示回溯後的判定框
相關原因
同一層:同步設計
同一症狀(吃指令/回檔)在其他層的原因
查看含圖解與實驗的完整版卡片