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

Buku Putih Lag Game › Desain sinkronisasi

Perhitungan jalur tidak sama pada sinkronisasi perintah Command sync with divergent pathing

ID penyebab sy-path-mismatch · Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Pengembangan klien (Tim Pengembang Game)

Buka kartu interaktif dengan gambar dan simulasi →

Jika yang dipertukarkan hanya “pergi ke sini” dan jalurnya dihitung masing-masing oleh kedua pihak, perbedaan perhitungan sekecil apa pun membuat karakter atau monster berjalan lewat jalur lain lalu ditarik kembali ke posisinya.

Mengapa Pada click-to-move dan monster yang mengejar, hanya tujuan yang dikirim dan jalurnya dihitung terpisah oleh klien → Akibatnya Bergerak lewat jalur yang berbeda dari server karena perbedaan data terrain, tabrakan dengan karakter lain, atau perbedaan urutan perhitungan → Di layar Monster berjalan menembus tembok lalu tiba-tiba berpindah tempat, karakter yang diklik berbelok seperti meluncur

Gejala
Teleport, Rubber banding
Faktor
Latensi
Siapa yang mengalami
Lokasi/channel tertentu, Hanya saya
Kapan
Saat bergerak atau pindah area
Penanggung jawab
Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Pengembangan klien (Tim Pengembang Game)
Tugas Tim Pengembang Game
Server: kirim juga titik-titik antara pada jalur (waypoint), samakan posisi secara berkala. Klien: konvergensikan penyimpangan secara halus, pakai data terrain yang sama dengan server.
Di grafik
Melonjak acak sesekali · Jumlah dan jarak koreksi posisi per objek
Yang diperiksa
Catat per objek selisih antara posisi yang dikirim server dan posisi yang dihitung klien, lalu tandai koordinat tempat koreksi terjadi di peta. Jika hasil jalur atau posisi di kedua pihak diringkas menjadi checksum dan dibandingkan secara berkala, waktu mulai penyimpangan bisa ditemukan
Cocok jika
Koreksi terpusat pada terrain tertentu (ambang, lorong sempit, lereng) atau tempat ramai, dan berulang di tempat yang sama bahkan pada pemain yang metrik jaringannya normal
Tidak cocok jika
Koreksi hanya terjadi saat packet loss atau jitter melonjak, tanpa terkait tempat: masalah koneksi. Satu monster melompat di layar banyak orang sekaligus: periksa apakah otoritas kontrol monster ada di klien yang lambat
Sarana pemeriksaan
Log dan metrik server atau klien game
Pelajari lebih lanjut
Cara inilah salah satu alasan game click-to-move dan tab-target tidak terlalu sensitif terhadap ping. Sebagai gantinya, tidak ada jaminan hasil di kedua pihak sama, jadi mekanisme yang sesekali menyamakan posisi wajib ada. Perhitungan floating point bisa sedikit berbeda hasilnya tergantung jenis CPU, compiler, dan pengaturan optimasinya (termasuk perbedaan build debug dan release). Pada arsitektur yang hanya bertukar input dan mengasumsikan hasil perhitungan di kedua pihak sama persis, seperti lockstep atau rollback, perbedaan kecil ini bisa menumpuk sampai state game di dua layar terbelah (desync).

Sumber

  1. Deterministic Lockstep Gaffer On Games
    Meski deterministik di mesin yang sama, hasil floating point bisa berbeda jika compiler, OS, atau CPU berbeda
  2. State Synchronization Gaffer On Games
    Jika state dikirim bersama input, kedua pihak bisa disamakan tanpa determinisme yang sempurna
  3. Peeking into VALORANT's Netcode Riot Games
    Saat ada packet loss atau dua karakter mencoba menuju posisi yang sama, simulasi server dan klien menyimpang sehingga perlu koreksi
  4. 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond Game Developer
    Perbedaan yang sangat kecil membesar seiring waktu sehingga jalur worker sedikit demi sedikit menyimpang. World, objek, dan pathfinding dibandingkan dengan checksum untuk menemukan penyimpangan (out-of-sync)
  5. Floating Point Determinism Gaffer On Games
    Kode floating point yang sama pun bisa memberi hasil berbeda tergantung compiler, arsitektur CPU, serta build debug atau release. Ada kasus CPU AMD dan Intel memberi nilai yang sedikit berbeda pada fungsi transendental
  6. /fp (Specify floating-point behavior) Microsoft
    /fp:fast bisa mengubah urutan atau menggabungkan operasi floating point sehingga hasilnya berbeda dari pengaturan /fp lain, dan operasi yang digabung dengan FMA juga bisa berbeda dari hasil perkalian dan penjumlahan terpisah

Lihat juga

Lapisan yang sama: Desain sinkronisasi

Penyebab di lapisan lain dengan gejala yang sama (Teleport)

Lihat kartu interaktif dengan gambar dan simulasi