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

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

Tính toán đường đi không khớp khi đồng bộ lệnh Command sync with divergent pathing

ID nguyên nhân sy-path-mismatch · 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 →

Nếu hai bên chỉ trao đổi “đi tới đây” còn đường đi thì mỗi bên tự tính, chỉ cần tính lệch một chút là nhân vật hay quái sẽ đi theo đường khác rồi bị kéo về chỗ cũ.

Vì sao Khi click để di chuyển hoặc khi quái đuổi theo, chỉ gửi điểm đến còn đường đi thì client tự tính riêng → Dẫn đến Do khác biệt dữ liệu địa hình, va chạm với nhân vật khác, khác thứ tự tính toán mà đi theo đường khác với server → Trên màn hình Quái đi xuyên tường rồi bị dời đi chỗ khác trong nháy mắt, nhân vật di chuyển theo click đổi hướng như đang trượt

Triệu chứng
Dịch chuyển tức thời, Kéo ngược
Yếu tố
Độ trễ
Ai gặp phải
Một địa điểm hoặc kênh, Chỉ mình tôi
Khi nào
Khi di chuyển hoặc chuyển bản đồ
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: gửi kèm cả các điểm trung gian (waypoint) của đường đi, đồng bộ vị trí định kỳ. Client: cho sai lệch hội tụ dần một cách mượt mà, dùng cùng dữ liệu địa hình với server.
Trên đồ thị
Thỉnh thoảng vọt lên bất chợt · Số lần và khoảng cách hiệu chỉnh vị trí theo đối tượng
Chỗ cần xem
Ghi lại chênh lệch giữa vị trí server gửi và vị trí client tính cho từng đối tượng, rồi chấm tọa độ xảy ra hiệu chỉnh lên bản đồ. Tóm tắt kết quả đường đi hoặc vị trí của hai bên bằng checksum rồi so sánh định kỳ thì tìm được thời điểm bắt đầu lệch
Đúng nếu
hiệu chỉnh dồn vào một địa hình cụ thể (bậc cửa, lối đi hẹp, dốc) hoặc nơi đông người, và lặp lại ở cùng vị trí ngay cả với người chơi có chỉ số mạng bình thường
Loại trừ nếu
chỉ hiệu chỉnh vào lúc mất gói hoặc jitter vọt lên, bất kể vị trí → vấn đề đường truyền. Một con quái cùng bị nhảy trên màn hình của nhiều người → xem quyền điều khiển quái có nằm ở client chậm không
Cách kiểm tra
Cần log và chỉ số của server, client game
Tìm hiểu thêm
Cách này là một trong những lý do khiến game click để di chuyển và game tab-target ít nhạy với ping. Đổi lại, không có gì bảo đảm kết quả hai bên giống nhau, nên nhất định phải có cơ chế thỉnh thoảng đồng bộ lại vị trí. Phép tính dấu phẩy động có thể cho kết quả hơi khác nhau tùy loại CPU, trình biên dịch và cấu hình tối ưu hóa của nó (kể cả khác biệt giữa bản build debug và release). Trong các cấu trúc chỉ trao đổi input và giả định kết quả tính toán hai bên giống hệt nhau như lockstep, rollback, những khác biệt nhỏ này có thể tích tụ lại và gây lệch (desync), khiến trạng thái game trên hai màn hình tách ra.

Nguồn

  1. Deterministic Lockstep Gaffer On Games
    Dù tất định trên cùng một máy, kết quả dấu phẩy động vẫn có thể khác nhau khi trình biên dịch, OS, CPU khác nhau
  2. State Synchronization Gaffer On Games
    Gửi trạng thái kèm với input thì có thể đồng bộ hai bên mà không cần tính tất định hoàn hảo
  3. Peeking into VALORANT's Netcode Riot Games
    Khi mất gói tin hoặc khi hai nhân vật cùng muốn đi vào một chỗ, mô phỏng trên server và client bị lệch nên cần hiệu chỉnh
  4. 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond Game Developer
    Khác biệt rất nhỏ lớn dần theo thời gian khiến đường đi của đơn vị worker lệch dần. So sánh thế giới, đối tượng, tìm đường bằng checksum để phát hiện lệch (out-of-sync)
  5. Floating Point Determinism Gaffer On Games
    Cùng một đoạn code dấu phẩy động cũng có thể cho kết quả khác nhau tùy trình biên dịch, kiến trúc CPU, bản build debug hay release. Có trường hợp CPU AMD và Intel trả về giá trị hơi khác nhau ở hàm siêu việt
  6. /fp (Specify floating-point behavior) Microsoft
    /fp:fast có thể đổi thứ tự hoặc gộp các phép tính dấu phẩy động nên kết quả khác với các cấu hình /fp khác, và phép tính được gộp bằng FMA cũng có thể khác với kết quả nhân rồi cộng riêng

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 (Dịch chuyển tức thời)

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