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

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

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

Чтобы добавить зависимость от XR SceneCore, необходимо добавить репозиторий Google Maven в свой проект. Подробнее см. в репозитории Google Maven .

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

Groovy

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

Kotlin

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

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

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

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

Создать новый выпуск

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

Версия 1.0

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

30 июля 2025 г.

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

Новые функции

  • API воспринимаемого разрешения добавлен в Panel Entities и SurfaceEntities . ( I118f6 )
  • В Scene.kt добавлены методы обратного вызова PerceivedResolution для мониторинга воспринимаемого разрешения основной панели активности в HSM. ( I58084 )
  • SurfaceEntity — добавлена поддержка запроса суперсэмплинга в приложении при создании. Это позволяет приложениям использовать фильтр суперсэмплинга для сглаживания. ( I06913 )
  • Добавлено свойство recommendedContentBoxInFullSpace для ActivitySpace . Оно возвращает рекомендуемое поле для размещения контента в режиме полного пространства. ( I4cd6f )
  • Предоставлен перегруженный конструктор для модификатора movable, который позволяет выполнять якорную фиксацию. ( Ic0c70 )

Изменения API

В этом выпуске в SceneCore были внесены значительные изменения в API. Несколько классов были переименованы и/или перенесены в другие модули, а большинство методов getter/setter заменены свойствами Kotlin. Хотя мы ожидаем серьёзных изменений API до нашего первого бета-релиза, они не будут столь разрушительными и многочисленными.

  • Переименованы и/или перемещены следующие классы и интерфейсы: androidx.xr.scenecore.PixelDimensions в androidx.xr.runtime.math.IntSize2d ; androidx.xr.scenecore.Dimensions в androidx.xr.runtime.math.FloatSize3d ; androidx.xr.scenecore.ActivityPose в ScenePose , androidx.xr.scenecore.ContentlessEntity в GroupEntity , androidx.xr.scenecore.PlaneType в PlaneOrientation ; androidx.xr.scenecore.PlaneSemantic в PlaneSemanticType . ( Ifd405 )( I3b622 ) ( If534d )
  • Ряд сеттеров для свойств Scene были сделаны закрытыми; они не предназначались для изменения клиентами SceneCore : activitySpace , activitySpaceRoot , mainPanelEntity , perceptionSpace , spatialCapabilities , spatialEnvironment и spatialUser . ( I2f506 )
  • В Entity: изменены следующие свойства: get/setParent() , setContentDescription ; Entity.is/setHidden() устарел, вместо него используйте Entity.is/setEnabled . ( Ibc4c6 )
  • Удалён класс androidx.xr.scenecore.BasePanelEntity , вместо него используется PanelEntity напрямую. Геттеры и сеттеры PanelEntity заменены свойствами. Свойство PanelEntity.size изменено с Float3dSize на Float2dSize . Удалён устаревший метод androidx.xr.scenecore.PanelEntity.getPixelDimensions , вместо него используется getSizeInPixels . ( Icc174 ).
  • Заменен androidx.xr.scenecore.OnSpaceUpdatedListener на Runnable . ( I19308 )
  • SpatialUser.getCameraViews() заменен свойством. ( Ib0cc5 ) Для ExrImage и GltfModel: методы create изменены на функции приостановки; параметры создания изменены так, чтобы принимать Uri или Path вместо String . ( Id8883 ) ( I0d247 ), ( I25706 )
  • SpatialEnvironment.requestFullSpaceMode и SpatialEnvironment.requestHomeSpaceMode перемещены в Scene, например, используйте session.scene.requestFullSpaceMode() вместо session.scene.spatialEnvironment.requestFullSpaceMode() . addOnPassthroughOpacityChangedListener и addOnSpatialEnvironmentChangedListener теперь есть переопределения, которые принимают необязательные исполнители. ( I12fe0 ) ( I6b21e )
  • Удалены следующие устаревшие методы SpatialEnvironment : togglePassthrough , setPassthrough , setPassthroughOpacity , getPassthroughMode , getPassthroughOpacity , setSkybox и setGeometry . Также удалён устаревший класс SpatialEnvironment.PassthroughMode ( I927bd ) ( I927bd ) ( I927bd ).
  • Заменены следующие методы получения и установки SpatialEnvironment свойствами Kotlin: getCurrentPassthroughOpacity() , get/setPassthroughOpacityPreference() , get/setSpatialEnvironmentPreference() , isSpatialEnvironmentPreferenceActive() ( I33a7b ) ( Ie06e2 ) ( Ie06e2 )
  • Тип SpatialEnvironmentPreference.preferredPassthroughOpacity изменён с Float? на Float . Он больше не принимает значения NULL. Вместо этого для сигнала об отсутствии предпочтений по непрозрачности используется SpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCE . ( I40107 ).
  • Параметр windowBoundsPx обновлен до pixelDimensions , а его тип изменен с Rect на IntSize2d в методе create. ( I1926e )
  • Конструктор SpatialEnvironment теперь внутренний ( I75a51 )
  • Заменены классы SpatialPointerIconNone и SpatialPointerIconCircle на сопутствующие объекты SpatialPointerIcon.NONE и SpatialPointerIcon.CIRCLE ( I416d2 ).
  • SpatialPointerIcon в SpatialPointerComponent больше не допускает значение NULL. Используйте SpatialPointerIcon.DEFAULT вместо NULL, чтобы указать, что следует использовать системный значок указателя по умолчанию. ( I416d2 )
  • androidx.xr.scenecore.AnchorEntity.getState() заменено на свойство, доступное только для чтения. Параметры метода AnchorEntity.create() переименованы для ясности. В методах AnchorEntity для установки и добавления прослушивателей прослушиватель перенесён в последний аргумент для включения завершающих лямбда-выражений. androidx.xr.scenecore.OnStateChangedListener для AnchorEntity заменено на Consumer<AnchorEntity.State> . ( I472e0 )
  • GltfModelEntity.getAnimationState() теперь является свойством. ( I10b29 )
  • ActivitySpace.getBounds() заменен свойством. ActivitySpace.addBoundsChangedListener переименован в ActivitySpace.addOnBoundsChangedListener . ActivitySpace.setOnSpaceUpdatedListener заменен методами добавления/удаления. ( I4c956 )
  • Для AnchorPlacement: planeTypeFilter переименован в anchorablePlaneOrientations , planeSemanticFilter переименован в anchorablePlaneSemanticTypes . Добавление MovableComponent к AnchorEntity или ActivitySpace вернёт false, MoveListener переименован в EntityMoveListener shouldDisposeParentAnchor переименован в disposeParentOnReAnchor systemMovable удалён из функции create в пользу creeateCustomMovable , createSystemMovable и createAnchorable ( If11c4 ).
  • Удален SurfaceEntity.featherRadiusX/Y и добавлена концепция класса EdgeFeatheringParams . ( Ic78fc )
  • Метод PanelEntity.enablePanelDepthTest() заменён свойством panelClippingConfig . Установите Scene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true) , чтобы включить проверку глубины, или PanelClippingConfig(isDepthTestEnabled = false) , чтобы отключить её. ( I0cbe0 )
  • Scene.mainPanelEntity теперь имеет тип MainPanelEntity вместо PanelEntity ( I7125a )
  • Метод сцены setFullSpaceMode переименован в configureBundleForFullSpaceModeLaunch и метод setFullSpaceModeWithEnvironmentInherited в configureBundleForFullSpaceModeLaunchWithEnvironmentInherited . ( I0cbe0 ) ( I0cbe0 )
  • Значения SpatialVisibility UNKNOWN, OUTSIDE_FOV, PARTIALLY_WITHIN_FOV и WITHIN_FOV переименованы в SPATIAL_VISIBILITY_UNKNOWN, SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW, SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW и SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW соответственно ( Ie7e8c )
  • Класс SpatialVisibility заменен на открытый объект с константными значениями Int. setSpatialVisibilityChangedListener теперь принимает Consumer<Int> вместо Consumer<SpatialVisibility> ( Ie7e8c ).
  • Константы PointerCaptureComponent переименованы и перемещены в объект PointerCaptureComponent.PointerCaptureState ( I9c7ac ).
  • Заменен PointerCaptureComponents' StateListener на Consumer<Int> . ( I9c7ac )
  • InputEventListener заменен на Consumer<InputEvent> ( I9c7ac )
  • setPreferredAspectRatio перемещен из класса Scene в объект SpatialWindow и принимает Session в качестве первого параметра. ( I7b717 )
  • Entity.setHidden() заменен на Entity.setEnabled() , а Entity.isHidden() заменен на Entity.isEnabled() . setHidden(false) эквивалентно setEnabled(true) , а isHidden() == !isEnabled() . ( Icf0de )
  • Тип Entity.contentDescription изменен со String на CharSequence . ( Ie59be )
  • Session.create и Session.configure теперь выдают SecurityException , если не предоставлено достаточно разрешений, вместо возврата SessionCreatePermissionsNotGranted или SessionConfigurePermissionsNotGranted . ( I7c488 )
  • ResizableComponent.create теперь требует Consumer<ResizeEvent> ResizeEventListener был заменен на Consumer<ResizeEvent> ResizableComponent.size был переименован в ResizableComponent.affordanceSize ResizableComponent.minimumSize был переименован в ResizableComponent.minimumEntitySize ResizableComponent.maximumSize был переименован в ResizableComponent.maximumEntitySize , ResizableComponent.autoHideContent был переименован в ResizableComponent.shouldAutoHideContent ResizableComponent.forceShowResizeOverlay был переименован в ResizableComponent.shouldAlwaysShowOverlay ( I97a2d )
  • Уменьшено значение minSDK до 24 для androidx.xr.scenecore и androidx.xr.compose . Пакеты XR по-прежнему требуют API 34 во время выполнения. ( I17224 )
  • Убрано ограничение RequiresApi(34) для всех пакетов Jetpack XR. Это ограничение было излишним, поскольку Jetpack XR в настоящее время доступен только на устройствах с API уровня 34 и выше. ( Iae0f8 )
  • Основной артефакт SceneCore ( xr:scenecore:scenecore ) будет содержать только асинхронные API в стиле Kotlin. Разработчики Java могут использовать библиотеку xr:scenecore:scenecore-guava для доступа к совместимым API. ( If221b )
  • Для проектов, выпущенных с использованием Kotlin 2.0, требуется использование KGP 2.0.0 или более поздней версии ( Idb6b5 ).
  • Эта библиотека теперь использует аннотации JSpecify, определяющие значение null , которые являются типовыми. Разработчикам Kotlin следует использовать следующий аргумент компилятора для обеспечения корректного использования: -Xjspecify-annotations=strict (это значение по умолчанию, начиная с версии 2.1.0 компилятора Kotlin) ( Ia8420 ).
  • Все асинхронные методы, возвращающие ListenableFuture , были заменены функциями приостановки Kotlin. Разработчики Java, желающие использовать асинхронные методы на основе ListenableFuture вместо функций приостановки Kotlin, теперь должны использовать функции расширения в :xr:scenecore-scenecore-guava . Например, GuavaExrImage содержит асинхронные функции ExrImage, эквивалентные Guava, GuavaScenePose содержит асинхронные функции ScenePose , эквивалентные Guava, GuavaGltfModel содержит асинхронные функции Guava-equivalent GltfModel , и т. д. ( If7283 ) ( I0af60 ) ( If7283 ) ( Ia8515 ) ( I4efdf ) ( I54bbf ) ( I3467a ) ( I82a33 )

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

  • Обновлено правило Jetpack XR Scenecore ProGuard для предотвращения AbstractMethodError для минифицированных клиентов. ( I91a01 )
  • Дополнительные исправления для поддержки минимизации Proguard для Jetpack XR SceneCore ( I4f47e )
  • Исправлена ошибка, из-за которой InteractableComponent мог вызывать сбой, если hitPosition в HitInfo InputEvent мог вызывать сбой, если hitPosition возвращенный системой, был равен null ( I7a695 ).
  • Конфигурация *Параметры режима были переименованы, чтобы отразить их поведение. ( I6d247 )
  • Исправлены проблемы с FOV и HitTest в SceneCore TestApp. ( I2c51e )
  • Исправлена ошибка в SpatialCapabilities.hasCapability() , из-за которой возвращалось значение true, если хотя бы одно из свойств, переданных с помощью побитового ИЛИ, было true, вместо того, чтобы возвращать значение true только в том случае, если все они были true. ( I2cd40 )
  • SurfaceEntity.StereoMode.TOP_BOTTOM обновлен таким образом, чтобы верхняя карта соответствовала левому глазу, а нижняя — правому глазу. ( I4ae68 )

