Карти висоти
За допомогою карти висоти ви зберігаєте лише висотний компонент для кожної вершини (зазвичай у вигляді двовимірної текстури) та надаєте положення та роздільну здатність лише один раз для всього квадратика. Геометрія ландшафту генерується для кожного кадру, використовуючи шейдер геометрії або апаратну tessellation. Карти висот - це найшвидший спосіб зберігати ландшафтні дані для виявлення зіткнень.
Плюси:
Відносно низьке використання пам’яті : потрібно зберігати лише одне значення на вершину і без індексів. Можна додатково вдосконалити це за допомогою детальних карт або шумового фільтра для збільшення сприйнятих деталей.
Відносно швидкий : шейдер геометрії для мап висоти невеликий і працює швидко. Хоча це не так швидко, як геометрія місцевості.
У системах без тривимірного прискорення на основі трикутника найпростішим способом візуалізації рельєфу є кращий макет висоти. У старих іграх це називали воксельною графікою.
Динамічний LOD / рельєф : Можливо змінити роздільну здатність створеної сітки залежно від відстані від камери. Це спричинить зміщення геометрії, якщо роздільна здатність падає занадто далеко (близько 0:40), але може бути використана для цікавих ефектів.
Легке генерування та створення місцевості : Карти висот можна легко створити шляхом змішування шумових функцій, таких як фрактал Perlin Шум і редактори карти висоти, які швидко та легко використовувати. Обидва підходи можуть поєднуватися. З ними також легко працювати в редакторі.
Ефективна фізика : горизонтальне положення відображається безпосередньо (зазвичай) одне-чотири положення в пам'яті, тому геометричні пошуки фізики дуже швидкі.
Мінуси:
Рівно одна висота на координату х / у : Зазвичай не може бути отворів у землі або надвисних скелях.
Менший контроль : Ви можете контролювати точну висоту кожної точки, лише якщо розмір сітки відповідає координатам текстури.
Артефакти : Якщо чотири вершини, які визначають підквадра, не знаходяться на одній площині, розбиття між двома вершинами стане видимим. Зазвичай це відбувається на крутих скелях з краями, які не слідують кардинальному напрямку.
Карти висот - це найефективніший спосіб візуалізації місцевості на сьогоднішній день і застосовуються у багатьох нових іграх, які не покладаються на розширені можливості місцевості та мають великі зовнішні зони. У Вікіпедії є список програм, які використовують мапи висоти , але я не впевнений, чи це означає, що вони використовують їх лише як ресурси або також для візуалізації, тож ось декілька ігор, які, ймовірно, їх використовуватимуть:
Просто причина 2: Регіони завантажуються в квадратних секторах і в місцевості немає дірок. У демонстрації є глибока діра з розтягнутими трикутниками по краях, де зазвичай була б будівля. (Зона зазвичай недоступна, але є способи зняти деякі обмеження демонстрації ...)
Sims 2 ( можливо ): Місцевість для району завантажується як карта висоти, але є отвори, де розміщуються ділянки (будівельні майданчики). Типові артефакти, якщо ви створюєте скелі на великій кількості, хоча і додати льох до будинку (і сховати скелю під верандою) досить нудно.
Ігри двигуна джерела Valve: Прямокутні кисті (статична геометрія рівня) можуть мати на поверхні обличчя місцевість. У цих іграх звичайні примхи часто приховуються за допомогою інших кистей або реквізиту.
Це неможливо точно сказати, не дивлячись на шейдери, тому що кожна місцевість мапи висоти може бути представлена як сітка.
Вокселі
Місцевість Voxel зберігає дані про місцевість для кожної точки в 3D-сітці. Цей метод завжди використовує найбільшу сховище на значущі деталі поверхні, навіть якщо ви використовуєте методи стиснення, як рідкісні октриси.
(Термін "воксельний двигун" часто використовувався для опису методу променевих маршів по висоті місцевості, поширених у старих 3D-іграх. Цей розділ стосується лише місцевості, що зберігається як дані вокселя.)
Плюси:
Безперервні тривимірні дані : Voxels - це майже єдиний ефективний спосіб зберігання безперервних даних про приховані особливості місцевості, такі як руді вени.
Легко модифікувати : Некомпресовані дані вокселів можна легко змінити.
Розширені можливості рельєфу місцевості : можливо створити нависання. Тунелі безшовні.
Цікаве покоління місцевості : Minecraft робить це шляхом накладання шумових функцій та градієнтів із заздалегідь заданими особливостями місцевості (дерева, підземелля). ( Детальну інформацію читайте в « Поколінні рельєфу», частина 1 в блозі Notch. Частини 2 немає від 05.8.2011.)
Мінуси:
Повільно : для візуалізації даних про вокселі вам потрібно використовувати трасеринг променів або обчислити сітку, наприклад, з маршируючими кубиками (Будуть артефакти). Сусідний воксель не є незалежним для створення сітки, а шейдери складніші і зазвичай дають складнішу геометрію. Відображення даних про вокселі з високим вмістом LOD може бути дуже повільним.
Величезні вимоги до зберігання : зберігання даних вокселів використовує багато пам'яті . З цієї причини часто неможливо завантажувати дані вокселів у VRAM, оскільки для компенсації вам доведеться використовувати менші текстури, навіть на сучасному обладнанні.
Використовувати вокселі для ігор, які не покладаються на такі функції вокселів, як деформований рельєф, практично не можна, але в деяких випадках це може дозволити цікаву механіку гри. Двигуни Voxel частіше зустрічаються в старих іграх , але є і новіші приклади:
Двигун Atomontage : візуалізація Voxel .
Черви 4: Використовує «пікселі». За даними Вікіпедії, це поєднання вокселів та багатокутників.
Minecraft: Використовує воксель для представлення місцевості в оперативній пам'яті, графіка - полігонна графіка. В основному це програмне забезпечення, обчислене.
Terraria: Приклад для двовимірних вокселів. Я не знаю, як це робить.
Вокселі в поєднанні з фізикою : Не гра. але це добре демонструє потенціал руйнування.
Voxatron : гра з використанням вокселів для майже всієї графіки, включаючи меню та HUD.
Сітки
Полігонові сітки є найбільш гнучким і точним способом зберігання та рендерингу місцевості. Вони часто використовуються в іграх, де потрібен точний контроль або розширені можливості місцевості.
Плюси:
Дуже швидко : Вам потрібно лише виконати звичайний розрахунок проекції у вершинній шейдері. Шейдер для геометрії не потрібен.
Дуже точно : Усі координати зберігаються окремо для кожної вершини, тому можливо переміщати їх по горизонталі та збільшувати щільність сітки в місцях з дрібнішими деталями.
Низький вплив пам’яті : Це також означає, що для сітки зазвичай потрібно менше пам’яті, ніж карта висоти, тому що вершини можуть бути більш рідкісними в районах з менш малими можливостями.
(Див. Трикутну нерегулярну мережу у Вікіпедії).
Ніяких артефактів : сітка надається такою, якою є, тому не буде жодних глюків або дивних меж.
Розширені можливості рельєфу : Можна залишати отвори і створювати нависання. Тунелі безшовні.
Мінуси:
Поганий динамічний LOD : можливий лише з попередньо обчисленими сітками. Це призведе до "стрибків" при переключенні без додаткових даних для зіставлення старих вершин.
Не легко змінити : пошук вершин, які відповідають області, яку слід змінити, повільний.
Не дуже ефективно для виявлення зіткнень : На відміну від графіків висоти та даних про вокселі, адресу пам'яті для певного місця зазвичай неможливо обчислити безпосередньо. Це означає, що фізика та логіка гри, які залежать від точної геометрії поверхні, швидше за все будуть працювати повільніше, ніж у інших форматах зберігання.
Полігонний ландшафт часто застосовується в іграх, які не мають великих відкритих майданчиків або не можуть використовувати місцевість з висотою карти через його недостатню точність та нависання. У мене немає списку, але я в цьому впевнений
кожні 3D Zelda та
кожну гру 3D Маріо
використовуй це.
Інші методи
Можна створити рельєф повністю в трубопроводі шейдерів. Якщо алгоритм працює лише в шейдері фрагмент / піксель, деталізація може бути практично необмеженою, тоді як вплив на пам'ять майже дорівнює нулю. Очевидні недоліки майже не контролюють форму і проблеми, коли камера перетинає оригінальну поверхню візуалізації. Це все ще корисно в космічних іграх, де гравці не взаємодіють з поверхнею планети. Анімація параметрів найкраще працює з таким видом місцевості.
Слід створити геометрію сформованої місцевості з відеокарти, щоб використати її для решти ігрового двигуна, але я не знаю, як це працює, чи це було зроблено до цих пір.
Висновок
Не існує методу, який добре працює для кожного сценарію, але вибрати його для певного завдання досить просто:
Карти висот - найкраще рішення, якщо вам не потрібні перекриття або отвори на поверхні місцевості та використання фізики або динамічного рельєфу. Вони масштабовані та добре працюють у більшості ігор.
Сітки мають найвищу точність і можуть описувати навіси, отвори та тунелі. Використовуйте їх, якщо у вас складний рельєф, який не змінюється часто.
Вокселі хороші для опису дуже динамічного рельєфу з багатьма складними характеристиками. Уникайте надання їх безпосередньо, оскільки їм потрібна велика кількість пам'яті та обробка.
Інші методи можуть бути кращими за будь-який із перерахованих вище, якщо вам не доведеться взаємодіяти з місцевістю або потрібна дуже детальна графіка. Зазвичай вони працюють лише для дуже конкретних сценаріїв.
Можливе поєднання різних методів для отримання функцій з декількох, наприклад, тесселюючий сітчастий рельєф із картою висоти для збільшення структури деталей скелі.
Динамічна генерація рельєфу активно використовується в моделюванні процедурного простору, і деякі вони стали справді вдосконаленими в останні роки . Форуми цих проектів повинні мати певні ресурси з цієї теми.