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

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

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

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

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

Скайбокс представляет собой изображение, которое пользователь видит вокруг себя в виртуальной сцене, создавая иллюзию удаленного фона, такого как небо, горы или городской пейзаж. Пользователь не может взаимодействовать со скайбоксом или приближаться к нему. Jetpack XR SDK поддерживает сферические скайбоксы в стандарте OpenEXR . Помимо обеспечения захватывающего фона для вашего приложения, EXR-скайбокс также обеспечивает освещение на основе изображений (IBL) для 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"))

Создайте ресурс освещения на основе изображений.

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

val lightingForSkybox = ImageBasedLightingAsset.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

См. также