This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Режимы вывода изображения
Физика
Браузер SDK 2
Лицензирование и типы лицензий
Дополнения (Add-Ons)
Демонстрационные проекты
API Samples
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Player-ноды
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
Унифицированный язык шейдеров UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Материалы и шейдеры
Rebuilding the Engine Tools
Интерфейс пользователя (GUI)
Двойная точность координат
API
Animations-Related Classes
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
VR-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Учебные материалы

Оптимизация ландшафта

Оптимизация Landscape Terrain#

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

Видимые проблемы с потоковой передачей.

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

  1. Система определяет тайлы, видимые в данный момент в окне просмотра, их пространственный размер и максимально доступный мип-уровень в зависимости от расстояния, ограничений плотности местности и настроек потоковой передачи.
  2. Требуемые графические данные запрошенных тайлов базовых текстур загружаются из ресурсов .lmap кусками по 128×128 пикселей и кэшируются в ОЗУ (кэш ЦП) для использования в расчетах пересечений и физике.
  3. Полученные данные загружаются в GPU и при необходимости кэшируются в видеопамяти (кэш GPU).
  4. Данные нескольких Landscape Layer Maps (текстуры Albedo, Height и Mask) смешиваются в соответствии с Настройки смешивания .
  5. Базовые текстуры смешиваются с detail-текстурами (если таковые есть).
  6. Окончательные текстуры для каждого из трех компонентов Landscape Terrain (Albedo, Normal и Height) записываются в виртуальную текстуру, заменяя самые старые фрагменты.
  7. Результат визуализируется во вьюпорте с учетом адаптивной аппаратной тесселяции и смещения.
  8. Текстуры заменяются более новыми данными в кеше, когда они больше не нужны.

Жизненный цикл графических данных ландшафта Terrain.

Профилирование#

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

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

Рекомендуется использовать инструмент Microprofile для подробной всесторонней оценки производительности объекта Landscape Terrain.

Этапы операции Landscape Terrain в выводе инструмента Microprofile.

Используя Rendering Performance Profiler, вы можете оценить потребление памяти.

Раздел вывода Rendering Performance Profiler, относящийся к Landscape Terrain.

Рекомендации по оборудованию#

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

При этом многоядерные процессоры имеют здесь преимущество, позволяя распределять нагрузку без узких мест.

Ландшафтные слои#

Количество и плотность различных Landscape Layer Maps, которые определяют внешний вид ландшафта в текущий момент, являются важным фактором — несколько смешанных слоев с текстурами высокого разрешения могут привести к значительному падению производительности. В большинстве случаев имеет смысл объединить несколько текстур в одну в редакторе растровой графики.

Примечание
Напротив, вы можете использовать несколько Landscape Layer Maps, которые ссылаются на один и тот же ресурс .lmap, без снижения производительности. Вы можете создать Node Reference, содержащий Landscape Layer Map, для распространения повторяющихся областей.

Значение Current Data Density для Landscape Layer Map рассчитывается на основе его пространственного размера и разрешения используемых базовых текстур. Трудно не заметить, что для приличного ландшафта с высокой детализацией потребуется набор текстур чрезвычайно большого разрешения.

Лучшая практика
Используйте базовые текстуры Landscape Layer Maps, чтобы создать грубый вид Landscape Terrain и уточните поверхность, используя детали для высокой детализации попиксельного качества.

Также учитывается видимость слоев — если большой Landscape Layer Map перекрывает другие слои (имеет большее значение Order), то будут загружаться и рендериться только его графические данные.

Схематическое изображение нескольких Landscape Layer Maps, перекрывающих друг друга.
Тот, у которого значение Order выше, перекрывает другие, и только его данные будут загружены и визуализированы.

Потоковая передача основана на использовании ранее загруженной геометрии для определения видимых областей местности. Загруженной геометрии при самом запуске мира нет, поэтому система ищет Landscape Layer Map с включенным флагом Culling и загружает предварительные низкоуровневые данные этого слоя. Если ваш мир содержит несколько слоев, один из которых представляет базовую форму местности, а другие используются как инсеты, размещенные в границах базового слоя и имеющие незначительное отличие от него по высоте, вам рекомендуется отключать Culling для инсетов и включать его для базового слоя. Таким образом можно уменьшить нагрузку на процессор при запуске мира.

Загрузка тайлов#

В каждом кадре система Landscape Terrain проверяет, какие тайлы следует загрузить и обновить. Увеличьте параметр Tiles Update Per Frame, чтобы все необходимые тайлы обновлялись вовремя. Однако, если это значение слишком велико, это может привести к падению производительности при потоковой передаче данных.

Скорость загрузки чанков графических данных зависит от значения Tiles Load Per Frame. Более высокие значения означают более быструю многопоточную загрузку листов, но более требовательную к производительности потоковая передача данных. Обратите внимание, что бессмысленно устанавливать это значение выше, чем Tiles Update Per Frame.

Таким образом, необходимо найти компромисс при настройке этих параметров.

Используйте помощник Landscape Terrain VT Streaming (или консольную команду render_show_landscape_terrain_vt_streaming 1), чтобы включить визуализацию передаваемых тайлов. В этом режиме цветные области показывают тайлы, которые в данный момент рендерятся в более низком разрешении, пока не будет загружен и рендерится самый высокий мип-уровень. Чем быстрее исчезнут цветные тайлы, тем лучше.

Помощник Landscape Terrain VT Streaming

Кэш#

Значения по умолчанию параметров Cache подходят для большинства случаев.

