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

Sách trắng lag game › Thiết kế đồng bộ

Lockstep phải chờ người chơi chậm nhất Lockstep waits for the slowest peer

ID nguyên nhân sy-lockstep · Phụ trách chính Phát triển server (Đội phát triển game) · Phối hợp Phát triển client (Đội phát triển game)

Mở thẻ gốc có hình minh họa và thí nghiệm →

Trong cấu trúc mọi người cùng tính chung một lượt, chỉ cần input của một người đến muộn là tất cả phải chờ.

Vì sao Mỗi lượt phải gom đủ input của mọi người chơi mới tính được → Dẫn đến Input của một người tới muộn do jitter hoặc mất gói → Trên màn hình Mọi người cùng khựng một lúc, nặng thì hiện cửa sổ “Đang chờ người chơi”

Triệu chứng
Đứng hình, Giật khựng, Trễ thao tác
Yếu tố
Jitter, Mất gói, Ngưng trệ
Ai gặp phải
Một địa điểm hoặc kênh
Khi nào
Thỉnh thoảng bất chợt
Phụ trách
Phụ trách chính Phát triển server (Đội phát triển game) · Phối hợp Phát triển client (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Server: tự động điều chỉnh độ trễ input theo ping, tạm tách riêng người bị chậm để những người còn lại tiếp tục mà không phải chờ. Client: áp dụng độ trễ input đã định; nếu là P2P không có server trung chuyển thì client host đảm nhận cả việc điều chỉnh độ trễ input và xử lý người bị chậm.
Con số tham khảo
Nếu đặt độ trễ input ngắn hơn “thời gian input tới đối phương + jitter”, hiện tượng đứng hình sẽ xảy ra thường xuyên hơn. Thời gian tới là khoảng một nửa ping nếu hai bên gửi trực tiếp cho nhau, và khoảng một nửa tổng ping của hai người nếu đi qua server trung chuyển.
Trên đồ thị
Thỉnh thoảng vọt lên bất chợt · Thời gian chờ lượt, độ trễ input tới theo người chơi
Chỗ cần xem
Ghi cho mỗi lượt thời điểm input của từng người chơi tới và thời gian lượt bị dừng để chờ, rồi xem ở các lượt bị dừng đang chờ input của ai. Nếu có server trung chuyển thì cũng xem được qua khoảng cách giữa các gói input của từng người chơi trong bản bắt gói phía server
Đúng nếu
ở mỗi lượt bị dừng, input của cùng một người tới muộn hơn độ trễ input, và vào lúc đó jitter hoặc mất gói của người đó vọt lên
Loại trừ nếu
input đều tới đúng lúc mà vẫn dừng → vấn đề thời gian tính toán của PC chậm nhất hoặc xử lý trên server. Không dừng mà chỉ kết quả trên hai màn hình khác nhau → kết quả tính toán bị lệch (desync), xem tính toán đường đi không khớp khi đồng bộ lệnh
Cách kiểm tra
Cần log và chỉ số của server, client game

Nguồn

  1. Deterministic Lockstep Gaffer On Games
    Phải có đủ input của khung hình n mới tính được, nên input tới muộn thì phải chờ. Bộ đệm trễ phát lại dùng để hấp thụ jitter mà nhỏ thì sẽ bị khựng
  2. 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond Game Developer
    Đặt lịch thực thi lệnh sau hai lượt, và điều chỉnh độ dài lượt theo máy tính chậm nhất và ping (Speed Control)
  3. A Survey and Taxonomy of Latency Compensation Techniques for Network Computer Games (ACM Computing Surveys, 2022) ACM
    Đặt độ trễ input (incoming delay) bằng độ trễ “A→server + server→B” để mọi người áp dụng cùng một khoảnh khắc

Nguyên nhân nên xem cùng

Cùng tầng: Thiết kế đồng bộ

Nguyên nhân ở tầng khác gây cùng triệu chứng (Đứng hình)

Xem thẻ gốc có hình minh họa và thí nghiệm