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)
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
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
Deterministic LockstepGaffer On Games Meski deterministik di mesin yang sama, hasil floating point bisa berbeda jika compiler, OS, atau CPU berbeda
State SynchronizationGaffer On Games Jika state dikirim bersama input, kedua pihak bisa disamakan tanpa determinisme yang sempurna
Peeking into VALORANT's NetcodeRiot Games Saat ada packet loss atau dua karakter mencoba menuju posisi yang sama, simulasi server dan klien menyimpang sehingga perlu koreksi
1500 Archers on a 28.8: Network Programming in Age of Empires and BeyondGame 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)
Floating Point DeterminismGaffer 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
/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