Если вы модифицируете слой с помощью кистей или ваш проект подразумевает модификацию ландшафта во время выполнения, увеличьте лимит GPU Cache Size и GPU Cache Life Time для лучшей производительности.

Когда дело доходит до оптимизации обнаружения пересечений и столкновений, выполняемых на стороне ЦП, увеличьте CPU Cache Size для повышения производительности.

Модификация в режиме реального времени#

Когда что-то изменяет загруженную область Landscape Terrain, затронутые тайлы должны быть повторно загружены с учетом изменений.

Увеличьте параметр Tiles Reload Per Frame — количество перезагружаемых тайлов на каждый кадр — чтобы изменения фиксировались быстрее.

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

Для получения более подробной информации см. Сделайте это во время выполнения раздел.

Детали (Details)#

Landscape Terrain позволяет добавить до 1024деталей (details) к маске, позволяющей создать достаточно детализированный и разнообразный вид ландшафта. С точки зрения оптимизации, минимизация количества деталей и текстур — это способ ускорить рендеринг.

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

Виртуальная текстура#

Окончательные текстуры для тайлов Landscape Terrain записываются в компоненты Virtual Texture (Albedo, Normal и Height). Увеличьте значение Texture Memory Size, чтобы гарантировать, что виртуальная текстура обеспечивает достаточную емкость для хранения загруженных фрагментов текстуры с высокой детализацией.

Компоненты виртуальной текстуры Landscape Terrain.

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

Рендеринг#

Полигоны поверхности Landscape Terrain адаптивно тесселируются на лету и смещаются на основе компонента карты высот виртуальной текстуры. Полигональная сетка разделена на несколько уровней детализации различной плотности в зависимости от расстояния до камеры. Настройки Geometry предоставляют много возможностей для оптимизации рендеринга.

Уровни детализации мозаичной геометрии.

Обратите внимание на следующие параметры:

  • При более низких значениях Geometry Progression на расстоянии генерируется меньше полигонов.
  • Настроив параметр Geometry Polygon Size, вы можете определить минимальный пространственный размер полигонов в случае чрезмерного уровня детализации.
  • Параметр Geometry Subpixel Reduction определяет минимальное отношение размера полигона (в пространстве экрана) к площади, видимой в окне просмотра. Этот параметр позволяет быстро уменьшить количество полигонов или просто удалить слишком маленькие полигоны, которые едва видны, для повышения производительности.
  • Установите меньшее значение Visibility Distance, чтобы отказаться от рендеринга слишком удаленных полигонов.

Вы можете уменьшить максимально допустимый уровень детализации для текстур альбедо, нормалей и высот Landscape Terrain, увеличив параметр Texel Size.

Уменьшите Target Resolution — разрешение буфера экрана для средства визуализации Ландшафтного ландшафта — чтобы повысить производительность за счет визуального качества.

Вы также можете уменьшить уровень детализации полигонов, обращенных к камере под косыми углами обзора (Detail Level By Angle), чтобы оптимизировать нагрузку потоковой передачи и потребление памяти.

Используются разные мип-уровни ландшафтных текстур на разном расстоянии. Переключитесь на качество Low или Medium Texture Filtering, чтобы повысить производительность за счет слегка видимого края между соседними уровнями MIP-карты.

Оптимизация отсечения#

Полигоны поверхности Landscape Terrain подлежат оптимизации отсечения по пирамиде видимости. Если полигон выпадает за пределы пирамиды видимости камеры (т. е. его положение на экране выходит за пределы вьюпорта), он отсекается при рендеринге. Можно включить режим Aggressive Frustum Culling, который подразумевает более жесткие требования к отрисовке полигонов и, соответственно, более высокую производительность.

Настройте параметры Culling для большей оптимизации:

  • Уменьшите значение Culling Frustum Padding, чтобы уменьшить размер области видимости.
  • Увеличьте пороговое значение Culling Back Face, чтобы отсечь больше полигонов, обращенных к косым углам камеры.
  • Увеличьте множитель Culling Oblique Frustum, чтобы отсеять больше полигонов за наклонной плоскостью усеченного конуса.

Оптимизация Terrain Global#

Материал terrain_global_base предоставляет несколько параметров для точной настройки оптимизации геометрии ландшафта, теней и смешивания LOD:

  • Параметр Subpixel Polygons Reduction определяет минимальное отношение размера полигона (в пространстве экрана) к площади, видимой в окне просмотра. Этот параметр позволяет убрать слишком маленькие полигоны, которые едва видны, с целью повышения производительности.
  • Параметр Back Face Culling используется для отбраковки лоскутов тесселяции, обращенных обратной стороной к камере. Количество полигонов можно значительно уменьшить (например, отбрасывая обратные грани большой горы) и повысить производительность.
  • Параметр Frustum Culling Padding используется для управления отбраковкой фрагментов тесселяции за пределами усеченной пирамиды видимости.
  • Параметр Shadow Offset позволяет настроить внешний вид теней в случаях, когда низкополигональные LOD отбрасывают тени на высокополигональные LOD в областях, где теней быть не должно.
  • Параметр LOD Padding можно использовать для настройки плавных переходов между уровнями детализации ландшафта и повышения производительности.

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

Также вы можете использовать оптимизацию отсечения усеченной пирамиды, чтобы повлиять на производительность: включите параметр Fast Frustum Culling на вкладке States. Эта опция увеличивает количество отбракованных полигонов.

Последнее обновление: 13.12.2024
Build: ()