Добавьте пространственную среду в свое приложение

В Jetpack XR SDK пространственные окружения — это иммерсивные среды, которые можно добавлять в приложение для настройки фона виртуальной сцены. Пространственные окружения видны только в режиме Full Space.

Обзор пространственных сред

SpatialEnvironment используется для управления настройками пространственного окружения приложения. Он представляет собой композицию из отдельного изображения скайбокса и геометрии, заданной в glTF. Одновременно можно задать только одно изображение скайбокса и один файл геометрии glTF.

Скайбокс представляет собой изображение, которое пользователь видит вокруг себя в виртуальной сцене, создавая иллюзию далёкого фона, например, неба, гор или городского пейзажа. Пользователь не может взаимодействовать со скайбоксом или приближаться к нему. Jetpack XR SDK поддерживает сферические скайбоксы в стандарте OpenEXR . Помимо создания иммерсивного фона для вашего приложения, скайбокс EXR также обеспечивает освещение на основе изображения (IBL) для загружаемых приложением 3D-моделей. Подробнее см. в руководстве по работе с 3D-моделями .

Пространственные среды также могут включать 3D-геометрию в стандарте glTF . Геометрия среды, загруженная таким образом, автоматически выравнивается по полу реального мира. Геометрия среды — отличный способ добавить реализма в окружающую среду с помощью элементов переднего и среднего планов, которые сливаются со скайбоксом с эффектом параллакса.

В руководстве по проектированию пространственных сред вы можете узнать о различных типах активов, которые можно использовать для создания пространственных сред, а также о том, как создать безопасные и приятные пространственные среды.

Вы можете настроить пространственную среду своего приложения на одну из следующих трех конфигураций:

  • Сочетание изображения скайбокса и геометрии glTF.
  • Сквозная поверхность, на которой отображается окружающая среда в режиме реального времени с внешних камер устройства. При полной непрозрачности эта сквозная поверхность полностью перекрывает скайбокс и геометрию.
  • Смешанная конфигурация, в которой сквозная поверхность не имеет полной или нулевой непрозрачности. В этом случае сквозная поверхность становится полупрозрачной, а альфа-канал смешивается со скайбоксом и геометрией за ним.

Пространственные возможности для пространственных сред

  • SpatialCapabilities : отображает пространственные возможности текущего сеанса. Некоторые пространственные возможности связаны с пространственными средами.

  • SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL : Указывает, может ли действие включить или отключить сквозную передачу в текущий момент времени.

  • SPATIAL_CAPABILITY_APP_ENVIRONMENT : Указывает, может ли действие устанавливать собственную пространственную среду в текущий момент времени.

Импорт и загрузка ресурсов пространственной среды

Ресурсы glTF и EXR для пространственных сред загружаются асинхронно с помощью класса Session .

Создать ресурс glTF

Ресурс glTF можно создать как GltfModel , загружая glTF из локального файла. GltfModel можно использовать как часть среды пространственного приложения.

val environmentGeometry = GltfModel.create(session, Paths.get("DayGeometry.glb"))

Создать ресурс изображения EXR

Ресурс изображения EXR можно создать как ExrImage , загружая EXR-файл из локального файла. ExrImage можно использовать с cmgen для создания ZIP-файла IBL для ваших скайбоксов. Подробнее см. в нашем руководстве по оптимизации ресурсов окружения .

val lightingForSkybox = ExrImage.createFromZip(session, Paths.get("BlueSkyboxLighting.zip"))

Настройте SpatialEnvironmentPreference для вашего приложения

Свойство preferredSpatialEnvironment управляет предпочтительной пространственной средой для приложения. Использование этого свойства для настройки предпочтений не приводит к немедленному изменению, если только isPreferredSpatialEnvironmentActive не имеет значения true . Как только устройство переходит в состояние, в котором можно изменить фон XR и становится доступна возможность SpatialCapabilities.SPATIAL_CAPABILITY_APP_ENVIRONMENT , предпочтительная пространственная среда для приложения будет отображаться автоматически.

Установка значения null отключит предпочтительную пространственную среду для приложения, то есть вместо нее будет отображаться системная среда по умолчанию.

Если заданное SpatialEnvironmentPreference не равно null, но все его свойства равны null, то пространственная среда будет состоять из черного неба и не будет иметь геометрии.

Чтобы получать уведомления об изменениях состояния SpatialEnvironment , используйте addOnSpatialEnvironmentChangedListener .

Базовое использование

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

val spatialEnvironmentPreference =
    SpatialEnvironment.SpatialEnvironmentPreference(lightingForSkybox, environmentGeometry)
session.scene.spatialEnvironment.preferredSpatialEnvironment = spatialEnvironmentPreference
if (session.scene.spatialEnvironment.isPreferredSpatialEnvironmentActive) {
    // The environment was successfully updated and is now visible, and any listeners
    // specified using addOnSpatialEnvironmentChangedListener will be notified.
} else {
    // The passthrough opacity preference was successfully set, but not
    // immediately visible. The passthrough opacity change will be applied
    // when the activity has the SPATIAL_CAPABILITY_APP_ENVIRONMENT capability.
    // Then, any listeners specified using addOnSpatialEnvironmentChangedListener
    // will be notified.
}

Расширенное использование

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

Установите параметр PassthroughOpacityPreference для пространственной среды вашего приложения.

Одним из компонентов иммерсивного виртуального фона приложения является сквозная поверхность. В этом случае фоном служит прямая трансляция с внешних камер устройства.

setPassthroughOpacityPreference используется для установки предпочтительной прозрачности сквозного пропуска для приложения. Этот метод только устанавливает параметр и не приводит к немедленному изменению, если не доступна возможность SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL . Как только устройство переходит в состояние, в котором прозрачность сквозного пропуска может быть изменена, и возможность SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL становится доступной, предпочтительная прозрачность сквозного пропуска для приложения будет применена автоматически.

Значения параметра прозрачности сквозного перехода варьируются от 0.0f (нулевая непрозрачность, при которой поверхность сквозного перехода не видна) до 1.0f (полная непрозрачность, при которой поверхность сквозного перехода скрывает пространство). Параметр setPassthroughOpacityPreference — это число с плавающей точкой, допускающее значение NULL. Установка значения NULL означает, что у приложения нет параметра прозрачности сквозного перехода, и управление сквозным переходом будет передано системе.

Базовое использование

Этот фрагмент кода задаёт настройку прозрачности сквозного пропуска. Эта настройка будет запомнена и будет применена, когда приложение сможет настроить прозрачность сквозного пропуска.

session.scene.spatialEnvironment.preferredPassthroughOpacity = 1.0f
if (session.scene.spatialEnvironment.currentPassthroughOpacity == 1.0f) {
    // The passthrough opacity request succeeded and should be visible now, and any listeners
    // specified using addOnPassthroughOpacityChangedListener will be notified.
} else {
    // The passthrough opacity preference was successfully set, but not
    // immediately visible. The passthrough opacity change will be applied
    // when the activity has the
    // SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL capability.
    // Then, any listeners specified using addOnPassthroughOpacityChangedListener
    // will be notified.
}

Расширенное использование

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

Оптимизация активов

При создании ресурсов для настройки SpatialEnvironment пользователей убедитесь, что ваши ресурсы имеют высокое разрешение и при этом сохраняют разумный размер файла. Подробнее см. в нашем руководстве по оптимизации ресурсов среды .

Определить текущую сквозную непрозрачность

val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity

Смотрите также