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