Jump to content

Общие вопросы по ландшафту.


photo

Recommended Posts

Добрый день.

Возникло несколько вопросов, на которые я не нашёл ясного ответа. И для которых нет смысла создавать отдельные темы.

   На сайте указано, что слишком большое количество карт слоёв может снизить производительность. Хотелось бы более развёрнуто, что значит слишком? Влияет ли только количество или размер тоже (наверняка, но что и на что). Где узкое место в железе, чтобы понимать как распределять ресурсы (может что то дешевле реализовать масками, деталями). Например, как скажется на производительности 10 карт разрешением 16к*16к пикселей? Или 100 карт 100*100 пикселей.

   В классе LandscapeTextures Class метод getOpacityHeight получает R32F текстуру с данными прозрачности. Для чего эти данные используются?

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

С Уважением Константин.

 

Link to comment

Добрый день, @Vasara!

Это довольно комплексная тема, постараюсь коснуться каждого фактора. Вся производительность основана на стриминге данных. Весь ландшафт стримится потайлово (размер тайла фиксированный - 128×128 px), для каждого компонента отдельно (Albedo, Heightmap, данные о масках) и только в тех местах, что видны камерой, формат ассетов Landscape Layer Map подразумевает фрагментированную загрузку по востребованию.

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

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

Важную роль играет поведение камеры. Статичная камера предполагает единоразовую загрузку данных (если всё помещается в видеопамять), в то время, как при движущейся, вся детерминированность может пропасть, а стриминг сильно ударит по производительности. Здесь нет чётких правил, только рекомендации: использовать Microprofile и отслеживать время загрузки, для удобства профилирования можно анимировать перемещение камеры через Tracker и запускать анимацию для тестов.

Количество статичных слоёв не сильно влияет на производительность, примером могут служить демо-проекты сэмплы с Landscape Terrain со множеством следов, сделанных при помощи Landcsape Layer Maps. Другое дело обстоит с динамическими слоями, здесь тайлы уже не только загружаются, но и перезагружаются. Если очень много изменений в слоях за один кадр, число перезагрузок может превысить пропускную способность системы и производительность упадёт в ноль. Поэтому очень важно следить на настройками стриминга и динамикой изменения слоёв и тайлов, избегать покадрового изменения крупных слоёв, вызывающих перезагрузку множества тайлов.

Узкое место может быть во всех основных компонентах системы, особенно в диске, для ландшафтов крупного размера (несколько километров в поперечнике) и с деталями большого разрешения, лучше использовать SSD, более медленные HDD сделают стриминг заметным при резком изменении положения камеры. И, конечно, необходимо следить за такими настройками, как Tiles Load Per Frame, Tiles Update Per Frame и размер виртуальной текстуры (больший размер позволит хранить больше загруженных тайлов). Многоядерные процессоры здесь имеют преимущество, т.к. позволяют распределить загрузку.

Обязательно постараемся покрыть этот вопрос максимально прозрачно в документации, спасибо.

On 10/14/2020 at 10:48 PM, Vasara said:

 В классе LandscapeTextures Class метод getOpacityHeight получает R32F текстуру с данными прозрачности. Для чего эти данные используются?

Метод getOpacityHeight возвращает текстуру непрозрачности для высот участка террейна, которая может появиться при импорте карты высот Landscape Layer Map с картой непрозрачности или при стирании высоты кистью Eraser.

Надеюсь, это поможет. Спасибо!

  • Like 2
Link to comment

Спасибо, такие статьи очень помогают. Если ошибиться с методом реализации, можно угробить несколько месяцев в никуда.

Link to comment
  • 2 years later...

При редактировании кистями ландшафт  ,кисть выравнивания ландшафта по определеной высоте ALT И ПРАВАЯ КНОПКА МЫШИ при выставление смешивания.В версии UNIGINE 2.14 работала хорошо,но и в 15 и сейчас в 16 не работает или работает не коректно.В чем может быть проблема Спасибо

 

Link to comment

Добрый день!

@aver70 По изображению довольно сложно сказать что именно не так. Но, в релизе 2.16 действительно изменилась логика редактирования высот и возможно что сейчас для корректной работы лерпа данных также необходимо добавить "подложку" в лице дефолтной "LandscapeLayerMap" для которой необходимо задать "Order" ниже, чем для той "LandscapeLayerMap" с которой вы работаете.

Спасибо!

Link to comment

На рисунке показано два уровня высоты.Красным выделены настройки кисти.При нажатии на первом уровне alt+ левая кнопка мыши , уровень два должен быть выровнен по высоте первого уровня.Но данная кисть не выравнивает. Что не так или что нужно настроить683265691__2022-11-02_213912832.thumb.png.fd7938fac4dc469ec7c66681e12e3c1f.png

Link to comment

Добрый день!

@aver70 Попробуйте сделать следующим образом:

1. Верните значения по умолчанию для Opacity и Contrast кисточки нажав на кнопку Reset рядом со слайдером;

2. Наведите курсор на первый участок и нажмите кнопку C на клавиатуре (Pick Data - Снять значения);

3. В окне Height кисточки появится снятое значение высоты;

4. Нажав левую кнопку мыши попробуйте порисовать по второму участку (кнопку ALT при этом удерживать не надо)

Спасибо!

Link to comment
×
×
  • Create New...