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.