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

遊戲 Lag 白皮書 › 同步設計

Lockstep 中等待最慢的玩家 Lockstep waits for the slowest peer

原因 ID sy-lockstep · 主要負責 遊戲開發團隊(伺服器開發) · 協同 遊戲開發團隊(用戶端開發)

在含圖解與實驗的完整版中開啟卡片 →

在所有人一起計算同一回合的架構中,只要一個人的輸入晚到,所有人都要等。

為什麼 每回合要收齊所有玩家的輸入才能計算 → 於是 某個人的輸入因抖動或封包遺失而晚到 → 畫面上 所有人同時頓一下,嚴重時跳出「等待玩家中」視窗

症狀
定格, 卡頓, 輸入延遲
因素
抖動, 遺失, 停滯
誰會遇到
特定地點/頻道
何時
偶爾隨機發生
負責單位
主要負責 遊戲開發團隊(伺服器開發) · 協同 遊戲開發團隊(用戶端開發)
遊戲開發團隊要做的事
伺服器:依 ping 自動調整輸入延遲,只讓落後的人暫時脫隊,其他人不必等待、繼續進行。用戶端:套用設定好的輸入延遲;若是沒有中繼伺服器的 P2P,輸入延遲的調整與落後者的處理也由主機用戶端負責。
數值參考
輸入延遲設得比「輸入抵達對方的時間 + 抖動」短時,停頓會變頻繁。抵達時間在雙方直接傳送時約為 ping 的一半,經過中繼伺服器時約為兩人 ping 相加的一半。
圖表上
偶爾隨機飆高 · 回合等待時間、各玩家的輸入抵達延遲
查看位置
每回合記錄各玩家的輸入抵達時間與回合停下等待的時間,查看停住的回合在等誰的輸入。有中繼伺服器的話,也可以從伺服器端封包擷取中各玩家輸入封包的抵達間隔來看
符合的跡象
每次停住的回合,都是同一個人的輸入比輸入延遲還晚抵達,且當時那個人的抖動、封包遺失飆高
不符合的跡象
輸入都準時到卻仍停住時,是最慢那台電腦的計算時間或伺服器處理問題。沒有停住、只有兩邊畫面的結果不同時,是計算結果不一致(desync),要查指令同步的路徑計算不一致
確認方式
需要遊戲伺服器/用戶端的 log 與指標

出處

  1. Deterministic Lockstep Gaffer On Games
    第 n 畫格的輸入要全部到齊才能計算,所以晚到就得等。吸收抖動的播放延遲緩衝太小時會頓一下
  2. 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond Game Developer
    把指令排程到兩回合後執行,並依最慢的電腦與 ping 調整回合長度(Speed Control)
  3. A Survey and Taxonomy of Latency Compensation Techniques for Network Computer Games (ACM Computing Surveys, 2022) ACM
    把輸入延遲(incoming delay)設為「A→伺服器 + 伺服器→B」的延遲,讓所有人在同一瞬間套用

相關原因

同一層:同步設計

同一症狀(定格)在其他層的原因

查看含圖解與實驗的完整版卡片