В Jetpack XR SDK пространственные среды — это иммерсивные среды, которые вы можете добавить в свое приложение, чтобы настроить фон виртуальной сцены. Пространственные среды видны только тогда, когда приложение находится в режиме Full Space.
Обзор пространственных сред
SpatialEnvironment
используется для управления предпочтениями пространственной среды приложения. Это составной элемент отдельного изображения скайбокса и геометрии, указанной в glTF. Одновременно можно задать только одно изображение скайбокса и один файл геометрии glTF.
Skybox представляет собой изображение, которое пользователь видит вокруг себя в виртуальной сцене, создавая иллюзию отдаленной фоновой среды, такой как небо, горы или городской пейзаж. Пользователь не может взаимодействовать с skybox или приближаться к нему. Jetpack XR SDK поддерживает сферические skybox в стандарте OpenEXR . Помимо предоставления иммерсивного фона для вашего приложения, EXR skybox также обеспечивает освещение на основе изображения (IBL) для 3D-моделей, загруженных вашим приложением. Для получения дополнительной информации обратитесь к руководству по работе с 3D-моделями .
Пространственные среды также могут включать 3D-геометрический контент в стандарте glTF . Геометрия среды, загруженная таким образом, будет автоматически выровнена с реальным полом. Геометрия среды — отличный способ добавить реалистичности вашей среде с помощью элементов переднего и среднего плана, которые смешиваются со скайбоксом с эффектом параллакса.
В руководстве по проектированию пространственных сред вы можете узнать о различных типах активов, которые можно использовать для создания пространственных сред, а также о том, как создать безопасные и приятные пространственные среды.
Вы можете настроить пространственную среду своего приложения на одну из трех конфигураций:
- Сочетание изображения скайбокса и геометрии glTF.
- Сквозная поверхность, где отображаемая среда представляет собой прямую трансляцию с внешних камер устройства. При полной непрозрачности эта сквозная поверхность полностью закрывает скайбокс и геометрию.
- Смешанная конфигурация, где проходная поверхность не имеет полной непрозрачности, но и не имеет нулевой непрозрачности. В этом случае проходная поверхность становится полупрозрачной, а альфа смешивается со скайбоксом и геометрией за ним.
Пространственные возможности для пространственных сред
SpatialCapabilities
: Представляет пространственные возможности текущего сеанса. Определенные пространственные возможности имеют отношение к пространственным средам.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: Указывает, может ли действие включать или отключать сквозную передачу в текущий момент времени.SPATIAL_CAPABILITY_APP_ENVIRONMENT
: Указывает, может ли действие устанавливать собственную пространственную среду в текущий момент времени.
Импорт и загрузка ресурсов пространственной среды
Ресурсы glTF и EXR для пространственных сред загружаются асинхронно с помощью класса Session
.
Создать ресурс glTF
Ресурс glTF может быть создан как GltfModel
, где glTF загружается из локального файла. GltfModel
может использоваться как часть пространственной среды приложения.
val environmentGeometryFuture = GltfModel.create(session, "DayGeometry.glb") val environmentGeometry = environmentGeometryFuture.await()
Создать ресурс изображения EXR
Ресурс изображения EXR может быть создан как ExrImage
, где EXR загружается из локального файла. ExrImage
может использоваться с cmgen для создания ZIP-файла IBL для ваших скайбоксов. Более подробную информацию см. в нашем руководстве по оптимизации ресурсов окружения .
val lightingForSkybox = ExrImage.create(session, "BlueSkyboxLighting.zip")
Установите SpatialEnvironmentPreference для вашего приложения
setSpatialEnvironmentPreference
используется для установки предпочтительной пространственной среды для приложения. Этот метод только устанавливает предпочтение и не вызывает немедленного изменения, если только isSpatialEnvironmentPreferenceActive
уже не имеет значение true. Как только устройство переходит в состояние, в котором фон XR может быть изменен и доступна возможность SpatialCapabilities.SPATIAL_CAPABILITY_APP_ENVIRONMENT
, предпочтительная пространственная среда для приложения будет автоматически отображена.
Установка параметра на null отключит предпочтительную пространственную среду для приложения, то есть вместо нее будет отображаться системная среда по умолчанию.
Если заданное SpatialEnvironmentPreference
не равно null, но все его свойства равны null, то пространственная среда будет состоять из черного скайбокса и никакой геометрии.
Чтобы получать уведомления об изменениях состояния SpatialEnvironment, используйте addOnSpatialEnvironmentChangedListener
.
Основное использование
Этот фрагмент кода создает геометрию среды и ресурсы скайбокса, а затем устанавливает предпочтение пространственной среды. Это предпочтение будет запомнено и будет применено, когда приложение сможет задать собственную среду.
val spatialEnvironmentPreference = SpatialEnvironment.SpatialEnvironmentPreference(lightingForSkybox, environmentGeometry) val preferenceResult = session.scene.spatialEnvironment.setSpatialEnvironmentPreference(spatialEnvironmentPreference) if (preferenceResult == SpatialEnvironment.SetSpatialEnvironmentPreferenceChangeApplied()) { // The environment was successfully updated and is now visible, and any listeners // specified using addOnSpatialEnvironmentChangedListener will be notified. } else if (preferenceResult == SpatialEnvironment.SetSpatialEnvironmentPreferenceChangePending()) { // The environment is in the process of being updated. Once visible, 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
— это float, допускающий значение NULL. Установка значения NULL указывает на то, что приложение не имеет параметра прозрачности сквозного перехода и вернет управление сквозным переходом системе.
Основное использование
Этот фрагмент кода устанавливает предпочтение прозрачности сквозного пропуска. Это предпочтение будет запомнено и будет применено, когда приложение сможет установить прозрачность сквозного пропуска.
val preferenceResult = session.scene.spatialEnvironment.setPassthroughOpacityPreference(1.0f) if (preferenceResult == SpatialEnvironment.SetPassthroughOpacityPreferenceChangeApplied()) { // The passthrough opacity request succeeded and should be visible now, and any listeners // specified using addOnPassthroughOpacityChangedListener will be notified } else if (preferenceResult == SpatialEnvironment.SetPassthroughOpacityPreferenceChangePending()) { // 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
ваших пользователей убедитесь, что ваши активы достигают высококачественного разрешения, сохраняя при этом разумный размер файла. Чтобы узнать больше, ознакомьтесь с нашим руководством по оптимизации активов Environment .
Определить текущую прозрачность пропускания
val currentPassthroughOpacity = session.scene.spatialEnvironment.getCurrentPassthroughOpacity()