Настройка уровней детализации
Использование уровней детализации (LODs) — это основной способ оптимизации вашего проекта. Суть в том, чтобы переключить модель с высокой детализацией на версию с меньшим количеством деталей, когда она находится далеко от камеры. Для этого вам нужно взять детальную модель и создать несколько ее версий, каждая с меньшим количеством полигонов.
В UNIGINE модель с LOD может быть представлена в виде одного объекта Mesh с несколькими поверхностями представляющими LOD-ы. Настройки LOD позволяют указать расстояние, на котором одна поверхность должна быть переключена на другую.
LOD можно настроить одним из следующих способов:
- Автоматически при импорте модели в UNIGINE.
- Вручную с помощью 3D-редактора и UnigineEditor.
Смотрите также#
- Глава Уровни детализации в статье об управлении мирами
- Вкладка Surfaces инструмента Content Profiler для мониторинга уровней детализации поверхностей при помощи фильтров Min/Max Visibility и Min/Max Fade
Автоматическая настройка LOD#
Автоматическая настройка LOD подразумевает, что LOD для модели назначаются и настраиваются при ее импорте в UNIGINE.
При импорте модели вы можете выбрать один из следующих вариантов:
- Автоматическая генерация LOD, выполняемая UNIGINE. В этом случае вам нужна только ваша высокополигональная модель — все остальное сделает движок.
- Использование постфиксов имени для указания LOD. В этом случае вам следует предварительно подготовить отдельные меши для разных уровней детализации вашей модели в стороннем ПО.
Автоматическая генерация LOD#
UNIGINE позволяет автоматически генерировать уровни детализации для вашей высокополигональной модели прямо при ее импорте, экономя ваше время, поскольку в этом случае вам не нужно вручную готовить уровни детализации, используя какое-либо стороннее программное обеспечение. Функционал основан на использовании библиотеки meshoptimizer.
Для автоматической генерации LOD при импорте модели в UNIGINE, просто перетащите ее в Asset Browser и выполните следующие действия:
-
В окне настроек импорта выберите Auto-Generated в выпадающем списке Use LODs.
- Установите необходимое количество LOD. Например, мы будем генерировать 3.
-
Укажите значение Target Polycount (%) для каждого уровня детализации. Оно определяет степень упрощения геометрии для каждого уровня детализации.
- Для LOD 0 оставьте значение по умолчанию 100 процентов.
- Для LOD 1 установите 60 процентов от исходного количества полигонов.
- Для LOD 2 установите 30 процентов от исходного количества полигонов.
-
Укажите минимальное и максимальное расстояния видимости для каждого уровня детализации. Максимальная дальность видимости каждого LOD должна быть равна минимальной дальности видимости следующего LOD. Максимальное расстояние видимости последнего LOD должно быть равно inf.
- Для LOD 0 оставьте расстояние по умолчанию Min и установите расстояние Max на 5 единиц. Это означает, что как бы близко камера не подходила к мешу, поверхности все равно будут видны.
- Для LOD 1 установите расстояния Min и Max в единицах 5 и 30. Это означает, что когда камера находится на расстоянии 5 единиц от меша, первые поверхности LOD не будут видны, а поверхности второго LOD-а будут отображаться на расстоянии 30 единиц.
- Для LOD 2 установите расстояние Min в 30 и оставьте значение по умолчанию Max. После 30 единиц поверхности второго LOD-а не будут видны, и будут отображаться поверхности третьего LOD-а.
-
Укажите минимальное и максимальное расстояния fade для каждого уровня детализации:
- Для LOD 1 оставьте расстояние по умолчанию Min и установите расстояние Max на 10 единиц. Это увеличит расстояние, на котором поверхности LOD все еще видны, и обеспечит плавный переход.
- Для LOD 2 установите расстояние Min на 10 единиц. Через 5–15 единиц вторая поверхность LOD будет плавно проявляться. Расстояние Max установлено на 20 единиц. После 30 до 50 единиц второй уровень детализации плавно исчезнет.
- Для LOD 3 установите расстояние Min на 20 единиц и оставьте значение по умолчанию Max. Поверхности третьих LOD начнут плавно исчезать с 30 до 50 единиц.
- Оставьте значение 0 для опции Normals Preserve, чтобы игнорировать нормали и упростить топологию меша.
- Оставьте значение по умолчанию 60 для параметра Recalculate Normals by Angle.
Движок автоматически сгенерирует и настроит все LOD, используя указанные параметры.
Объединение LOD по постфиксам#
Если вы готовите LOD в стороннем программном обеспечении, вы можете автоматически назначать и настраивать LOD модели на основе постфиксов имени.
Шаг 1. Экспорт модели из стороннего программного обеспечения#
В качестве примера мы будем использовать модель tubes_constructor_chrome_1120.fbx из демонстрации Oil Refinery (доступной в UNIGINE SDK Browser). Этот FBX состоит из нескольких мешей, каждый из которых представляет собой элемент конструктора труб.
Выполните следующие действия в 3D-редакторе:
-
Создайте несколько мешей для разных уровней детализации вашей модели: детальный меш для ближайшего уровня детализации и несколько менее подробных мешей для более дальних уровней детализации.
Например, для каждого меша, представляющего элемент конструктора труб (10 мешей), есть 3 меша, представляющих LOD:
- Экспортируйте меши как файл .fbx.
Шаг 2. Импорт модели в UNIGINE#
Чтобы импортировать модель в UNIGINE, перетащите ранее экспортированный файл FBX в Asset Browser и выполните следующие действия для автоматического создания LOD на основе постфиксов имени:
- Выберите Combine By Postfixes в раскрывающемся списке Use LODs.
- Укажите максимальное количество LOD, хранящихся в контейнере FBX (в нашем случае 3).
-
Для каждого уровня детализации определите постфикс, который будет использоваться для группировки объектов в файле FBX в соответствующий уровень детализации.
Постфикс должен быть таким же, как тот, который используется при создание объектов в 3D редакторе .Для модели конструктора труб необходимо указать следующие постфиксы:
Имена сгенерированных поверхностей будут такими: material_name + LOD_postfix.
-
Укажите минимальное и максимальное расстояние видимости для каждого уровня детализации. Максимальная дальность видимости каждого LOD должна быть равна минимальной дальности видимости следующего LOD. Максимальное расстояние видимости последнего LOD должно быть равно inf.
- Для _lod_0 оставьте расстояние по умолчанию Min и установите расстояние Max в единицах 5. Это означает, что как бы близко камера не подходила к мешу, поверхности все равно будут видны.
- Для _lod_1 установите расстояния Min и Max в единицах 5 и 30. Это означает, что когда камера находится на расстоянии 5 единиц от меша, первые поверхности LOD не будут видны, а поверхности второго LOD-а будут показаны на расстоянии 30 единиц.
- Для _lod_2 установите расстояние Min в 30 и оставьте значение по умолчанию Max. После 30 единиц поверхности второго LOD-а не будут видны, и будут отображаться поверхности третьего LOD-а.
-
Укажите минимальное и максимальное расстояние перехода для каждого уровня детализации:
- Для _lod_0 оставьте расстояние по умолчанию Min и установите расстояние Max на 10 единиц. Это увеличит расстояние, на котором поверхности LOD все еще видны, и обеспечит плавный переход.
- Для _lod_1 установите расстояние Min на 10 единиц. После 5 до 15 единиц вторая поверхность LOD будет плавно исчезать. Расстояние Max установлено на 20 единиц. После 30 до 50 юнитов вторая поверхность LOD будет плавно исчезать.
- Для _lod_2 установите для расстояния Min значение 20 и оставьте значение по умолчанию Max. Поверхности третьих LOD начнут плавно исчезать с 30 до 50 единиц.
В результате будет импортирован контейнер FBX с 10 мешами. Каждый меш будет иметь 3 поверхности, представляющие уровни детализации.
Шаг 3. Добавление модели в сцену#
Добавьте экспортированную модель в мир как описано здесь. Все LOD будут созданы и настроены в соответствии с указанными значениями импорта:
При необходимости настройте поверхности LOD на вкладке Node окна Parameters:
- Настройте параметры Min and Max Parent. В этом руководстве мы используем значения по умолчанию 1.
Попробуйте переместить камеру вперед/назад, чтобы проверить, как переключаются уровни детализации:
Ручная настройка LOD#
Ручная настройка LOD подразумевает, что LOD для модели создаются в стороннем 3D-редакторе, а параметры LOD настраиваются, когда модель уже импортирована и добавлена в сцену.
Шаг 1. Экспорт LOD#
Чтобы экспортировать меш с LOD, сделайте следующее:
-
В своем 3D-редакторе создайте детальную модель и ряд моделей с небольшим количеством полигонов. Например, можно просто скопировать существующую детальную модель и уменьшить количество полигонов.
Вы должны создать отдельный LOD для каждой части модели, которой назначен уникальный материал.В качестве примера мы будем использовать модель осциллографа из бенчмарка Superposition (доступна через UNIGINE SDK Browser). Эта модель уже содержит 3 LOD.
10109 polygons 5004 polygons 2583 polygons LOD 0LOD 1LOD 2 - Создайте LOD в соответствии с конвейером, используемым вашим 3D-редактором. Например, в 3ds Max вы должны группировать меши, представляющие уровни детализации, а затем создавать уровни детализации с помощью утилиты Level of Detail.
- Экспортируйте модель с уровнями детализации в виде файла *.fbx.
Шаг 2. Импорт модели в UNIGINE#
Для импорта модели в UNIGINE:
- Нажмите Import в Asset Browser и выберите экспортированный файл FBX.
- В окне Import FBX включите опцию Merge Static Meshes. В противном случае LOD будут импортированы как отдельные меши, а не как поверхности одного меша.
- Импортируйте модель.
Если вы выберете импортированный FBX, его содержимое будет предварительно просмотрено в разделе Hierarchy окна Parameters.
Шаг 3. Добавление модели в сцену#
Добавьте экспортированную модель в мир как описано здесь . По умолчанию все поверхности (LOD) видны одновременно:
Поверхности экспортированной модели, представляющие уровни детализации, можно найти на вкладке Node окна Parameters:
Шаг 4. Настройте LOD#
В этом разделе объясняется, как настроить LOD мешей, чтобы плавно переключать LOD с высокой детализацией на низкую, когда камера начинает удаляться. Поверхности LOD имеют 3 параметра:
Дистанции видимости и перехода
Для каждой поверхности LOD вы должны указать дистанцию видимости и дистанцию перехода. Для настройки поверхностей LOD выполните следующие действия:
- Откройте окно World Hierarchy и выберите добавленную ноу.
-
В группе Surfaces вкладки Node (окно Parameters) выберите первую поверхность LOD :
- Установите его расстояние Maximum Visibility на 5. Это означает, что когда камера находится на расстоянии 5 единиц от меша, первые поверхности LOD не будут видны.
- Оставьте расстояние Minimum Visibility равным -inf. Это означает, что как бы близко камера не подходила к мешу, поверхности все равно будут видны.
- Установите расстояние Maximum Fade на 10 единиц. Это увеличит расстояние, на котором поверхности LOD все еще видны, и обеспечит плавный переход.
Вы можете отключить другие поверхности LOD, чтобы увидеть результат текущих настроек поверхности LOD. -
Выберите поверхности второго LOD-а и:
- Установите расстояние Minimum Visibility вторых поверхностей LOD, чтобы оно начиналось точно там, где заканчивается расстояние Maximum Visible первых поверхностей LOD: в единицах 5. Это означает, что когда первые поверхности LOD начнут исчезать, будут показаны поверхности второго LOD-а.
- Установите расстояние Maximum Visibility на 30 единиц. После 30 единиц поверхности второго LOD-а начинают исчезать, и будут отображаться поверхности третьего LOD-а.
- Установите расстояние Minimum Fade на 10 единиц. После 5-15 юнитов поверхность второго уровня детализации плавно исчезнет.
- Установите расстояние Maximum Fade на 20 единиц. После 30-50 юнитов второй уровень детализации плавно исчезнет.
- Выберите третью поверхность LOD и:
- Установите расстояние Minimum Visibility на 30 единиц. Это означает, что когда поверхности второго LOD-а начнут исчезать, будут показаны поверхности третьего LOD-а.
- Установите расстояние Maximum Visibility в единицах 300. После 300 единиц поверхности третьего LOD-а полностью исчезают.
- Установите расстояние Minimum Fade на 20 единиц. Поверхности третьего уровня детализации начнут плавно увеличиваться с 30 до 50 единиц.
-
Установите расстояние Maximum Fadeна 50 единиц. После 300 единиц меш начнет плавно исчезать.
Если вы хотите, чтобы последняя поверхность LOD всегда была видимой, установите для параметра «Максимальное расстояние видимости» значение inf.
Вы должны указать одинаковые настройки для каждой поверхности одного и того же LOD (если есть). Разные поверхности одного уровня детализации должны иметь одинаковые настройки, чтобы появляться и исчезать одновременно.
Min Parent и Max Parent#
Другими важными параметрами LOD являются Min Parent and Max Parent.
Эти параметры позволяют указать, до какой поверхности или ноды вверху в иерархии будут измеряться минимальное и максимальное расстояния видимости. Используйте значения по умолчанию 1. В этом случае все поверхности меша будут переключаться одновременно, т.к. их расстояния будут измеряться не до самих поверхностей, а до ограничивающего прямоугольника всего меша.
Подробнее об этих параметрах можно прочитать здесь.