Випуск точності
З самого початку інженерна команда знала, що безперервний світ суттєво вплине на розробку двигунів та контенту, а головним питанням була стабільність чисельності. Уявіть, що два персонажі йдуть у формації за два метри один від одного, спрямовуючись на схід від початку. У якийсь момент відстань один від одного перевищує відстань від початку, і символи будуть здаватися «в одному місці».
З плаваючою точкою, чим далі ви отримуєте походження, тим більше точності втрачаєте, що може спричинити всілякі неприємні проблеми. Речі не впорядковуються, між сусідніми сітками з’являються тріщини, простір починає квантуватися, і коти та собаки починають жити разом. Dungeon Siege використовує FPU в режимі єдиної точності для очевидних переваг продуктивності та для того, щоб відповідати основній точності відео апаратного забезпечення. Однак, навіть якщо ми збільшили точність, це врешті-решт не могло б вирішити проблему, оскільки світ планувався бути, і в кінцевому підсумку, неймовірно великим.
Проблема точності означала, що неможливо мати єдиний світовий координатний простір, як у більшості інших ігор. Натомість рішення полягало в сегментації безперервного світу на набір незалежних координатних просторів і періодично перемикатися між ними, щоб скинути точність. В рамках цих обмежень були випробувані різноманітні ідеї, і ми врешті-решт зупинилися на варіації стандартної портальної системи.
Наше рішення складається з реляційної системи координат на основі вузла, в якій кожен куточок геометрії (Облоговий вузол) має власний простір координат і пов'язаний просторово із сусідньою геометрією через двері, якими він спільний з тими сусідами. Розташування вузлів, з'єднаних дверима, утворює суцільний графік, який представляє всю карту світу. Ця система вузлів розвивалася з часом від своєї первісної мети - підтримання точності FPU, щоб стати основним методом ефективного підрозділу простору та коренем незліченних оптимізацій.
Для того, щоб інкапсулювати поняття тривимірного положення відносно конкретного вузла, традиційний вектор (x, y, z) повинен був бути доповнений ідентифікатором вузла (x, y, z, вузол) і представляти зміщення від початку певного вузла. Цей 4-кортеж інкапсульований як положення облогового вузла або SiegePos. Пізніше ми додали SiegeRot (кватерніон, вузол), щоб обробляти порівняння між орієнтаціями по вузлах.
Словосполучення «немає світового простору» стало мантрою для команди, хоча буквально потрібні роки, щоб усі повністю зрозуміли, що це означає.