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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Активы, которые необходимо подготовить для создания .zip-файла для IBL:

  • EXR низкого разрешения, соответствующий текстуре вашего скайбокса
    • Входные данные текстуры скайбокса должны быть в формате EXR. Хотя cmgen поддерживает и другие форматы, рекомендуется использовать EXR, поскольку они предоставляют информацию о высоком динамическом диапазоне, которая критически важна для обеспечения высокого качества IBL. Использование других форматов, таких как PNG, приводит к менее точному освещению.
    • Исходное изображение (EXR) должно иметь соотношение 2:1 и размеры, являющиеся степенью числа 2. Используйте 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 ..