Начиная с версии 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, используя текстуры mipmap и ktx2.
Что нужно для оптимизации IBL
Скачайте утилиту командной строки cmgen:
- Последнюю версию можно найти в репозитории Filament.
- Найдите файл TGZ, содержащий предварительно созданную версию cmgen для вашей платформы, и распакуйте его.
- Встроенный инструмент находится в каталоге /bin извлеченного TGZ-файла.
Объекты, которые нужно подготовить для создания ZIP-файла для IBL:
- EXR-файл с низким разрешением, соответствующий текстуре скайбокса.
- Текстура скайбокса должна быть в формате EXR. Хотя cmgen поддерживает и другие форматы, мы рекомендуем использовать EXR, поскольку они содержат информацию о расширенном динамическом диапазоне, которая необходима для качественного освещения на основе изображения. Если использовать другие форматы, например 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 ..