{ } { }

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

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

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

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

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

классный

dependencies {
    implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha04"
    // 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-alpha04"
}

Котлин

dependencies {
    implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha04")
    // 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-alpha04")
}

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

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

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

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

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

Версия 1.0

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

7 мая 2025 г.

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

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

  • Обработка теперь будет работать с объектами панели без встроенных действий. Для работы обратной обработки вам необходимо указать android:enableOnBackInvokedCallback= "true" в манифесте Android.
  • StereoSurfaceEntity теперь поддерживает воспроизведение MV-HEVC посредством двух новых значений StereoMode : MULTIVIEW_LEFT_PRIMARY и MULTIVIEW_RIGHT_PRIMARY.
  • PanelEntity.setSize и PanelEntity.getSize теперь возвращают размеры в родительском пространстве.
  • Entity.setPose , Entity.getPose , Entity.setScale , Entity.getScale , Entity.setAlpha и Entity.getAlpha теперь принимают новый параметр relativeTo , который позволяет получать/устанавливать значения относительно разных пространств. Поддерживаемые значения — пространства «Родитель», «Активность» и «Реальный мир», а значение по умолчанию для этого параметра — «Родитель».
  • В SessionExt.kt добавлены методы расширения обратного вызова пространственной видимости, позволяющие отслеживать, когда содержимое сцены перемещается внутри или за пределами поля зрения пользователя.
  • setPointSourceParams был добавлен в SpatialAudioTrack , что позволяет обновлять параметры после построения дорожки.
  • Добавлен новый класс Scene со ссылками на API Scenecore . Сцена будет доступна как свойство расширения сеанса. Функции внутри SessionExt были перенесены в сцену, поэтому импорт необходимо будет настроить; например, SessionExt.getScene(session) . addSpatialCapababilitiesChangedListener и SessionExt.addSpatialCapabilitiesChangedListener .
  • Был добавлен ActivityPose.hitTestAsync , позволяющий выполнять hitTest для виртуального контента.
  • Добавлен новый тип компонента SpatialPointerComponent , позволяющий клиентам указывать значок, отображаемый для указателя, или отключать значок. В настоящее время этот компонент можно прикрепить только к экземплярам PanelEntity .
  • Представляем новую фабрику PanelEntity , которая принимает размеры панелей в метрах или пикселях. Старая фабрика PanelEntity , принимающая два параметра типа размера для удаленной панели.

Изменения API

  • Удалено ограничение RequiresApi(34) для всех пакетов Jetpack XR. Это ограничение было излишним, поскольку Jetpack XR в настоящее время доступен только на устройствах с уровнем API 34+. ( Iae0f8 )
  • Для проектов, выпущенных с Kotlin 2.0, требуется KGP 2.0.0 или новее ( Idb6b5 ).
  • Класс PermissionHelper был удален.
  • PanelEntity.getPixelDensity устарел.
  • PanelEntity.setPixelDimensions и PanelEntity.getPixelDimension удалены и заменены setSizeInPixels и getSizeInPixels .
  • Entity.getActivitySpaceAlpha удален. Можно заменить на Entity.getAlpha(Space.Activity) .
  • Entity.getWorldSpaceScale удален. Можно заменить на Entity.getScale(Space.REAL\_WORLD) .
  • Класс Session в SceneCore был удален в пользу Session в среде выполнения XR.
  • StereoSurfaceEntity переименован в SurfaceEntity .
  • Entity.setSize и Entity.getSize удалены, а в PanelEntity добавлены те же методы.
  • PointSourceAttributes переименован в PointSourceParams .
  • SpatializerConstants.SOURCE\_TYPE\_BYPASS переименован в SpatializerConstants.SOURCE\_TYPE\_DEFAULT .
  • Объект PointSourceParams был изменен с общедоступного на внутренний доступ.
  • AnchorEntity.create теперь требует настройки PlaneTrackingMode в Session.configure() .
  • API-интерфейсы SpatialUser теперь требуют настройки HeadTrackingMode в Session.configure() .
  • Если ResizableComponent не подключен, он выдает журнал уровня INFO вместо журнала уровня ERROR.
  • Класс Fov теперь является обычным классом Kotlin.
  • Разделите Entity.kt , чтобы поместить каждый конкретный тип объекта в отдельный файл.
  • При создании нового PanelEntity большинство представлений будут переориентированы на FrameLayout . Это облегчает использование LayoutInspector с пространственными панелями.
  • Используемый в настоящее время экземпляр XrExtensions теперь зарегистрирован на платформе, что позволяет облегчить отладку приложений.

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

  • Было добавлено исправление, предотвращающее сбой, который мог произойти при перемещении PanelEntity с MovableComponent и AnchorPlacement .
  • Исправлена ​​проблема, из-за которой ResizableComponent предоставлял устаревшие размеры в обратном вызове onResizeStart .
  • Исправлен сбой, когда метод dispose() JxrPlatformAdapterAxr вызывался несколько раз.

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

26 февраля 2025 г.

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

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

  • Минимизация Proguard теперь поддерживается для кода Jetpack XR.

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

  • Дополнительные исправления для поддержки минификации Proguard для Jetpack XR SceneCore ( I4f47e ).
  • Обновлено правило Jetpack XR Scenecore ProGuard для предотвращения AbstractMethodError для минифицированных клиентов. ( I91a01 )

Версия 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.