Для формування воксельної місцевості
(a) Поширеним методом є створення карти висоти за допомогою шуму Перліна. Карта висоти - це, в основному, монохромне зображення, що представляє різні висоти за темністю або легкістю пікселів.
Ви переглянете окремі пікселі в цій карті висоти, щоб створити "стеки" вокселів до різної висоти (вісь z) в різних (х, у) місцях, відповідно до яскравості цього пікселя у зображенні висоти. Оскільки шум зображення Перліна гладкий (немає гострих країв світла проти темного), у результаті ви будете плавно перекочувати місцевість.
(b) Ви можете побудувати його поступово, створивши пейзаж з різних багатогранників. Створіть багатогранну векторну форму, яка наближається до потрібної вам форми вокселів. Використовуючи будь-який метод 3D-точка в поліедрі (найчастіше, «точково-опуклий корпус»), перевірте, які точки вашої світової сітки потрапляють під об'єм поліедра. Наприклад, визначте піраміду в просторі. Перевіривши кожну точку в місцевому просторі вашого світового простору на тому пірамідальному об'ємі, ви дізнаєтеся, які точки потрапляють до нього, і ви можете встановити ці клітинки як "теперішні", тобто вони стають вокселями, а не порожнім простором. Тепер у вашому просторі є воксельна піраміда. Ви можете продовжувати додавати фігури будь-якого типу разом, поки не сформуєте місцевість.
(c) (дійсно те саме, що і b ) Напишіть інструмент моделювання. Voxatron показують, як це виглядатиме. Це просто створення форм вокселів у світі підміни (редактор), а потім імпорт їх у ваш фактичний ігровий світ. Я вважаю, що у Voxlap був перший редактор з відкритим кодом для вокселів. Ви можете розміщувати окремі вокселі, а також можете використовувати «кисть» з різними формами / обсягами, щоб малювати вокселі у своєму світі.
Що вам знадобиться для створення власної гри на основі вокселів
Я включаю цей розділ, оскільки дорога вокселів не є легкою, принаймні, зараз не є. Останнім часом великі гравці знову вкладають у воксельні двигуни великі гравці, спрямовані на надання програм та фізики.
Простота може бути проблемою, тому що динамічне побудова світу із сирих вокселів є процедурним підходом до світової побудови, і це не властиво просто . Тож вибачте, тут буде кілька технічних термінів. Написання двигуна вокселів є досить серйозним завданням і вимагає знань з різних областей розвитку ігрового двигуна, особливо з точки зору просторових концепцій, а це означає розуміння 3D векторної математики, матриць та базового обчислення до певного розумного рівня.
Сказавши це, вашому "поколінню воксельної місцевості" потрібен контекст, в якому потрібно працювати, оскільки воксельні двигуни не дуже поширені. Давайте перейдемо до основного опису роботи двигуна вокселів.
Вокселі - це основні будівельні блоки вашого світу. Їх позиції визначаються цілою 3D-індексованою сіткою (масивом), а не суцільним простором з плаваючою комою (як використовується у векторних 3D-іграх). Це будуть "атоми" вашого світу. Вони можуть бути висотою до 3 футів, як у таких іграх, як Minecraft, або вони можуть бути меншими, ніж насправді може побачити око вашого віртуального персонажа, якщо тільки вони не згрупуються у великій кількості - трохи більше схожі на молекули. Існує два види:
- Кубічні сітчасті вокселі ( приклад ) - це новіший сорт, який використовується для простоти і легко використовується у поєднанні з сучасними графічними технологіями. Використовується в таких іграх, як MineCrat і Dungeon Keeper.
- Точкові вокселі ( приклад , приклад ) - вихідний воксель. Кожен є індивідуальною, зібраною точкою у просторі, хоча він може бути оточений сферичним обмежувальним об'ємом. Вони простіші, тому ви можете мати їх багато більше у своєму світі, і ви можете, таким чином, зробити їх меншими, що, як правило, сприятливо. Дві ігри, які використовували їх, були «Команш» та рімейк «Господарів півночі» 1990-х років.
Так чи інакше, ваш підхід до маніпуляції з вокселями у вашому світі майже такий же, як і далі.
Для побудови та переміщення об’єктів у вашому світі вам знадобляться математичні засоби, згадані вище. Наприклад, для створення стіни: Побудуйте коробку відповідних розмірів у просторі 3D, використовуючи вектори. Використовуйте матричну математику, щоб перетворити свій ящик на обертання та положення, яке ви бажаєте у вашому 3d світі (у безперервному векторному просторі). Для двигуна вокселів додатковим кроком є використання алгоритму 3D-введення в багатогранник для визначення того, хто з ваших вокселів потрапляє всередину обертового простору.
По суті, це спосіб побудови більшості об'єктів у вашому світі. Крім цього, ви можете написати власні інструменти для "моделювання" персонажа так, як ви можете сказати, Майя або 3DS Max. Але оскільки ви моделюєте персонаж із вокселів замість точок, країв та облич, ваші методи будуть суттєво відрізнятися. Якщо ви вирішили потім обертати ці об'єкти у вашому світі, вам знадобиться аналогічно використовувати матричні перетворення для цього.
Зруйнований рельєф настільки ж простий, як або видалення одного вокселя одночасно відповідно до обраного вами методу, або використання операцій CSG (Constructive Solid Geometry) на великих обсягах вокселів для видалення їх відповідно до певного заздалегідь визначеного обсягу; наприклад, якщо зйомка лазерного променя через скелю, ви можете використовувати циліндричний об'єм для віднімання вокселів, тут промінь стріляє через скелю. CSG - це відносно простий процес з використанням 3D-просторових сіток, які формують ваш світ вокселів, і перевірки кожної комірки в розділі базової сітки (в даному випадку скелі) проти іншої сітки (в цьому випадку лазерного променя)
Для того щоб мати матеріальні "потоки" (як натякав Вигіл у своєму коментарі про пісок), вам потрібно буде вивчити динаміку рідини та стільникові автомати. Їх використав автор "Карликової фортеці" Тарн Адамс у тому, що по суті є також воксельним світом (хоча вокселі в цьому випадку набагато більші, порівняно з "Dungeon Keeper", принцип залишається тим самим). Це передові теми, а не необхідність для воксельних двигунів, як визначено, тому я залишу це "заглушкою" для ваших власних досліджень.
CSG і динаміка рідини приводять мене, нарешті, до оптимізації. В даний час розробники Voxel майже виключно використовують рідкісні воксельні октриси (SVO), що є методом підрозділення воксельного простору на різні роздільні здатності, про що свідчить у цьому відео, що демонструє майбутній механізм Atomontage. Використання octrees / SVO - це скоріше необхідність, ніж вибір оптимізації, оскільки накладні витрати, пов'язані з обробкою однієї масивної рівномірної сітки. По суті, octree - це дерево (спрямований ациклічний графік), де кожен вузол має 8 або нульових дочірніх вузлів, залежно від того, чи містить у ньому простір фізичних об'ємів. Діаграми , що показують , як octrees поділяють простір для формування вокселей знаходяться тут .
Найкраща реалізація вокселів з відкритим кодом, про яку я знаю, - це Voxlap Engine Кен Сільвермана , який використовувався для Voxelstein3D. Він написаний на C ++ і реалізує операції CSG для деформації місцевості.