Masalah Presisi
Sejak awal, tim teknik tahu bahwa dunia yang berkelanjutan akan secara signifikan mempengaruhi mesin dan desain konten, dan masalah intinya adalah stabilitas numerik. Bayangkan dua karakter berjalan dalam formasi terpisah dua meter menuju timur jauh dari asal. Pada titik tertentu, jarak dari satu sama lain kewalahan oleh jarak dari asal, dan karakter akan tampak "di lokasi yang sama".
Dengan floating point, semakin jauh Anda dapatkan dari titik asal, semakin presisi Anda kalah, yang dapat menyebabkan segala macam masalah buruk. Hal-hal tidak beres dengan benar, retakan muncul di antara jerat yang berdekatan, ruang mulai terkuantisasi, dan kucing dan anjing mulai hidup bersama. Dungeon Siege menggunakan FPU dalam mode presisi tunggal untuk manfaat kinerja yang jelas, dan untuk mencocokkan presisi asli perangkat keras video. Namun, bahkan jika kita meningkatkan presisi, pada akhirnya itu tidak akan pernah bisa menyelesaikan masalah karena dunia direncanakan menjadi, dan pada akhirnya, sangat besar.
Masalah presisi berarti tidak mungkin untuk memiliki ruang koordinat dunia terpadu seperti kebanyakan game lainnya. Alih-alih, solusinya adalah membagi dunia kontinu ke dalam satu set ruang koordinat independen, dan beralih di antaranya secara berkala untuk mengatur ulang presisi. Berbagai ide dicoba dalam batasan-batasan ini, dan kami akhirnya memilih variasi sistem portal standar.
Solusi kami terdiri dari sistem koordinat berbasis simpul relasional, di mana setiap bongkahan geometri (Siege Node) memiliki ruang koordinatnya sendiri, dan dihubungkan secara spasial ke geometri tetangga melalui pintu yang berbagi kesamaan dengan tetangga tersebut. Susunan node yang dihubungkan oleh pintu membentuk grafik berkelanjutan yang mewakili seluruh peta dunia. Sistem simpul ini berevolusi dari waktu ke waktu dari tujuan semula untuk mempertahankan presisi FPU menjadi metode utama membagi ruang secara efisien, dan akar dari optimasi yang tak terhitung jumlahnya.
Untuk merangkum konsep posisi 3D relatif terhadap node tertentu, vektor tradisional (x, y, z) harus ditambah dengan ID node (x, y, z, node) dan mewakili offset dari titik asal dari simpul tertentu sebagai gantinya. 4-tuple ini dienkapsulasi sebagai Siode Node Position, atau SiegePos. Kemudian, kami menambahkan SiegeRot (angka empat, node) untuk menangani perbandingan antara orientasi antar node.
Ungkapan "tidak ada ruang dunia" menjadi mantra bagi tim, meskipun secara harfiah butuh bertahun-tahun bagi semua orang untuk sepenuhnya memahami apa artinya.
Untuk dunia tanpa zon yang besar saya akan pergi untuk titik presisi ganda, atau titik mengambang dengan potongan yang lebih kecil membagi tanah.
Setiap chunk akan memiliki sistem koordinatnya sendiri. Ketika Anda menyeberangi perbatasan ke masing-masing potongan ini, Anda akan mengubah segalanya menjadi sistem koordinat itu. Begitulah cara mereka melakukannya di SIM penerbangan.
Jika Anda memiliki zona kecil, saya kira float sudah cukup.
sumber
Saya akan mengatakan untuk lokasi aktual itu adalah vektor 3 mengapung. Tetapi akan ada juga indeks zona yang terkait dengan pemain juga. (Tapi bukan bagian dari lokasi karena semua yang ditangani oleh server zona berada di zona yang sama dan karenanya tidak perlu berada dalam struktur data yang sama.)
Ingat setidaknya ada 4 zona. 4 benua utama. Saya tidak berpikir salah satu dari mereka lebih dari sekitar 10 km di satu sisi. Sebagai contoh, blog ini sebelum ekspansi terbaru menghitung seluruh area yang dapat bepergian sebagai 41 mil persegi. Semua medan pertempuran, semua instance, masing-masing dengan-di zona mereka sendiri dan mengkoordinasikan ruang juga.
Menggunakan LUA API Anda bisa mendapatkan posisi pemain GetPlayerMapPosition () mengembalikan masing-masing float dari 0 ke 1 sebagai proporsi di sepanjang seluruh peta dunia.
sumber
Untuk WoW, saya berharap mereka menggunakan float x / y / z sederhana - tetapi relatif terhadap 'zona' tertentu
Ini akan membantu menangani 'zona bergerak', misalnya, kapal dan zeppelin
sumber
Biasanya game online seperti Wow, Tibia, dll. Simpan pos pemain. menggunakan tiga variabel X + Y + Z dalam tabel meta SQl player. Runescape melakukannya tanpa Z - dengan cara itu pemain selalu ditampilkan di bagian atas jala tanah.
sumber
Pelampung? Nah, array 3 mengapung untuk game 3D. Setidaknya bagi kami, kami menggunakan kaki sebagai unit sehingga yang Anda butuhkan adalah 3-4 tempat desimal pada titik bahwa kebisingan yang melayang tidak menjadi masalah. Jika zona besar hanya satu atau dua mil di satu sisi, itu tidak terlalu besar. Adapun zonasi transparan dalam MMO, itu pertanyaan yang sama sekali berbeda. Dalam skema besar masalah sulit dalam MMO, posisi penyimpanan cukup rendah dalam daftar.
sumber