Оптимизация ландшафта
Оптимизация Landscape Terrain#
Производительность Landscape Terrain зависит от потоковой передачи данных, лежащей в основе его работы: загружаются только графические данные областей, видимых камерой в данный момент, и уничтожаются, когда они больше не нужны. Неоптимизированные настройки потоковой передачи вызывают заметную загрузку областей при движении камеры.
Общий жизненный цикл графических данных можно представить следующим образом:
- Система определяет тайлы, видимые в данный момент в окне просмотра, их пространственный размер и максимально доступный мип-уровень в зависимости от расстояния, ограничений плотности местности и настроек потоковой передачи.
- Требуемые графические данные запрошенных тайлов базовых текстур загружаются из ресурсов .lmap кусками по 128×128 пикселей и кэшируются в ОЗУ (кэш ЦП) для использования в расчетах пересечений и физике.
- Полученные данные загружаются в GPU и при необходимости кэшируются в видеопамяти (кэш GPU).
- Данные нескольких Landscape Layer Maps (текстуры Albedo, Height и Mask) смешиваются в соответствии с Настройки смешивания .
- Базовые текстуры смешиваются с detail-текстурами (если таковые есть).
- Окончательные текстуры для каждого из трех компонентов Landscape Terrain (Albedo, Normal и Height) записываются в виртуальную текстуру, заменяя самые старые фрагменты.
- Результат визуализируется во вьюпорте с учетом адаптивной аппаратной тесселяции и смещения.
- Текстуры заменяются более новыми данными в кеше, когда они больше не нужны.
Профилирование#
Поведение камеры в проекте, использующем объект Landscape Terrain, играет важную роль. Статическая камера подразумевает однократную загрузку данных при условии, что все текстуры помещаются в видеопамять. Когда активная камера значительно меняет свое положение и ориентацию, открывая незагруженные области, потоковая передача может сильно сказаться на производительности. Поэтому производительность и потребление памяти следует учитывать и настраивать для конечного набора камер и разрешения экрана целевой платформы.
Для удобного профилирования можно анимировать движение камеры через Tracker и запускать анимации для тестов.
Рекомендуется использовать инструмент Microprofile для подробной всесторонней оценки производительности объекта Landscape Terrain.
Используя Rendering Performance Profiler, вы можете оценить потребление памяти.
Рекомендации по оборудованию#
Стриминг подразумевает непрерывную загрузку данных с дискового хранилища. Если для вашего проекта требуется высокодетализированный ландшафт большого размера (несколько километров в поперечнике), рекомендуется рассмотреть возможность использования SSD, поскольку более медленные жесткие диски могут не обеспечить достаточную пропускную способность.
При этом многоядерные процессоры имеют здесь преимущество, позволяя распределять нагрузку без узких мест.
Ландшафтные слои#
Количество и плотность различных Landscape Layer Maps, которые определяют внешний вид ландшафта в текущий момент, являются важным фактором — несколько смешанных слоев с текстурами высокого разрешения могут привести к значительному падению производительности. В большинстве случаев имеет смысл объединить несколько текстур в одну в редакторе растровой графики.
Значение Current Data Density для Landscape Layer Map рассчитывается на основе его пространственного размера и разрешения используемых базовых текстур. Трудно не заметить, что для приличного ландшафта с высокой детализацией потребуется набор текстур чрезвычайно большого разрешения.
Также учитывается видимость слоев — если большой Landscape Layer Map перекрывает другие слои (имеет большее значение Order), то будут загружаться и рендериться только его графические данные.
Тот, у которого значение 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), чтобы включить визуализацию передаваемых тайлов. В этом режиме цветные области показывают тайлы, которые в данный момент рендерятся в более низком разрешении, пока не будет загружен и рендерится самый высокий мип-уровень. Чем быстрее исчезнут цветные тайлы, тем лучше.
Кэш#
Значения по умолчанию параметров 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 адаптивно тесселируются на лету и смещаются на основе компонента карты высот виртуальной текстуры. Полигональная сетка разделена на несколько уровней детализации различной плотности в зависимости от расстояния до камеры. Настройки 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. Эта опция увеличивает количество отбракованных полигонов.