Карта высот, Voxel, полигон (геометрия) местности

15

В отношении карты высот, Voxel и Polygon (геометрия):

  1. Каковы основные различия между всеми этими тремя?
  2. Можете ли вы сформировать "гладкую" местность с помощью Voxels, я имею в виду, например, можете ли вы получить гладкую гору с помощью Voxels, или Voxels ограничены кубами?
  3. С точки зрения производительности, мир 2000x2000 единиц, что будет быстрее, если карта высот, карта Voxel или полигон, геометрия местности? (Предполагая, что для каждого из возможных вариантов выполняется «разумный» прирост производительности / оптимизация)
  4. Есть ли еще методы, используемые для создания ландшафта?
  5. Какие-нибудь хорошие названия, представляющие каждый из типов?

PS Полигон на основе местности должен быть полностью вычерченным, а не квадратным.

joltmode
источник

Ответы:

30

карты высот

С помощью карты высот вы сохраняете только компонент высоты для каждой вершины (обычно в виде 2D-текстуры) и задаете положение и разрешение только один раз для всего четырехугольника. Геометрия ландшафта генерируется в каждом кадре с помощью геометрического шейдера или аппаратной тесселяции. Карты высот - это самый быстрый способ хранения данных ландшафта для обнаружения столкновений.

Плюсы:

  • Относительно низкое использование памяти : вам нужно хранить только одно значение для каждой вершины и никаких индексов. Это можно улучшить, используя детальные карты или шумовой фильтр, чтобы увеличить воспринимаемые детали.

  • Относительно быстро : геометрический шейдер для карт высот небольшой и работает быстро. Это не так быстро, как геометрия местности, хотя.
    В системах без трехмерного ускорения, основанного на треугольниках, карты высот марширующих лучей - это самый быстрый способ рендеринга ландшафта. Это упоминалось как воксельная графика в старых играх.

  • Динамический LOD / terrain : можно изменить разрешение сгенерированной сетки в зависимости от расстояния до камеры. Это приведет к смещению геометрии, если разрешение упадет слишком далеко (около 0:40), но может быть использовано для интересных эффектов.

  • Простое создание / создание рельефа : карты высот можно легко создать, смешивая шумовые функции, такие как фрактальный Perlin Noise и редакторы карты высот, и являются быстрыми и простыми в использовании. Оба подхода могут быть объединены. С ними также легко работать в редакторе.

  • Эффективная физика : горизонтальное положение отображается непосредственно (обычно) в одну-четыре позиции в памяти, поэтому поиск геометрии для физики происходит очень быстро.

Минусы:

  • Ровно одна высота на координату x / y : обычно в земле не может быть дыр или нависающих скал.

  • Меньше контроля : Вы можете контролировать точную высоту каждой точки, только если размер сетки соответствует координатам текстуры.

  • Артефакты : если четыре вершины, которые определяют подквадрат, не находятся на одной плоскости, расхождение между двумя вершинами станет видимым. Обычно это происходит на крутых скалах с краями, которые не следуют кардинальному направлению.

Карты высот являются наиболее эффективным способом рендеринга ландшафта и используются во многих новых играх, в которых не используются расширенные функции местности и которые имеют большие открытые площадки. В Википедии есть список программ, которые используют карты высот , но я не уверен, означает ли это, что они используют их только как ресурсы или также для рендеринга, поэтому вот некоторые игры, которые могут их использовать:

  • Просто причина 2: Регионы загружаются в виде квадратных секторов, и на местности нет дыр. В демонстрации есть глубокая дыра с вытянутыми треугольниками по краям, где обычно было бы здание. (Область обычно недоступна, но есть моды для снятия некоторых ограничений демо ...)

  • Sims 2 ( возможно ): Ландшафт соседства загружается как карта высот, но есть отверстия, в которых расположены участки (строительные площадки). Существуют типичные артефакты, если вы часто создаете скалы, и довольно утомительно добавить подвал в дом (и спрятать скалу под верандой).

  • Игры движка Source от Valve: Прямоугольные кисти (статическая геометрия уровней) могут иметь высоту ландшафта на своих лицах. В этих играх обычные причуды часто скрываются с помощью других кистей или реквизита.

Невозможно сказать наверняка, не глядя на шейдеры, потому что каждый ландшафт карты высот можно отобразить как сетку.

Воксели

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

(Термин «воксельный движок» часто использовался для описания метода карт высот ландшафта с марширующим лучом, распространенного в старых трехмерных играх. Этот раздел относится только к местности, хранящейся в виде данных вокселей.)