Версия 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 , который позволяет получать/устанавливать значения относительно различных пространств. Поддерживаются значения Parent, Activity и Real World, а значение по умолчанию для этого параметра — Parent.
  • В SessionExt.kt добавлены методы расширения обратного вызова пространственной видимости для отслеживания того, когда содержимое сцены перемещается внутрь или за пределы поля зрения пользователя.
  • В SpatialAudioTrack добавлен setPointSourceParams , позволяющий обновлять параметры после создания трека.
  • Добавлен новый класс Scene со ссылками на API Scenecore . Scene будет доступен как свойство расширения Session. Функции внутри SessionExt перенесены в Scene, поэтому импорт потребуется скорректировать; например, 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 Runtime.
  • 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 Surface, для левого и правого глаза. Это может использоваться для рендеринга стереоскопического контента в формате «бок о бок» или «сверху вниз», например, стереофотографий, 3D-видео или других динамически визуализируемых пользовательских интерфейсов. Приложения должны использовать MediaPlayer или ExoPlayer для декодирования видео.
  • Система компонентов: SceneCore предлагает надежную и гибкую систему компонентов для добавления возможностей к вашему XR-контенту, включая возможности для пользователей перемещать, изменять размер и взаимодействовать с моделями и панелями.
  • Якорь : при включенной функции сквозного пропуска вы можете прикреплять панели и модели к реальным поверхностям, предоставляя пользователям возможность бесшовной интеграции виртуального контента в реальную среду.
  • Поза пользователя: получите доступ к местоположению пользователя на виртуальной сцене, чтобы сориентировать контент относительно его положения.
  • SpatialCapabilities : создавайте полностью адаптивные приложения, использующие пространственные возможности (при их наличии), такие как 3D-позиционирование содержимого пользовательского интерфейса. Более того, ваше приложение может отслеживать изменения возможностей во время выполнения, чтобы адаптировать интерфейс в зависимости от того, как пользователь использует своё устройство Android XR.

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

  • В настоящее время для использования Jetpack SceneCore требуется minSDK 30. В качестве обходного решения добавьте следующую запись в манифест <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> , чтобы сборка и запуск были возможны с minSDK 23.
  • Сеанс может стать недействительным в различных ситуациях, которые автоматически пересоздают Activity, включая изменение размера главной панели, подключение периферийных устройств и переключение между светлым и тёмным режимами. В случае возникновения проблем с недействительностью сеанса можно сделать главную панель неизменяемой, использовать динамическую панель, отключить воссоздание Activity для определённых изменений конфигурации или отключить смену тем оформления в светлом/тёмном режиме.
  • Перемещаемые и изменяемые по размеру компоненты не поддерживаются в 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 см. в этом руководстве .