Ландшафт (Landscape Terrain)
Система Landscape Terrain представляет собой передовую технологию моделирование местности - самого важного объекта наружных сцен. Object Landscape Terrain позволяет реконструировать практически любой произвольный ландшафт с широким спектром функциональных возможностей:
- Практически бесконечная поверхность местности
- Невероятная детализация до 1 мм на пиксель
- Адаптивная аппаратная тесселяция с поддержкой карт смещения
- Динамическая модификация во время работы - кратеры, воронки, траншеи
- Простой и понятный API
- До 1024 детализированных материалов
- Система слоев с гибкими правилами наложения
- Поддержка биноклей / оптических прицелов (x20 / угол обзора до 1 градуса)
- Оптимизированный рендеринг и физическая производительность
- Поддержка одновременного редактирования командой 3D художников
- Отверстия на основе декалей
Система Landscape Terrain основана на принципе декомпозиции графических данных ландшафта, которые слишком велики, чтобы поместиться в графической памяти целиком, на меньшие прямоугольные секции, известные как "тайлы". Асинхронная потоковая передача этих плиток позволяет отображать только необходимые данные с полным уровнем детализации, независимо от поля зрения камеры с поддержкой нескольких камер. Гибкие настройки потоковой передачи позволяют настраивать рендеринг ландшафта даже для компьютеров с ограниченным объемом видеопамяти.
Смотрите также#
- Класс ObjectLandscapeTerrain для управления параметрами объекта Landscape Terrain через API
- Класс Landscape для редактирования ландшафта через API
- Материал ландшафта landscape_terrain_base
- Материал details landscape_terrain_detail_base
- Статья Редактирование ландшафта местности статья, чтобы узнать подробнее о редакторе кистей
- Статья Оптимизация Landscape Terrain.
Работа Landscape Terrain#
Система Landscape Terrain представлена двумя типами узлов:
- Объект Landscape Terrain представлен бесконечной плоскостью. Это главный узел, который отвечает за визуализацию и расчеты: этот объект отображает геометрию и графические данные, представленные в мире, и предоставляет настройки обнаружения пересечений. Также в нем хранятся данные деталей (Details).
В сцене может быть несколько объектов Landscape Terrain, но только один из них (активный) будет отрисован.
- Landscape Layer Map узлы хранят произвольные графические данные, используемые для рендеринга (высота, альбедо и маски), и представляют прямоугольные слои ландшафта, которые могут быть расположены в сцене и смешаны друг с другом, составляя пейзаж.
Графические данные из Landscape Layer Maps и детали (исходные полноразмерные текстуры и сгенерированные MIP-карты) загружаются асинхронно потоками и передаются в основную виртуальную текстуру (Virtual Texture), на основе которой визуализируется Landscape Terrain. Виртуальная текстура состоит из 3 компонентов:
- Albedo - текстура RGBA8, определяющая данные цвета ландшафта,
- Normal - текстура RGBA8, обозначающая мелкие детали на поверхности ландшафта,
- Height - текстура R32F, определяющая данные о высоте, согласно которым геометрия ландшафта тесселируется.
Создание ландшафта#
Чтобы создать Landscape Terrain в UnigineEditor, выполните следующие действия:
- В Create меню выберите Landscape -> Landscape Terrain. Щелкните в произвольном месте внутри окна просмотра редактора, чтобы добавить ландшафт.
Landscape Terrain создается с дочерним элементом Landscape Layer Map.
- Укажите данные о высотах, альбедо и масках для карты ландшафтного слоя, измените их при помощи Редактора кистей .
- Чтобы добавить еще один слой (inset), щелкните Create -> Landscape -> Landscape Layer Map.
Карты слоев#
Landscape Layer Maps представляют прямоугольные слои ландшафта. Создавая и располагая на сцене одну или несколько карт слоев, вы определяете внешний вид и функциональность ландшафта.
Каждый узел LandscapeLayerMap ссылается на ресурс .lmap, в котором хранится набор текстур:
- Heightmap используется для создания геометрии Landscape Terrain,
- Albedo текстура, представляющая данные цвета,
- До 20 одноканальных масок .
Альбедо и карта высот являются основными компонентами ландшафта, определяющими его внешний вид и форму, маски предоставляют дополнительные возможности. Обратите внимание, что плотность графических данных ландшафта ограничена параметрами рендеринга независимо от плотности исходных текстур.
Все компоненты Landscape Layer Map можно редактировать через Редактор кистей .
Маски#
Landscape Layer Maps может хранить до 20 масок, составляющих слои ландшафта, которые не видны непосредственно, но могут использоваться в определенных графических и логических задачах.
Landscape Layer Map разработан как общий пул данных, данные маски которого могут использоваться для добавления деталей (Details) к поверхности Landscape Terrain, используемой в логике (например, как классификационная карта почвенного покрова), а также другими объектами, такими как Трава, например.
Маски названы для удобства, имена масок синхронизированы с текущим используемым ObjectLandscapeTerrain. Вы можете переименовать каждую маску как с помощью параметров ObjectLandscapeTerrain (дважды щелкнув заголовок маски и введя новое имя), так и с помощью параметров LandscapeLayerMap в соответствующих полях Name без необходимости повторного импорта.
Каждая маска может быть представлена одноканальным изображением. В целях оптимизации данные масок хранятся в блоках - изображениях RGBA8 (каждый содержит 4 маски, по одной маске на каждый канал). Есть 5 блоков, так как на местности доступно 20 масок. Таким образом, данные маски 9th должны храниться в R-канале третьего блока (индекс = 2). Следующие параметры отображают информацию о соответствующей текстуре маски и могут использоваться для получения доступа к маске через API :
Mask Texture | Индекс используемого блока маски. |
---|---|
Channel | Используемый канал текстуры маски. |
Смешивание карт слоев#
При наложении друг на друга Landscape Layer Maps смешиваются покомпонентно, обеспечивая удобство процесса разработки. Следующие режимы наложения можно установить для каждого текстура карты ландшафтного слоя индивидуально:
- Additive - данные карты слоя добавляются поверх.
- Alpha Blend - цвета этой карты слоя и нижележащей карты смешиваются.
- Overlay - добавленные данные заменяют данные под ними.
- Multiplicative - цвета альбедо умножаются.
Кроме того, можно указать маску непрозрачности для каждой текстуры (при условии, что для режима Data Filling установлено значение From Tileset). Для этого укажите текстуру и ее канал, которые будут обрабатываться как маска непрозрачности для соответствующей текстуры:
Порядок смешанных слоев имеет значение, используйте более высокое значение Order для карт слоев, которые должны быть сверху.
Карты слоев могут различаться по плотности и размеру, поэтому легко создавать вставки разного качества и изменять поверхность ландшафта во время выполнения .
Совместное редактирование#
Смешивание карт отдельных слоев делает систему Landscape Terrain удобной для совместного редактирования. Команда 3D-художников может одновременно создавать отдельные карты слоев и создавать большой пейзаж по частям без конфликтов.
В сочетании с функциями UNIGINE для совместной разработки (например, Node Layer, Node Reference) система позволяет нескольким художникам одновременно разрабатывать отдельные области и слои ландшафта практически любой сложности.
Чтобы подготовить мир с Landscape Terrain для совместного редактирования через VCS , выполните следующее:
- Подготовьте слои узлов:
- Создайте новый Node Layer для каждого Landscape Layer Map, представляющего статическую область ландшафта. Для удобства рекомендуется сбросить трансформацию каждого Node Layer.
- Сделайте каждый Landscape Layer Map дочерним узлом к соответствующему Node Layer.
- После изменения содержимого или параметров любого Landscape Layer Map необходимо только сохранить уровень родительского узла и зафиксировать измененный актив и ресурсы *.node через вашу систему контроля версий.
- После оформления заказа и перезагрузки мира изменения будут применены и будут видны на рабочих станциях других членов команды.
- Динамические и повторяющиеся Landscape Layer Maps (например, кратеры или фрагменты следов) можно сохранить как Node References.
Модификация во время выполнения#
Легко реализовать транспортные средства, оставляющие следы во время движения, или даже экскаватор, роющий траншеи. Доступны два способа модификации ландшафта во время выполнения:
- Добавление слоев. Создание новых Landscape Layer Maps представляющих фрагменты траншей или ям для изменения рельефа местности. Этот способ аналогичен использованию Декалей : каждый слой представляет собой отдельный узел, поэтому вы можете управлять каждой модификацией отдельно. Кроме того, использование Landscape Layer Maps подразумевает отсутствие ограничений по плотности данных, что позволяет достичь реалистичных результатов с областями повышенной детализации.
-
Изменение буферов ландшафта. Низкоуровневая модификация ландшафта на базе CPU или GPU через API проста, как 1, 2, 3:
- Установите желаемую область, и Движок скопирует часть данных о местности для этой области в буфер.
- Измените буфер по своему усмотрению (высоту, цвет, маски или все данные сразу).
- По завершении Движок вставляет буфер обратно в ландшафт, заменяя старые данные.
Для получения дополнительной информации о модификации на базе CPU и GPU во время выполнения, пожалуйста, обратитесь к статье Класс Landscape.
Настройте параметры потоковой передачи для достижения соответствующей производительности модификации ландшафта во время выполнения.
Тайлинг и потоковая передача#
Сцена может содержать тысячи Landscape Layer Maps, поэтому полноразмерные графические данные Landscape Terrain могут быть слишком большими, чтобы полностью поместиться в видеопамяти. Вместо этого все ресурсы разбиты на более мелкие прямоугольные секции - тайлы переменной плотности в зависимости от расстояния до камеры.
Отдельные тайлы асинхронно загружаются в основную виртуальную текстуру при необходимости - только если в данный момент видны камере - от самого низкого до самого высокого доступного уровня MIP. Все тайлы имеют фиксированное разрешение в видеопамяти - 128×128 px.
Таким образом, уровень детализации Landscape Terrain и производительность сильно зависят от количества окон просмотра и их разрешения. При разработке проекта с использованием ландшафта следует учитывать производительность и потребление памяти и настраивать их для набора камер и разрешения экрана целевой платформы .
Гибкие настройки потоковой передачи позволяют настраивать рендеринг ландшафта даже для компьютеров с ограниченным объемом видеопамяти, но эти настройки зависят от используемого контента (расстояния, уровень детализации и т.д.) И требований (количества камер и окон просмотра и т.д.) и подлежат корректировке для каждого проекта индивидуально .
Для получения дополнительных сведений о настройке параметров потоковой передачи см. статьи Настройка визуализации и производительности а также Оптимизация ландшафта местности.
Детали (Details)#
Объект Landscape Terrain хранит визуальные настройки для 20 масок деталей, предназначенных для достижения лучшего уровня визуального качества при просмотре крупным планом. Детали представляют собой произвольные данные об альбедо, шероховатости и высоте (смещении), поэтому вы можете значительно улучшить внешний вид ландшафта. Детали применяются в соотвествии с масками Landscape Layer Map.
Настройки детализации, доступные в параметрах ObjectLandscapeTerrain, позволяют определять внешний вид детали, добавлять до 1024 деталей в маску и определять материал каждой детали.
Для получения дополнительной информации о добавлении деталей, пожалуйста, обратитесь к статье Настройка деталей.
Пересечения и столкновения#
Система Landscape Terrain обеспечивает обнаружение пересечений и столкновений с поверхностью ландшафта так же, как и для обычных мешей. Чтобы включить обнаружение столкновений и / или пересечений для ландшафта:
- Включите флаг Collider Object на вкладке Node.
- Перейдите на вкладку Surface и включите флаги Intersection и Collision, настройте битовые маски .
- Для карт ландшафтного слоя, которые должны участвовать в столкновениях и пересечениях, включите соответствующие флаги Collision и Intersection.
Пересечения обнаруживаются с переменной точностью, начиная с меньшего значения и заканчивая более высоким.
Обычно изменять эти значения не требуется. В случае ошибок обнаружения пересечения вы можете открыть параметры Landscape Terrain и попробовать настроить значения начальной и конечной точности и включить кубическую фильтрацию текстур для оптимального баланса, но будьте осторожны, так как это может значительно повлиять на производительность и точность:
Collision Bicubic Filter | Включает бикубическую фильтрацию текстур для обнаружения столкновений. |
---|---|
Intersection Bicubic Filter Normal | Включает бикубическую фильтрацию текстуры нормалей для обнаружения пересечения. |
Intersection Bicubic Filter Height | Включает бикубическую фильтрацию текстуры высот для обнаружения пересечения. |
Intersection Precision Begin | Начальная точность обнаружения пересечений. |
Intersection Precision End | Конечная точность обнаружения пересечений. |
Отверстия на основе декалей#
В некоторых случаях вам может потребоваться вырезать участок поверхности местности. Для этой цели используется функция Отверстия на основе декалей, поддерживаемая Landscape Terrain.
Убедитесь, что функция Holes включена и поместите любую декаль (ортогональную, проецируемую или на основе меша) в желаемом месте и назначьте декали материал decal_terrain_hole_base:
- В меню Create выберите Landscape -> Hole Projected (или другой). Щелкните в окне просмотра редактора, чтобы добавить декаль.
- Отрегулируйте трансформацию и параметры материала декали.
Это создаст отверстие в поверхности Landscape Terrain.
Поддерживается высокая точность пересечения с отверстиями ландшафта на основе декалей, что обеспечивает обнаружение столкновений а также все соответствующие функции редактора, такие как выделение , выравнивание по поверхности , и так далее.
Настройка поверхности ландшафта#
Интеграция статических мешей в ландшафт упрощается при использовании функции Terrain Lerp.
Включенное состояние Terrain Lerp материала mesh_base отмечает объект, который должен быть покрыт спроецированными текстурами Landscape Terrain, что делает ненужным настройку материалов для поверхностей этого объекта.
Эта функция подходит для создания любых вставок, таких как пещеры и туннели через горы на местности. Например, на картинке ниже туннель объединяется путем простого вырезания некоторого участка местности с декалью и заменив его мешем с включенным параметром Terrain Lerp.