Карта висоти, воксель, полігони (геометрія) місцевості


15

По відношенню до місцевостей висоти, вокселів та полігонів (геометрії):

  1. Які основні відмінності між усіма цими трьома?
  2. Чи можете ви сформувати "рівну" місцевість з Voxels, я маю на увазі, ви можете, наприклад, отримати рівну гору з Voxels, або Voxels обмежені кубами?
  3. Ефективність, світ 2000x2000 одиниць, що було б швидше місцевості висоти карти, місцевості Voxel або полігону, геометрії місцевості? (Якщо припустити, що для рендерінгу для кожної з можливостей зроблено "розумне" підвищення / оптимізацію продуктивності
  4. Чи є якісь методи, які використовуються для створення місцевості?
  5. Будь-які хороші назви, що представляють кожен із типів?

Місцевість на основі полігону PS повинна бути повністю перероблена, без квадратних речей.

Відповіді:


30

Карти висоти

За допомогою карти висоти ви зберігаєте лише висотний компонент для кожної вершини (зазвичай у вигляді двовимірної текстури) та надаєте положення та роздільну здатність лише один раз для всього квадратика. Геометрія ландшафту генерується для кожного кадру, використовуючи шейдер геометрії або апаратну 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 Маріо

використовуй це.

Інші методи

Можна створити рельєф повністю в трубопроводі шейдерів. Якщо алгоритм працює лише в шейдері фрагмент / піксель, деталізація може бути практично необмеженою, тоді як вплив на пам'ять майже дорівнює нулю. Очевидні недоліки майже не контролюють форму і проблеми, коли камера перетинає оригінальну поверхню візуалізації. Це все ще корисно в космічних іграх, де гравці не взаємодіють з поверхнею планети. Анімація параметрів найкраще працює з таким видом місцевості.

Слід створити геометрію сформованої місцевості з відеокарти, щоб використати її для решти ігрового двигуна, але я не знаю, як це працює, чи це було зроблено до цих пір.

Висновок

Не існує методу, який добре працює для кожного сценарію, але вибрати його для певного завдання досить просто:

  • Карти висот - найкраще рішення, якщо вам не потрібні перекриття або отвори на поверхні місцевості та використання фізики або динамічного рельєфу. Вони масштабовані та добре працюють у більшості ігор.

  • Сітки мають найвищу точність і можуть описувати навіси, отвори та тунелі. Використовуйте їх, якщо у вас складний рельєф, який не змінюється часто.

  • Вокселі хороші для опису дуже динамічного рельєфу з багатьма складними характеристиками. Уникайте надання їх безпосередньо, оскільки їм потрібна велика кількість пам'яті та обробка.

  • Інші методи можуть бути кращими за будь-який із перерахованих вище, якщо вам не доведеться взаємодіяти з місцевістю або потрібна дуже детальна графіка. Зазвичай вони працюють лише для дуже конкретних сценаріїв.

Можливе поєднання різних методів для отримання функцій з декількох, наприклад, тесселюючий сітчастий рельєф із картою висоти для збільшення структури деталей скелі.

Динамічна генерація рельєфу активно використовується в моделюванні процедурного простору, і деякі вони стали справді вдосконаленими в останні роки . Форуми цих проектів повинні мати певні ресурси з цієї теми.


3
Джерело двигуна не використовує карти висоти для своєї місцевості. Вони використовують тесельовані квадратики під назвою "Displacements" developer.valvesoftware.com/wiki/Displacement
Tetrad

1
Це приємна відповідь там, якщо це можливо, дав би +3 на цьому. Дякую за детальну інформацію, дуже вдячний.
joltmode

@Tetrad Доступні роздільні можливості для переміщень - це потужність двох (загальне обмеження для буферів текстури), єдиною координатою, що зберігається на вершині, є висота, а карти висоти рельєфу відображаються як квадратичні квадрати. Вікі також говорить, що вартість візуалізації переміщень нижча, ніж звичайна геометрія. Я думаю, що справедливо вважати, що вони однакові з різними іменами.
Тамщі

1
@NickWiggill Значення "вокселя", схоже, змінилося за останні 10 років. Я переходжу до поточного визначення Вікіпедії вокселів як значень у звичайній 3D-сітці . Запис на Outcast згадує відмінність в значенні. Я додав свою відповідь, щоб уточнити це.
Тамщі

2
Бічна примітка: "Багатокутний рельєф" також називають " трикутною нерегулярною мережею " (коротко "TIN") в ГІС; і це, як правило, значно менш об'єм пам'яті, ніж карти висоти з такою ж ефективною роздільною здатністю, оскільки це не турбується із записом несуттєвих даних або місць, де немає даних. Перша готична гра використовувала її (не впевнений в інших).
Мартін Сойка

8

Я хотів би зазначити, що жоден із згаданих вами термінів не виключає один одного - у вас може бути навіть гра на основі вокселів, яка використовувала висотні карти та відображала за допомогою полігонів.

  1. Карти висоти - це двовимірні зображення висоти землі в кожній конкретній точці. Вони часто зберігаються у вигляді зображень сірого кольору, де яскравість представляє висоту цієї точки. Вокселі - це в основному 3D-растрові карти. Існує різноманітна техніка, що використовується для візуалізації простору вокселів.

  2. Ви можете створити рівну місцевість за допомогою вокселів, і вони не обмежуються кубиками. Одним із таких способів є використання алгоритму на зразок маршових кубів , який може перетворити подання вокселів у список полігонів.

  3. Той, що має найменше трикутників, зробить найшвидшим: 3

  4. Фрактальні алгоритми, такі як шум Перліна, можуть використовуватися для створення пейзажів з великою кількістю
    деталей. Параметричні поверхні, такі як садки, можна використовувати для створення рівних місцевостей з невеликими постійними вимогами до зберігання.

  5. Delta Force - стара гра, яка використовує вокселі. Minecraft може використовувати сховища вокселів для зображення пейзажу (не впевнені). Sacrifice by Shiny - гра, яка використовує висотні карти для гарного ефекту. У більшості ігор з пейзажами використовується геометрія місцевості.


1
Одне зауваження в пункті 3, хоча GPU дбає лише про кількість полігонів, все ще є породження геометрії. Генерування геометрії для поля вокселів зазвичай є повільнішим процесом (блоки / маршируючі куби - це і складніші процеси), ніж місцевість мапи місцевості (що є простим процесом), або на основі багатокутника (що, очевидно, вже є геометричними даними). Редагувати: це також залежить від того, чи плануєте ви деформувати місцевість.
Майкл

За третьою точкою ... Ну, мапу висоти все одно доведеться обробляти, і лише потім вона формується в геометрію, правда? Маючи це на увазі, полігонна сітка була б швидшою? Не могли б ви вказати деякі прийоми, використовувані для візуалізації вокселів?
joltmode

2
Ви можете використовувати шейдер для геометрії для створення сітки з мапи висоти. Таким чином ви зберігаєте лише карту висоти та такі параметри, як положення та роздільна здатність, в той час як геометрія створюється для кожного кадру в трубопроводі шейдера. Це швидше, ніж марширують кубики і повільніше, ніж сітка багатокутника. Перевага heighmaps - це низьке споживання пам’яті: лише трохи більше 1/3 того, що потрібно для сітки. Мінус полягає в тому, що він не такий гнучкий (без дрібних деталей, без нависання). Ви можете динамічно регулювати деталі створеної сітки, але це спричиняє зміщення геометрії.
Тамщі

@Tamschi, якби ти надійшов на цю відповідь, саме те, що я шукав. :)
joltmode

@Tom я побачу, чи зможу я це відформатувати, і знайду ще кілька прикладів.
Тамщі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.