карты высот
С помощью карты высот вы сохраняете только компонент высоты для каждой вершины (обычно в виде 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 игра Марио
использовать этот.
Другие методы
Можно создать ландшафт целиком в шейдерном конвейере. Если алгоритм работает только в фрагментном / пиксельном шейдере, детализация может быть практически неограниченной, а влияние памяти практически равно нулю. Очевидные недостатки почти не контролируют форму и проблемы, когда камера пересекает исходную поверхность рендеринга. Это все еще полезно в космических играх, где игроки не взаимодействуют с поверхностью планеты. Анимации параметров лучше всего работают с этим типом ландшафта.
Должна быть возможность загрузить сгенерированную геометрию ландшафта с графической карты, чтобы использовать ее для остальной части игрового движка, но я не знаю, какова ее производительность или было ли это сделано до сих пор.
Вывод
Не существует метода, который бы хорошо работал для каждого сценария, но его довольно легко выбрать для определенной задачи:
Карты высот являются лучшим решением, если вам не нужны свесы или отверстия на поверхности местности и вы используете физику или динамическую местность. Они масштабируемы и хорошо работают для большинства игр.
Сетки имеют высочайшую точность и могут описывать выступы, отверстия и туннели. Используйте их, если у вас сложная местность, которая не часто меняется.
Воксели хороши для описания очень динамичной местности со многими сложными функциями. Избегайте их рендеринга напрямую, так как они требуют большого объема памяти и обработки.
Другие методы могут быть лучше, чем любой из вышеперечисленных, если вам не нужно взаимодействовать с местностью или вам нужна очень подробная графика. Они обычно работают только для очень определенных сценариев.
Можно комбинировать разные методы, чтобы получить объекты из более чем одного, например, путем мозаичной сетки ландшафта с картой высот, чтобы увеличить структуру детали скалы.
Динамическая генерация рельефа активно используется в процедурном космическом моделировании, и некоторые из них стали действительно продвинутыми в последние годы . На форумах этих проектов должны быть ресурсы по этой теме.