Interpolasi antara dua status jaringan?

11

Saya memiliki banyak entitas di sisi klien yang disimulasikan (kecepatan mereka ditambahkan ke posisi mereka pada basis per frame) dan saya membiarkan mereka mati memperhitungkan sendiri. Mereka mengirim pembaruan tentang di mana terakhir kali dilihat dan kecepatannya berubah. Ini sangat bagus dan pemain lain melihat penemuan ini. Namun, setelah beberapa saat, para pemain ini mulai melakukan desync setelah beberapa waktu. Ini karena latensi.

Saya ingin tahu bagaimana saya bisa melakukan interpolasi antar negara sehingga mereka tampaknya berada di posisi yang benar. Saya tahu di mana pemain TERAKHIR terlihat dan kecepatan mereka saat ini tetapi interpolasi ke keadaan terakhir terlihat menyebabkan pemain untuk benar-benar bergerak-mundur-. Saya tidak bisa menggunakan kecepatan sama sekali untuk klien lain dan hanya 'mengarahkan' mereka ke arah yang sesuai, tetapi saya merasa ini akan menyebabkan gerakan jaggy. Apa alternatifnya?

Vaughan Hilts
sumber

Jawaban:

9

Untuk alasan ini, Anda akan menemukan simulasi sering berjalan 1 atau lebih bingkai di depan apa yang sebenarnya diberikan pada titik waktu tertentu pada klien pemberi. Jadi dengan kata lain, apa yang Anda render mungkin sebenarnya adalah frame terakhir kedua, bukan frame terakhir.

Cari artikel ini untuk semua contoh kata "depan" dan saya pikir Anda akan mulai mendapatkan gambar lebih baik daripada yang saya jelaskan di atas.

Insinyur
sumber
Oke, jadi apakah Anda menyiratkan saya benar-benar harus membuat pemain karena mereka 300 ms yang lalu dan interpolasi menuju masa depan? (Dalam keadaan terpisah, ketika negara baru tiba; ini akan beralih)
Vaughan Hilts
@VaughanHilts Sekali lagi, silakan baca artikel dan komentarnya. Gaffer ahli dalam bidang itu dan dia menjelaskannya lebih jelas daripada yang saya bisa. Tetapi ide umumnya adalah ya, model simulasi Anda ada di depan sementara rendering Anda agak di belakang itu untuk menjelaskan efek yang Anda jelaskan. Bukan berarti bahwa satu-satunya tempat saya melihat teknik ini dijelaskan.
Insinyur
2

Ketika Anda mengatakan:

para pemain ini mulai melakukan de-sinkronisasi setelah beberapa waktu

itu membuat saya berpikir bahwa masalah Anda mungkin lebih berkaitan dengan jam Anda keluar dari langkah daripada dengan masalah latensi. Jika latensi, itu seharusnya sama buruknya di awal dari 10 menit. Jika satu jam permainan berjalan sedikit lebih cepat dari yang lain, akan ada beberapa artefak jitter aneh yang akan semakin buruk dari waktu ke waktu. Seorang klien dapat mensimulasikan di masa depan, ketika paket-paket ini tiba dari server, itu akan menarik klien kembali, menyebabkan entitas untuk melompat-lompat. Jalankan beberapa tes lagi untuk mengetahuinya.

Jika jam permainan yang tidak sinkron memang menjadi masalah, Anda harus melihat dengan sangat hati-hati di lingkaran pembaruan Anda dan memastikan bahwa setiap pembaruan didasarkan pada jumlah waktu permainan yang berlalu (baik tetap atau variabel), dan bahwa permainan -waktu maju menggunakan sesuatu seperti jam dinding (bukan waktu render atau variabel lain). Gaffer memiliki beberapa artikel bagus tentang ini, dan ada pertanyaan yang layak di sini berbicara tentang timesteps tetap vs variabel . Semoga ini membantu.

John McDonald
sumber
Ini bukan masalahnya, kasusnya memang fakta bahwa saya mati-menganggap terlalu jauh (lag lonjakan atau sesuatu - paket untuk 'berhenti' tidak diterima dalam waktu dan klien tidak dapat memperbaiki sendiri dalam waktu. Saya tahu ini pasti kasus ini karena setelah klien berhenti, DEFINTELAY saya dapat melakukan interpolasi kembali ke posisi semula
Vaughan Hilts