Плюсы:

  • Непрерывные трехмерные данные : Voxels - практически единственный эффективный способ хранения непрерывных данных о скрытых объектах местности, таких как рудные вены.

  • Легко изменить : несжатые данные вокселей могут быть легко изменены.

  • Расширенные возможности ландшафта : возможно создание выступов. Туннели бесшовные.

  • Интересное создание ландшафта : Minecraft делает это, накладывая шумовые функции и градиенты с предопределенными характеристиками ландшафта (деревья, подземелья). (Для получения дополнительной информации читайте Terrain Generation, часть 1 в блоге Notch. По состоянию на 05.8.2011, часть 2 отсутствует.)

Минусы:

  • Медленно : чтобы визуализировать данные вокселей, вы должны либо использовать трассировщик лучей, либо вычислить сетку, например, с помощью движущихся кубов (там будут артефакты). Соседние воксели не являются независимыми для генерации сетки, а шейдеры являются более сложными и обычно создают более сложную геометрию. Рендеринг данных вокселей с высоким LOD может быть очень медленным.

  • Огромные требования к хранилищу : для хранения данных вокселей требуется много памяти . По этой причине зачастую невозможно загрузить данные вокселей в VRAM, так как вам придется использовать меньшие текстуры, чтобы компенсировать это, даже на современном оборудовании.

Непрактично использовать вокселы для игр, которые не используют воксельные функции, такие как деформируемая местность, но в некоторых случаях это может привести к интересной игровой механике. Воксельные движки чаще встречаются в старых играх , но есть и более новые примеры:

  • Двигатель Atomontage : рендеринг Voxel.

  • Черви 4: Использует "покселы". Согласно Википедии это смесь вокселей и полигонов.

  • Minecraft: использует воксел для представления местности в оперативной памяти, графика является полигональной графикой. Это в основном программное обеспечение рассчитано, хотя.

  • Terraria: пример для 2D вокселей. Я не знаю, как это делает.

  • Воксели в сочетании с физикой : не игра. но это красиво демонстрирует потенциал разрушения.

  • Voxatron : игра, использующая вокселы практически для всей графики, включая меню и HUD.

Сетки

Многоугольные сетки - это самый гибкий и точный способ хранения и рендеринга местности. Они часто используются в играх, где требуется точное управление или расширенные функции местности.

Плюсы:

  • Очень быстро : вам нужно только сделать обычный расчет проекции в вершинном шейдере. Геометрический шейдер не нужен.

  • Очень точно : все координаты хранятся индивидуально для каждой вершины, поэтому их можно перемещать по горизонтали и увеличивать плотность сетки в местах с более мелкими деталями.

  • Низкое влияние на память : это также означает, что мешу обычно требуется меньше памяти, чем карте высот, поскольку вершины могут быть более разреженными в областях с менее мелкими объектами.
    (См. Триангулированная нерегулярная сеть в Википедии).

  • Нет артефактов : сетка отображается как есть, поэтому не будет никаких сбоев или странных границ.

  • Расширенные возможности местности : можно оставлять ямы и создавать выступы. Туннели бесшовные.

Минусы:

  • Плохой динамический LOD : возможно только с предварительно вычисленными сетками. Это приведет к «скачкам» при переключении без дополнительных данных для сопоставления старых и новых вершин.

  • Нелегко изменить : поиск вершин, соответствующих области, которую нужно изменить, идет медленно.

  • Не очень эффективен для обнаружения столкновений : в отличие от карт высот и данных вокселей, адрес памяти для определенного местоположения обычно не может быть вычислен напрямую. Это означает, что физика и игровая логика, которые зависят от точной геометрии поверхности, скорее всего будут работать медленнее, чем с другими форматами хранения.

Ландшафт полигона часто используется в играх, которые не имеют больших открытых площадок или не могут использовать карту высот из-за недостаточной точности и вылетов. У меня нет списка, но я уверен, что

  • каждый 3D Зельда и

  • каждая 3D игра Марио

использовать этот.

Другие методы

Можно создать ландшафт целиком в шейдерном конвейере. Если алгоритм работает только в фрагментном / пиксельном шейдере, детализация может быть практически неограниченной, а влияние памяти практически равно нулю. Очевидные недостатки почти не контролируют форму и проблемы, когда камера пересекает исходную поверхность рендеринга. Это все еще полезно в космических играх, где игроки не взаимодействуют с поверхностью планеты. Анимации параметров лучше всего работают с этим типом ландшафта.

Должна быть возможность загрузить сгенерированную геометрию ландшафта с графической карты, чтобы использовать ее для остальной части игрового движка, но я не знаю, какова ее производительность или было ли это сделано до сих пор.

