Існує кілька різних способів зберігання даних для гри з такими блоками, як Minecraft.
Те, як я вважаю, що Minecraft робить це, розбиває світ у чанах 16x16x256. Шматки навколо програвача завантажуються в пам'ять, коли гравець починає гру, тоді фонова нитка завантажується більше, коли ви ходите. Ось відео, яке показує його: http://www.youtube.com/watch?v=oR_ZdJH9eho .
Ще один спосіб зробити це - розбити світ в Октрисі. Майкл Гудфеллоу написав блог про реалізацію світу кубів за допомогою цієї структури даних: http://www.sea-of-memes.com/LetsCode1/LetsCode1.html . Octree приємний тим, що дає вам трохи вбудованого стиснення, але, можливо, буде трохи складніше працювати з тодішнім масивом.
Про збереження в пам’яті «лише потрібних»? Це трохи складніше, оскільки ви повинні запитати, що "потрібно". Якщо у вас є NPC, які живуть в іншій частині світу з AI, який взаємодіє з навколишнім середовищем, тоді вам "потрібно" набагато більше світу, щоб залишитися в пам'яті. Світові дані Voxel можуть отримувати дуже великі дуже швидко, тому найкраще спробувати зберегти якнайменшу кількість пам'яті. (IE, біля програвача є лише NPC).
Графічному двигуну "знадобиться" кожен блок, не повністю оточений іншими непрозорими блоками. Звичайний спосіб відобразити світ - це побудувати єдину сітку, яка містить вершини для кожного видимого блоку. Це зробити набагато швидше, оскільки ви робите лише 1 виклик методів розіграшу для 65,536 блоків (у шматках розміру Minecraft). Оскільки для створення цієї сітки графічному двигуну знадобиться, він, як правило, повинен знати всі куби в шматок. Зауважте, що саме тому, коли ви бачите крізь підлогу в Minecraft, багато світу невидиме. Це тому, що кожен блок, який оточений з усіх шести сторін, пропускається. Я вважаю, що Minecraft також зменшує кількість вершин, поєднуючи горизонтальні сторони одного типу текстури в одне поле з текстурою, що повторюється.
Моя порада - поїхати з шматками 16x16x256. Зберігайте їх у масиві, оскільки вам знадобиться швидка ітерація та редагування завдяки побудові сітки та логіки гри (виявлення зіткнень, додавання / видалення блоків, тощо). Потім завантажте якомога більше шматочків в коло навколо гравця. Масштабуйте кількість шматочків вгору або вниз для кращих або гірших комп'ютерів.
Завантаження Chunks буде величезним хітом у продуктивності, тому поставте його в нитку, яка виконує його з часом. Зробіть так, щоб ви могли повністю завантажувати 3 нових шматки протягом часу, коли гравцеві потрібно пройтися від одного кінця шматка до іншого.