{ } { }

Реактивный ранец SceneCore

Создавайте и управляйте графом сцены Android XR с 3D-контентом.
Последнее обновление Стабильный выпуск Кандидат на выпуск Бета-версия Альфа-релиз
12 февраля 2025 г. - - - 1.0.0-альфа02

Объявление зависимостей

Чтобы добавить зависимость от XR SceneCore, вам необходимо добавить в свой проект репозиторий Google Maven. Для получения дополнительной информации прочтите репозиторий Google Maven .

Добавьте зависимости для нужных вам артефактов в файл build.gradle для вашего приложения или модуля:

классный

dependencies {
    implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha01"
    // Required for Java
    implementation "com.google.guava:listenableFuture:1.0"
    // Required for Kotlin
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0"

    // Use to write unit tests
    testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-alpha01"
}

Котлин

dependencies {
    implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha01")
    // Required for Java
    implementation("com.google.guava:listenableFuture:1.0")
    // Required for Kotlin
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0")

    // Use to write unit tests
    testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha01")
}

Дополнительные сведения о зависимостях см. в разделе Добавление зависимостей сборки .

Обратная связь

Ваши отзывы помогают сделать Jetpack лучше. Дайте нам знать, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете добавить свой голос к существующей проблеме, нажав кнопку со звездочкой.

Создать новую задачу

Дополнительную информацию см . в документации по системе отслеживания проблем .

Версия 1.0

Версия 1.0.0-альфа02

12 февраля 2025 г.

Выпущены androidx.xr.scenecore:scenecore:1.0.0-alpha02 и androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02 . Версия 1.0.0-alpha02 содержит эти коммиты .

Предстоящее критическое изменение, затрагивающее приложения, созданные до версии 1.0.0-alpha02.

  • Фабричные методы были перенесены из класса Session в сопутствующий метод каждого соответствующего типа:
    • Session.createActivityPanelEntity(Dimensions, String, Activity, Pose) был удален и заменен на ActivityPanelEntity.create(Session, Dimensions, String, Pose)
    • Session.createAnchorEntity(Anchor) был удален и заменен на AnchorEntity.create(Session, Anchor)
    • Session.createAnchorEntity(Dimensions, Int, Int, Duration) удален и заменен на AnchorEntity.create(Session, Dimensions, Int, Int, Duration)
    • Session.createEntity(String, Pose) был удален и заменен на ContentlessEntity.create(Session, String, Pose)
    • Session.createExrImageResource(String) был удален и заменен ExrImage.create(Session, String)
    • Session.createGltfEntity(GltfModel, Pose) удален и заменен на GltfModelEntity.create(Session, GltfModel, Pose)
    • Session.createGltfModelResource(String) был удален и заменен GltfModel.create(Session, String)
    • Session.createInteractableComponent(Executor, InputEventListener) был удален и заменен на InteractableComponent.create(Session, Executor, InputEventListener)
    • Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean) удален и заменен на MovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
    • Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose) был удален и заменен на PanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
    • Session.createResizableComponent(Dimensions, Dimensions) был удален и заменен ResizableComponent.create(Session, Dimensions, Dimensions)
    • Session.createStereoSurfaceEntity(Int, Dimensions, Pose) удален и заменен на StereoSurface.create(Session, Int, Dimensions, Pose)
  • Были удалены следующие устаревшие методы:
    • Session.canEmbedActivityPanel(Activity) удален. Вместо этого используйте getSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY) .
    • Session.hasSpatialCapability(Int) был удален. Он был заменен на использование getSpatialCapabilities().hasCapability() как более разделенный способ проверки наличия пространственных возможностей, поскольку getSpatialCapabilities() возвращает объект SpatialCapabilities .
    • Session.requestFullSpaceMode() был удален и заменен на SpatialEnvironment.requestFullSpaceMode()
    • Session.requestHomeSpaceMode() был удален и заменен на SpatialEnvironment.requestHomeSpaceMode()
  • Session.setFullSpaceMode(Bundle) и Session.setFullSpaceModeWithEnvironmentInherited(Bundle) были перенесены в функции расширения. Для доступа к файлам разработчика необходимо будет добавить новый импорт:
    • import androidx.xr.scenecore.setFullSpaceMode
    • import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
  • Session.setPreferredAspectRatio(Activity, Float) перенесен в функцию расширения. Для доступа к файлам разработчика необходимо будет добавить новый импорт:
    • import androidx.xr.scenecore.setPreferredAspectRatio
  • Session.getEntitiesOfType(Class<out T>) и Session.getEntityForRtEntity(RtEntity) были перемещены в функции расширения. Для доступа к файлам разработчика необходимо будет добавить новый импорт:
    • import androidx.xr.scenecore.getEntitiesOfType
    • import androidx.xr.scenecore.getEntityForRtEntity
  • Session.unpersistAnchor(Anchor) удален.
  • Session.createPersistedAnchorEntity(UUID) удален.

