遊戲 Lag 白皮書 › 同步設計
Lockstep 中等待最慢的玩家 Lockstep waits for the slowest peer
原因 ID sy-lockstep · 主要負責 遊戲開發團隊(伺服器開發) · 協同 遊戲開發團隊(用戶端開發)
在含圖解與實驗的完整版中開啟卡片 →
在所有人一起計算同一回合的架構中,只要一個人的輸入晚到,所有人都要等。
為什麼 每回合要收齊所有玩家的輸入才能計算 → 於是 某個人的輸入因抖動或封包遺失而晚到 → 畫面上 所有人同時頓一下,嚴重時跳出「等待玩家中」視窗
- 症狀
- 定格, 卡頓, 輸入延遲
- 因素
- 抖動, 遺失, 停滯
- 誰會遇到
- 特定地點/頻道
- 何時
- 偶爾隨機發生
- 負責單位
- 主要負責 遊戲開發團隊(伺服器開發) · 協同 遊戲開發團隊(用戶端開發)
- 遊戲開發團隊要做的事
- 伺服器:依 ping 自動調整輸入延遲,只讓落後的人暫時脫隊,其他人不必等待、繼續進行。用戶端:套用設定好的輸入延遲;若是沒有中繼伺服器的 P2P,輸入延遲的調整與落後者的處理也由主機用戶端負責。
- 數值參考
- 輸入延遲設得比「輸入抵達對方的時間 + 抖動」短時,停頓會變頻繁。抵達時間在雙方直接傳送時約為 ping 的一半,經過中繼伺服器時約為兩人 ping 相加的一半。
- 圖表上
- 偶爾隨機飆高 · 回合等待時間、各玩家的輸入抵達延遲
- 查看位置
- 每回合記錄各玩家的輸入抵達時間與回合停下等待的時間,查看停住的回合在等誰的輸入。有中繼伺服器的話,也可以從伺服器端封包擷取中各玩家輸入封包的抵達間隔來看
- 符合的跡象
- 每次停住的回合,都是同一個人的輸入比輸入延遲還晚抵達,且當時那個人的抖動、封包遺失飆高
- 不符合的跡象
- 輸入都準時到卻仍停住時,是最慢那台電腦的計算時間或伺服器處理問題。沒有停住、只有兩邊畫面的結果不同時,是計算結果不一致(desync),要查指令同步的路徑計算不一致
- 確認方式
- 需要遊戲伺服器/用戶端的 log 與指標
出處
- Deterministic Lockstep Gaffer On Games
第 n 畫格的輸入要全部到齊才能計算,所以晚到就得等。吸收抖動的播放延遲緩衝太小時會頓一下 - 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond Game Developer
把指令排程到兩回合後執行,並依最慢的電腦與 ping 調整回合長度(Speed Control) - A Survey and Taxonomy of Latency Compensation Techniques for Network Computer Games (ACM Computing Surveys, 2022) ACM
把輸入延遲(incoming delay)設為「A→伺服器 + 伺服器→B」的延遲,讓所有人在同一瞬間套用
相關原因
同一層:同步設計
同一症狀(定格)在其他層的原因
查看含圖解與實驗的完整版卡片