Вывод

Не существует метода, который бы хорошо работал для каждого сценария, но его довольно легко выбрать для определенной задачи:

  • Карты высот являются лучшим решением, если вам не нужны свесы или отверстия на поверхности местности и вы используете физику или динамическую местность. Они масштабируемы и хорошо работают для большинства игр.

  • Сетки имеют высочайшую точность и могут описывать выступы, отверстия и туннели. Используйте их, если у вас сложная местность, которая не часто меняется.

  • Воксели хороши для описания очень динамичной местности со многими сложными функциями. Избегайте их рендеринга напрямую, так как они требуют большого объема памяти и обработки.

  • Другие методы могут быть лучше, чем любой из вышеперечисленных, если вам не нужно взаимодействовать с местностью или вам нужна очень подробная графика. Они обычно работают только для очень определенных сценариев.

Можно комбинировать разные методы, чтобы получить объекты из более чем одного, например, путем мозаичной сетки ландшафта с картой высот, чтобы увеличить структуру детали скалы.

Динамическая генерация рельефа активно используется в процедурном космическом моделировании, и некоторые из них стали действительно продвинутыми в последние годы . На форумах этих проектов должны быть ресурсы по этой теме.

Tamschi
источник
3
Исходный движок не использует карты высот для своей местности. Они используют тесселяционные четырехугольники, называемые «Смещения» developer.valvesoftware.com/wiki/Displacement
Tetrad
1
Это хороший ответ, я бы дал +3, если бы это было возможно. Спасибо за подробную информацию, высоко ценится.
Joltmode
@Tetrad Доступные разрешения для смещений - степени двойки (общее ограничение для текстурных буферов), единственная координата, сохраняемая для каждой вершины, - это высота, а карты высот местности отображаются в виде мозаичных квадратов. Вики также говорит, что стоимость рендеринга смещений ниже, чем у обычной геометрии. Я думаю, будет справедливо предположить, что это одно и то же с разными именами.
Тамши
1
@NickWiggill Значение слова «воксель», похоже, сильно изменилось за последние 10 лет. Я собираюсь использовать текущее определение вокселей в Википедии как значения на обычной трехмерной сетке . Запись на Outcast упоминает различие в значении. Я добавил к своему ответу, чтобы уточнить это.
Тамши
2
Примечание: «Гигантская территория» также называется « Триангулированная нерегулярная сеть » (сокращенно TIN) в ГИС; и он обычно значительно меньше памяти, чем карты высот с тем же эффективным разрешением, поскольку он не беспокоится о записи несущественных данных или мест, где нет данных. Первая готическая игра использовала это (не уверенный в других).
Мартин Сойка
8

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

  1. Карты высот - это двумерные представления высоты земли в каждой конкретной точке. Они часто хранятся как изображения в оттенках серого, где яркость представляет высоту этой точки. Voxels - это в основном 3D растровое изображение. Существует множество способов визуализации пространства вокселей.

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

  3. Тот с наименьшим количеством треугольников сделает самый быстрый: 3

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

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

CiscoIPPhone
источник
1
Одно замечание, касающееся пункта 3, в то время как графический процессор заботится только о количестве полигонов, все еще есть сторона создания геометрии. Генерация геометрии для поля вокселей обычно является более медленным процессом (блоки / марширующие кубы являются более сложными процессами), чем рельеф местности (это простой процесс), или на основе многоугольника (который, очевидно, уже является данными геометрии). Редактировать: это также зависит от того, хотите ли вы, чтобы местность была деформируемой.
Майкл
Для 3-й точки ... Ну, карту высот еще нужно обработать, и только тогда она превращается в геометрию, верно? Имея это в виду, полигональная сетка будет немного быстрее? Не могли бы вы указать некоторые методы, используемые для визуализации вокселей?
Joltmode
2
Вы можете использовать геометрический шейдер для создания сетки из карты высот. Таким образом, вы сохраняете только карту высот и такие параметры, как положение и разрешение, в то время как геометрия генерируется для каждого кадра в конвейере шейдера. Это быстрее, чем марширующие кубы, и медленнее, чем полигональная сетка. Преимущество heighmaps заключается в низком потреблении памяти: только немного больше, чем 1/3 того, что потребуется для меша. Недостатком является то, что он не такой гибкий (без мелких деталей, без выступов). Вы можете динамически настраивать детали сгенерированной сетки, но это вызывает смещение геометрии.
Тамши
@ Тамски, если бы вы дали ответ, именно то, что я искал. :)
joltmode
@ Я посмотрю, смогу ли я отформатировать это и найду еще несколько примеров.
Тамши