Известные проблемы

  • PanelEntity.setCornerRadius() и ActivityPanelEntity.setCornerRadius() могут не вступить в силу до следующего перемещения панели; это можно исправить, переместив панель в ее текущую позицию.
  • Когда BoundsChanged вызывается в ActivitySpace , некоторые ActivityPose могли быть обновлены неправильно. Он будет обновлен при следующем вызове OnSpaceUpdated в ActivitySpace

Нарушение и поведенческие изменения

  • PanelEntity и ActivityPanelEntity будут иметь угловой радиус по умолчанию 32dp или меньше, если ширина или высота панели меньше 32dp.

Новые API и возможности

  • Представляет StereoSurface.CanvasShape , который позволяет создавать Spherical и Hemispherical холсты для рендеринга иммерсивных медиа.
  • StereoSurfaceEntity.create() теперь принимает параметр CanvasShape . (В настоящее время этот параметр игнорируется, но будет использоваться в будущем выпуске)
  • StereoSurfaceEntity.create() больше не принимает параметр Dimensions . Приложения должны контролировать размер холста, устанавливая CanvasShape
  • StereoSurfaceEntity имеет член CanvasShape , который можно устанавливать динамически.
  • StereoSurfaceEntity.dimensions теперь доступно только для чтения; приложения должны установить CanvasShape для изменения размеров.
  • StereoSurfaceEntity теперь позволяет переустанавливать StereoMode после построения.

Другие изменения

  • Время компиляции minSDK уменьшено до 24. Для всех API-интерфейсов Jetpack XR по-прежнему требуется API 34 во время выполнения.
  • Фабрика сеансов SceneCore ( Session.create ) больше не запускает намерение получить разрешение SCENE_UNDERSTANDING . Вместо этого клиентское приложение должно явно запрашивать разрешения у пользователя, прежде чем пытаться создать привязки. Создание привязки не удастся, если пользователь не предоставит разрешение.

Исправления ошибок

  • getActivitySpacePose() был исправлен для учета масштаба ActivitySpace , возвращая значения перевода в масштабированных метрах, а не всегда возвращая немасштабированные счетчики. transformPoseTo теперь также использует правильные единицы измерения для вычисления изменений координат, когда ActivitySpace участвует в источнике или пункте назначения.
  • Скайбокс теперь будет установлен на полностью черный скайбокс всякий раз, когда с помощью setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom)) передается нулевое предпочтение скайбокса. Чтобы вернуться к системному скайбоксу и геометрии по умолчанию, используйте setSpatialEnvironmentPreference(null).

Версия 1.0.0-альфа01

12 декабря 2024 г.

Выпущен androidx.xr.scenecore:scenecore-* 1.0.0-alpha01 .

