Оптимизация активов среды

Применимые устройства XR
Данное руководство поможет вам создавать приложения для устройств XR такого типа.
XR-гарнитуры
Проводные XR-очки

Начиная с версии alpha04 библиотек Jetpack XR, внесены важные изменения в способ предоставления пространственных ресурсов окружения для оптимальной производительности и визуального качества. Эти изменения влияют на совместимость и требуют обновления существующих приложений, которые задают пространственные среды.

Для создания пространственной среды необходимы два основных компонента:

  • Файл .glb или .gltf, содержащий геометрию окружения (например, плоскость земли, близлежащие объекты) и основную визуальную текстуру скайбокса, которую видят пользователи.
  • Отдельный ZIP-файл, содержащий информацию об освещении на основе изображений (IBL), сгенерированную из EXR-изображения с высоким динамическим диапазоном с помощью инструмента cmgen. ZIP-файл используется для расчетов освещения, таких как отражения на объектах, а не для самой текстуры визуального скайбокса.

Почему именно такой подход?

Обновленная структура активов обеспечивает следующие преимущества:

  • Меньший размер файлов: по сравнению с предыдущими методами, такими как использование одного файла HDR-скайбокса высокого разрешения как для визуального отображения, так и для информации об освещении, этот подход уменьшает размер файлов.
  • Улучшенная производительность: Разделение визуальной текстуры скайбокса (встроенной в GLB) от данных IBL (в ZIP-файле) позволяет оптимизировать каждый компонент независимо. Это приводит к снижению пропускной способности памяти для чтения текстур и уменьшению энергопотребления.
  • Оптимизированное освещение: использование ресурса скайбокса с более низким разрешением, специально предназначенного для карты освещения, выгодно с точки зрения производительности без существенного влияния на визуальные результаты освещения объектов.

Чтобы узнать больше о добавлении пространственной среды в ваше приложение, ознакомьтесь с нашим руководством по добавлению сред в ваше приложение .

Оптимизируйте свой GLB

Ваш файл glb отображает геометрию вокруг пользователя, а также включает визуальную текстуру скайбокса. Размер файлов геометрии следует поддерживать на уровне 80 МБ или меньше.

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

  • Дальность видимости: Дальность видимости окружения в Android XR составляет 200 м от точки пользователя, и ваша текстура скайбокса должна соответствовать этому ограничению. Это обеспечивает оптимальное качество изображения, поскольку параллакс становится незаметным на таком расстоянии.
  • Рост пользователя: В зависимости от местности, расположение пользователя на возвышении должно быть примерно 1,5 метра, чтобы избежать наложения на него более крупных элементов пользовательского интерфейса в приложениях.

  • Количество полигонов: Будьте внимательны к количеству полигонов в ваших glb-файлах, так как большое количество полигонов может привести к излишнему потреблению энергии. Каждый участок геометрии не должен превышать 10 000 вершин.

  • Сжатие KTX: Оптимизируйте производительность вашего файла glb на графическом процессоре, убедившись, что в вашем файле glb используются мипмапы и текстуры ktx2.

Что вам понадобится для оптимизации IBL

Загрузите утилиту командной строки cmgen:

  • Последнюю версию можно найти в репозитории Filament .
  • Найдите файл .tgz, содержащий предварительно собранную версию cmgen для вашей платформы, и распакуйте его.
  • Предварительно собранный инструмент находится в каталоге /bin извлеченного файла .tgz.

Материалы, необходимые для подготовки ZIP-файла для IBL:

  • EXR-файл с низким разрешением, соответствующий текстуре вашего скайбокса.
    • В качестве входных данных для текстуры скайбокса следует использовать файл EXR. Хотя cmgen поддерживает и другие форматы, рекомендуется использовать EXR, поскольку они содержат информацию о высоком динамическом диапазоне, которая имеет решающее значение для обеспечения высококачественного IBL. Использование других форматов, таких как PNG, приводит к менее точному освещению.
    • Исходное изображение (EXR) должно иметь соотношение сторон 2:1 и размеры, являющиеся степенью двойки. Используйте EXR-файл размером 1024 x 512 пикселей. Примечание: может показаться, что разрешение 1024 x 512 слишком низкое, но это выгодно для производительности. Для IBL визуальные результаты для пользователя очень похожи на результаты, полученные с использованием ресурсов с гораздо более высоким разрешением IBL.
  • Сплошной черный png
    • Этот объект также должен иметь соотношение сторон 2:1. Используйте размер 100 x 50 пикселей.
    • Это оптимизированная текстура, дополняющая IBL. Пользователи её не увидят, поэтому мы сосредоточились на оптимизации производительности.

Ниже приведён пример использования cmgen для создания ZIP-файла для IBL. В примере используются входные файлы с именами my_360_skybox_1024_x_512.exr и black_skybox.png для создания ZIP-файла с именем my_ibl.zip .

# Produce black cubemaps for the texture of the IBL asset.
./cmgen --format=rgb32f --size=128 --extract=./skybox_ibl ./black_skybox.png

# Produce lighting cubemaps and a Spherical Harmonics from EXR
./cmgen --format=rgb32f --size=128 --deploy=./skybox_ibl --ibl-ld=. --ibl-samples=1024 --extract-blur=0.0 --sh-irradiance --sh-shader --sh-output=./skybox_ibl/sh.txt ./my_360_skybox_1024_x_512.exr

# Copy all of the black cubemaps into the other folder.
cp -rf ./skybox_ibl/black_skybox/* ./skybox_ibl/my_360_skybox_1024_x_512

# Rename the directory to reflect that these are old assets.
mv ./skybox_ibl/black_skybox ./skybox_ibl/black_skybox_old

# Rename the directory to reflect that these are your cubemap assets.
mv ./skybox_ibl/my_360_skybox_1024_x_512 ./skybox_ibl/black_skybox

# Change into the child directory.
cd ./skybox_ibl

# Zip all of the cubemap and the Spherical Harmonics assets together.
zip -q my_ibl.zip black_skybox/*

# Return to the directory you started in.
cd ..