Особенности начальной версии Первоначальная версия Jetpack SceneCore для разработчиков, библиотеки графов 3D-сцен для создания и управления иммерсивными сценами и средами. Эта библиотека позволяет вам размещать и упорядочивать 3D-модели и панели контента относительно друг друга и вашей виртуальной или реальной среды.

  • SpatialEnvironment : создавайте полностью захватывающие впечатления с помощью изображения скайбокса и/или геометрии 3D-модели в качестве фона для сцены XR вашей среды. Или включите сквозную передачу, чтобы ваша виртуальная сцена могла интегрироваться с реальной средой пользователя.
  • PanelEntity : добавляйте 2D-контент в 3D-сцены, встраивая стандартные макеты и действия Android в пространственные панели, которые могут плавать или быть привязаны к поверхностям реального мира.
  • GltfModelEntity : размещайте, анимируйте и взаимодействуйте с 3D-моделями в вашей сцене. SceneCore поддерживает формат файлов glTF для простоты интеграции с существующими моделями.
  • SpatialAudio : добавьте окружающие и точечные источники звука в свою 3D-сцену для получения полностью захватывающего пространственного звука.
  • StereoSurfaceEntity : SceneCore поддерживает маршрутизацию содержимого для левого и правого глаза, отображаемого на поверхности Android. Это можно использовать для рендеринга стереоскопического контента в формате «бок о бок» или «сверху вниз», например стереофотографии, 3D-видео или другие динамически отображаемые пользовательские интерфейсы. Приложения должны использовать MediaPlayer или ExoPlayer для декодирования видео.
  • Система компонентов: SceneCore предлагает надежную и гибкую систему компонентов для добавления возможностей к вашему контенту XR, включая возможности для пользователей перемещать, изменять размер и взаимодействовать с моделями и панелями.
  • Привязка : при включенной сквозной передаче вы можете прикреплять панели и модели к реальным поверхностям, предоставляя пользователям беспрепятственную интеграцию виртуального контента в их реальную среду.
  • Поза пользователя: доступ к местоположению пользователя в виртуальной сцене, чтобы ориентировать контент вокруг положения пользователя.
  • SpatialCapabilities : создавайте полностью адаптивные приложения, которые используют пространственные возможности, когда они доступны, такие как трехмерное позиционирование содержимого пользовательского интерфейса. Мало того, ваше приложение может отслеживать изменения возможностей во время работы приложения, чтобы изменять работу в зависимости от того, как пользователь использует свое устройство Android XR.

Известные проблемы

  • В настоящее время для использования Jetpack SceneCore требуется minSDK 30. В качестве обходного пути добавьте следующую запись манифеста <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> чтобы иметь возможность сборки и запуска с minSDK 23.
  • Сеанс может стать недействительным в различных ситуациях, которые автоматически воссоздают действие, включая изменение размера главной панели, подключение периферийных устройств и переключение между светлым и темным режимом. Если вы столкнулись с проблемами аннулирования сеанса, обходные пути включают в себя запретить изменение размера основной панели, использование объекта динамической панели, отключение воспроизведения активности для определенных изменений конфигурации или отключение изменений тем в светлом/темном режиме.
  • Компоненты Movable и Resizable не поддерживаются в GltfEntity.
  • Entity.getSize() не поддерживается в GltfEntity.
  • Приложения Jetpack XR должны запрашивать разрешение android.permission.SCENE_UNDERSTANDING в AndroidManifest.
  • Создание сеанса поддерживается только на устройстве Android XR. В настоящее время, если вы создадите сеанс и попытаетесь использовать его на устройстве, отличном от Android XR, вы получите исключение RuntimeException.
  • Установка для скайбокса значения null с помощью SpatialEnvironment.setSpatialEnvironmentPreference() не приводит к появлению сплошного черного скайбокса, как описано в документации. Это может привести к использованию системного скайбокса по умолчанию или к отсутствию изменений в текущем скайбоксе.
  • Клиенты SceneCore должны добавить implementation(“com.google.guava:listenablefuture-1.0”) в свою конфигурацию Gradle для зависимостей своего приложения. В будущем выпуске Scenecore будет включать эту библиотеку в качестве зависимости api , поэтому клиентам не нужно будет явно объявлять ее.
  • SceneCore ошибочно включает com.google.guava:guava-31.1-android и com.google.protobuf:protobuf-javalite в качестве транзитивных зависимостей. Если это приводит к повторяющимся ошибкам классов в вашей сборке, эти две зависимости можно безопасно исключить.
  • Если ваше приложение использует SceneCore и включает ProGuard, оно выйдет из строя при создании сеанса. В качестве обходного пути отключите ProGuard. См. это руководство для получения дополнительной информации о том, как включить ProGuard.