Jetpack SceneCore

3D コンテンツを使用して Android XR シーングラフを構築、操作します。
最新の更新 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
2025 年 7 月 30 日 - - - 1.0.0-alpha05

依存関係の宣言

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 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

詳細については、Issue Tracker のドキュメントをご覧ください。

バージョン 1.0

バージョン 1.0.0-alpha05

2025 年 7 月 30 日

androidx.xr.scenecore:scenecore-guava:1.0.0-alpha05androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05androidx.xr.scenecore:scenecore:1.0.0-alpha05 がリリースされました。バージョン 1.0.0-alpha05 には、これらの commit が含まれています。

新機能

  • 認識された解像度 API がパネル エンティティと SurfaceEntities に追加されました。(I118f6
  • PerceivedResolution HSM のアクティビティのメインパネルの認識解像度をモニタリングするために Scene.kt に追加されたコールバック メソッド。(I58084
  • SurfaceEntity - アプリケーションが作成時にスーパー サンプリングをリクエストするためのサポートを追加。これにより、アプリケーションはアンチエイリアシングにスーパー サンプリング フィルタを使用できます。(I06913
  • recommendedContentBoxInFullSpace プロパティを ActivitySpace に追加しました。フルスペース モードでコンテンツを配置する際の推奨ボックスを返します。(I4cd6f
  • アンカー設定を可能にする、移動可能な修飾子のオーバーロードされたコンストラクタを提供しました。(Ic0c70

API の変更

このリリースでは、SceneCore に大幅な API の変更が加えられました。いくつかのクラスの名前が変更されたり、別のモジュールに移動されたりしています。また、ほとんどの getter / setter メソッドが Kotlin プロパティに置き換えられています。最初のベータ版リリースまでは、API の大幅な変更が今後も予想されますが、それほど破壊的で多数の変更にはならないでしょう。

  • 次のクラスとインターフェースの名前を変更または移動しました: androidx.xr.scenecore.PixelDimensionsandroidx.xr.runtime.math.IntSize2d に、androidx.xr.scenecore.Dimensionsandroidx.xr.runtime.math.FloatSize3d に、androidx.xr.scenecore.ActivityPoseScenePose に、androidx.xr.scenecore.ContentlessEntityGroupEntity に、androidx.xr.scenecore.PlaneTypePlaneOrientation に、androidx.xr.scenecore.PlaneSemanticPlaneSemanticType に変更しました。(Ifd405)(I3b622)(If534d
  • Scene のプロパティのセッターがいくつか非公開になりました。これらは SceneCore クライアントによる変更を意図したものではありませんでした。activitySpaceactivitySpaceRootmainPanelEntityperceptionSpacespatialCapabilitiesspatialEnvironmentspatialUser。(I2f506
  • エンティティ: 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.OnSpaceUpdatedListenerRunnable に変更されました。(I19308
  • SpatialUser.getCameraViews() をプロパティに置き換えました。(Ib0cc5ExrImageGltfModel: の場合、create メソッドを一時停止関数に変更しました。また、String ではなく Uri または Path を受け入れるように作成パラメータを変更しました。(Id8883)、(I0d247)、(I25706
  • SpatialEnvironment.requestFullSpaceModeSpatialEnvironment.requestHomeSpaceMode を Scene に移動しました。たとえば、session.scene.spatialEnvironment.requestFullSpaceMode() の代わりに session.scene.requestFullSpaceMode() を使用します。addOnPassthroughOpacityChangedListeneraddOnSpatialEnvironmentChangedListener に、オプションの Executor を受け入れるオーバーライドが追加されました。(I12fe0) (I6b21e
  • 非推奨の SpatialEnvironment メソッド(togglePassthroughsetPassthroughsetPassthroughOpacitygetPassthroughModegetPassthroughOpacitysetSkyboxsetGeometry)を削除しました。また、非推奨のクラス 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
  • create メソッドで、windowBoundsPx パラメータを pixelDimensions に、その型を Rect から IntSize2d に更新しました。(I1926e
  • SpatialEnvironment コンストラクタが internal になりました(I75a51
  • クラス SpatialPointerIconNoneSpatialPointerIconCircle をコンパニオン オブジェクト SpatialPointerIcon.NONESpatialPointerIcon.CIRCLE に置き換えました(I416d2
  • SpatialPointerComponentSpatialPointerIcon が null 許容ではなくなりました。システムのデフォルトのポインタ アイコンを使用することを示すには、null ではなく SpatialPointerIcon.DEFAULT を使用します。(I416d2
  • androidx.xr.scenecore.AnchorEntity.getState() を読み取り専用プロパティに置き換えました。わかりやすくするため、AnchorEntity.create() メソッドのパラメータの名前を変更しました。AnchorEntity のリスナーを設定および追加するメソッドで、リスナーが末尾のラムダを有効にするために最後の引数に移動されました。AnchorEntityandroidx.xr.scenecore.OnStateChangedListenerConsumer<AnchorEntity.State> に置き換えました。(I472e0
  • GltfModelEntity.getAnimationState() がプロパティになりました。(I10b29
  • ActivitySpace.getBounds() をプロパティに置き換えました。ActivitySpace.addBoundsChangedListener の名前を ActivitySpace.addOnBoundsChangedListener に変更しました。ActivitySpace.setOnSpaceUpdatedListener を追加/削除メソッドに置き換えました。(I4c956
  • AnchorPlacement: planeTypeFilter の名前が anchorablePlaneOrientations に変更され、planeSemanticFilter の名前が anchorablePlaneSemanticTypes に変更されました。AnchorEntity または ActivitySpaceMovableComponent を追加すると false が返されるようになりました。MoveListener の名前が EntityMoveListener shouldDisposeParentAnchor に変更され、EntityMoveListener shouldDisposeParentAnchor の名前が disposeParentOnReAnchor systemMovable に変更されました。create 関数から disposeParentOnReAnchor systemMovable が削除され、creeateCustomMovablecreateSystemMovablecreateAnchorable が追加されました。(If11c4
  • SurfaceEntity.featherRadiusX/Y を削除し、EdgeFeatheringParams クラスのコンセプトを追加しました。(Ic78fc
  • PanelEntity.enablePanelDepthTest() メソッドが panelClippingConfig プロパティに置き換えられました。Scene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true) を設定して深度テストを有効にするか、PanelClippingConfig(isDepthTestEnabled = false) を設定して無効にします。(I0cbe0
  • Scene.mainPanelEntityPanelEntity ではなく MainPanelEntity 型になりました(I7125a
  • Scene の 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 クラスが、const Int 値を持つパブリック オブジェクトに置き換えられました。setSpatialVisibilityChangedListener が、Consumer<SpatialVisibility> ではなく Consumer<Int> を受け取るようになりました(Ie7e8c
  • PointerCaptureComponent 定数の名前が変更され、PointerCaptureComponent.PointerCaptureState オブジェクトに移動されました(I9c7ac
  • PointerCaptureComponents' StateListenerConsumer<Int> に変更されました。(I9c7ac
  • InputEventListenerConsumer<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.createSession.configure は、十分な権限が付与されていない場合に SessionCreatePermissionsNotGranted または SessionConfigurePermissionsNotGranted を返すのではなく、SecurityException をスローするようになりました。(I7c488
  • ResizableComponent.createConsumer<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
  • androidx.xr.scenecoreandroidx.xr.composeminSDK を 24 に減らしました。XR パッケージは、実行時に API 34 を必要とします。(I17224
  • すべての Jetpack XR パッケージの RequiresApi(34) 制限を削除しました。Jetpack XR は現在 API レベル 34 以上のデバイスでのみ利用できるため、この制限は冗長でした。(Iae0f8
  • メインの SceneCore アーティファクト(xr:scenecore:scenecore)には、Kotlin スタイルの非同期 API のみが含まれます。Java デベロッパーは、xr:scenecore:scenecore-guava ライブラリに依存して互換性のある API にアクセスできます。(If221b
  • Kotlin 2.0 でリリースされたプロジェクトを使用するには、KGP 2.0.0 以降が必要です(Idb6b5
  • このライブラリは、型使用である JSpecify nullness アノテーションを使用するようになりました。Kotlin デベロッパーは、次のコンパイラ引数を使用して正しい使用法を適用する必要があります。-Xjspecify-annotations=strict(これは Kotlin コンパイラのバージョン 2.1.0 以降のデフォルトです)(Ia8420
  • ListenableFuture を返す非同期メソッドはすべて、Kotlin の suspend 関数に置き換えられました。Kotlin の suspend 関数ではなく ListenableFuture ベースの非同期メソッドを使用したい Java デベロッパーは、:xr:scenecore-scenecore-guava の拡張関数を使用する必要があります。たとえば、GuavaExrImage には Guava 相当の ExrImage 非同期関数が含まれ、GuavaScenePose には Guava 相当の ScenePose 非同期関数が含まれ、GuavaGltfModel には Guava-equivalent GltfModel 非同期関数が含まれます。(If7283)(I0af60)(If7283)(Ia8515)(I4efdf)(I54bbf)(I3467a)(I82a33

バグの修正

  • Jetpack XR Scenecore ProGuard ルールを更新し、最小化されたクライアントの AbstractMethodError を防ぎました。(I91a01
  • Jetpack XR SceneCore の Proguard 最小化をサポートするための追加の修正(I4f47e
  • InputEvent の HitInfo の hitPosition が、システムから返された hitPosition が null の場合にクラッシュする可能性があるバグを修正しました(I7a695InteractableComponent
  • Config *Mode 値の名前が、その動作を反映するように変更されました。(I6d247
  • SceneCore TestApp の FOV と HitTest に関する問題を修正しました。(I2c51e
  • ビット単位の OR で渡された機能のいずれかが true の場合に、すべてが true の場合にのみ true を返すのではなく、true を返す SpatialCapabilities.hasCapability() のバグを修正しました。(I2cd40
  • SurfaceEntity.StereoMode.TOP_BOTTOM が更新され、上の地図が左目、下の地図が右目になりました。(I4ae68

バージョン 1.0.0-alpha04

2025 年 5 月 7 日

androidx.xr.scenecore:scenecore:1.0.0-alpha04androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04 がリリースされました。バージョン 1.0.0-alpha04 にはこれらの commit が含まれています。

新機能

  • バックハンドリングが、アクティビティが埋め込まれていないパネル エンティティでも機能するようになりました。バック ハンドリングを機能させるには、Android マニフェストで android:enableOnBackInvokedCallback= "true" を指定する必要があります。
  • StereoSurfaceEntity は、2 つの新しい StereoMode 値(MULTIVIEW_LEFT_PRIMARY と MULTIVIEW_RIGHT_PRIMARY)を介して MV-HEVC 再生をサポートするようになりました。
  • PanelEntity.setSizePanelEntity.getSize が親スペースのサイズを返すようになりました。
  • Entity.setPoseEntity.getPoseEntity.setScaleEntity.getScaleEntity.setAlphaEntity.getAlpha で、新しいパラメータ relativeTo が使用できるようになりました。これにより、さまざまなスペースに関連する値を取得/設定できます。サポートされている値は Parent、Activity、Real World スペースで、このパラメータのデフォルト値は Parent です。
  • シーン コンテンツがユーザーの視野の内外に移動したタイミングをモニタリングするために、SessionExt.kt に Spatial Visibility Callback 拡張メソッドを追加。
  • setPointSourceParamsSpatialAudioTrack に追加され、トラックのビルド後にパラメータを更新できるようになりました。
  • Scenecore API への参照を含む新しいクラス Scene を追加しました。シーンは、セッションの拡張プロパティとしてアクセスできるようになります。SessionExt 内の関数が Scene に移動したため、インポートを調整する必要があります(例: SessionExt.getScene(session))。addSpatialCapababilitiesChangedListenerSessionExt.addSpatialCapabilitiesChangedListener
  • ActivityPose.hitTestAsync が追加され、仮想コンテンツに対する hitTest が有効になりました。
  • 新しいコンポーネント タイプ SpatialPointerComponent を追加しました。これにより、クライアントはポインタ用にレンダリングされるアイコンを指定したり、アイコンを無効にしたりできます。このコンポーネントは現在、PanelEntity インスタンスにのみアタッチできます。
  • 新しい PanelEntity ファクトリを導入。パネルの寸法をメートルまたはピクセルで取得します。パネルに 2 つの Dimension 型パラメータを受け取る古い PanelEntity ファクトリを削除しました。

API の変更

  • すべての Jetpack XR パッケージの RequiresApi(34) 制限を削除しました。Jetpack XR は現在 API レベル 34 以上のデバイスでのみ利用できるため、この制限は冗長でした。(Iae0f8
  • Kotlin 2.0 でリリースされたプロジェクトを使用するには、KGP 2.0.0 以降が必要です(Idb6b5
  • PermissionHelper クラスが削除されました。
  • PanelEntity.getPixelDensity のサポートが終了しました。
  • PanelEntity.setPixelDimensionsPanelEntity.getPixelDimension が削除され、setSizeInPixelsgetSizeInPixels に置き換えられました。
  • Entity.getActivitySpaceAlphaを削除しました。Entity.getAlpha(Space.Activity) に置き換えることができます。
  • Entity.getWorldSpaceScaleを削除しました。Entity.getScale(Space.REAL\_WORLD) に置き換えることができます。
  • SceneCore の Session クラスは、XR ランタイムの Session に置き換えられました。
  • StereoSurfaceEntity の名前が SurfaceEntity に変更されました。
  • Entity.setSizeEntity.getSize が削除され、同じメソッドが PanelEntity に追加されました。
  • PointSourceAttributes の名前が PointSourceParams に変更されました。
  • SpatializerConstants.SOURCE\_TYPE\_BYPASS の名前が SpatializerConstants.SOURCE\_TYPE\_DEFAULT に変更されました。
  • PointSourceParams エンティティが一般公開から内部アクセスに変更されました。
  • AnchorEntity.create では、Session.configure()PlaneTrackingMode を構成する必要があります。
  • SpatialUser API では、Session.configure()HeadTrackingMode を構成する必要があります。
  • ResizableComponent がアタッチされていない場合、ERROR レベルのログではなく INFO レベルのログが返されます。
  • Fov クラスが通常の Kotlin クラスになりました。
  • Entity.kt を分割して、各具象エンティティ タイプを独自のファイルに配置します。
  • 新しい PanelEntity を作成すると、ほとんどの View は FrameLayout に再ペアレントされます。これにより、Spatial Panels で LayoutInspector を使用しやすくなります。
  • 現在使用されている XrExtensions インスタンスが、アプリのデバッグを支援するために、ベスト エフォート方式でプラットフォームに登録されるようになりました。

バグの修正

  • MovableComponentAnchorPlacement を含む PanelEntity が移動されたときに発生する可能性のあるクラッシュを防ぐための修正が追加されました
  • ResizableComponentonResizeStart コールバックで古いサイズを提供していた問題を修正しました。
  • JxrPlatformAdapterAxrdispose() が複数回呼び出されたときにクラッシュする問題を修正しました。

バージョン 1.0.0-alpha03

2025 年 2 月 26 日

androidx.xr.scenecore:scenecore:1.0.0-alpha03androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03 がリリースされました。バージョン 1.0.0-alpha03 にはこれらの commit が含まれています。

新機能

  • Jetpack XR コードで Proguard の最小化がサポートされるようになりました

バグの修正

  • Jetpack XR SceneCore の Proguard 縮小をサポートするための追加の修正(I4f47e
  • Jetpack XR Scenecore ProGuard ルールを更新し、最小化されたクライアントの AbstractMethodError を防ぎました。(I91a01

バージョン 1.0.0-alpha02

2025 年 2 月 12 日

androidx.xr.scenecore:scenecore:1.0.0-alpha02androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02 がリリースされました。バージョン 1.0.0-alpha02 にはこれらの commit が含まれています。

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()SpatialCapabilities オブジェクトを返すため、空間機能の有無を確認するより細分化された方法として getSpatialCapabilities().hasCapability() を使用するようになり、このメソッドは置き換えられました。
    • 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() は、パネルが次に移動されるまで有効にならない場合があります。これは、パネルを現在の位置に移動することで軽減できます。
  • ActivitySpaceBoundsChanged が呼び出されると、一部の ActivityPose が正しく更新されないことがあります。ActivitySpace の次の OnSpaceUpdated 呼び出しで更新されます。

互換性を破る変更と動作の変更

  • パネルの幅または高さが 32 dp 未満の場合、PanelEntityActivityPanelEntity のデフォルトの角の半径は 32 dp 以下になります。

新しい API と機能

  • 没入型メディアをレンダリングするための Spherical キャンバスと Hemispherical キャンバスの作成を可能にする StereoSurface.CanvasShape を導入します。
  • StereoSurfaceEntity.create()CanvasShape パラメータを受け取るようになりました。(このパラメータは現在無視されますが、今後のリリースで使用される予定です)
  • StereoSurfaceEntity.create()Dimensions パラメータを取らなくなりました。アプリは CanvasShape を設定してキャンバスのサイズを制御する必要があります
  • StereoSurfaceEntity には、動的に設定できる CanvasShape メンバーがあります。
  • StereoSurfaceEntity.dimensions は読み取り専用のプロパティになりました。アプリケーションは、ディメンションを変更するために CanvasShape を設定する必要があります。
  • StereoSurfaceEntity で、作成後に StereoMode を再設定できるようになりました。

その他の変更

  • コンパイル時の minSDK を 24 に減らしました。すべての Jetpack XR API は、実行時に引き続き API 34 を必要とします。
  • SceneCore のセッション ファクトリ(Session.create)は、SCENE_UNDERSTANDING 権限を取得するためのインテントを起動しなくなりました。代わりに、クライアント アプリケーションは、アンカーの作成を試みる前に、ユーザーに明示的に権限をリクエストする必要があります。ユーザーが権限を付与しない場合、アンカーの作成は失敗します。

バグの修正

  • getActivitySpacePose() が修正され、常にスケールなしのメートル単位で値を返すのではなく、スケールされたメートル単位で変換値を返すことで、ActivitySpace スケールが考慮されるようになりました。transformPoseTo は、ActivitySpace がソースまたは宛先に関与している場合、正しい単位を使用して座標の変更を計算するようになりました。
  • setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom)) を使用して null のスカイボックス設定が渡されると、スカイボックスが真っ黒のスカイボックスに設定されるようになりました。システムのデフォルトのスカイボックスとジオメトリに戻すには、setSpatialEnvironmentPreference(null). を使用します。

バージョン 1.0.0-alpha01

2024 年 12 月 12 日

androidx.xr.scenecore:scenecore-* 1.0.0-alpha01 がリリースされました。

初回リリースの機能 没入感のあるシーンや環境を作成、操作するための 3D シーングラフ ライブラリである Jetpack SceneCore の初回デベロッパー リリース。このライブラリを使用すると、3D モデルとコンテンツ パネルを互いに、また仮想環境または現実世界の環境に対して配置して調整できます。

  • SpatialEnvironment: スカイボックス画像や 3D モデルのジオメトリを環境の XR シーンの背景として使用して、没入感のあるエクスペリエンスを作成します。パススルーを有効にして、仮想シーンをユーザーの現実世界の環境に統合することもできます。
  • PanelEntity: 標準の Android レイアウトとアクティビティを、浮遊したり現実世界のサーフェスに固定したりできる空間化されたパネルに埋め込むことで、3D シーンに 2D コンテンツを追加します。
  • GltfModelEntity: シーン内の 3D モデルを配置、アニメーション化、操作します。SceneCore は、既存のモデルとの統合を容易にするため、glTF ファイル形式をサポートしています。
  • SpatialAudio: 3D シーンにアンビエント音声ソースとポイント音声ソースを追加して、臨場感あふれる空間化されたサウンドを実現します。
  • StereoSurfaceEntity: SceneCore は、Android Surface にレンダリングされたコンテンツの左右の目のルーティングをサポートします。これは、ステレオ写真、3D 動画、動的にレンダリングされた UI など、ステレオスコピック コンテンツをサイドバイサイド形式またはトップボトム形式でレンダリングするために使用できます。アプリケーションは、動画のデコードに MediaPlayer または ExoPlayer を使用する必要があります。
  • コンポーネント システム: SceneCore は、XR コンテンツに機能を追加するための堅牢で柔軟なコンポーネント システムを提供します。これには、ユーザーがモデルやパネルを移動、サイズ変更、操作するためのアフォーダンスが含まれます。
  • アンカー: パススルーを有効にすると、パネルやモデルを実際のサーフェスに配置して、ユーザーが仮想コンテンツを現実世界の環境にシームレスに統合できます。
  • ユーザーのポーズ: 仮想シーン内のユーザーの位置にアクセスし、ユーザーの位置に合わせてコンテンツの向きを調整します。
  • SpatialCapabilities: UI コンテンツの 3D ポジショニングなど、空間化された機能が利用可能な場合にそれらを活用する、完全にアダプティブなアプリを構築します。さらに、アプリの実行中に機能の変更をモニタリングし、ユーザーが Android XR デバイスをどのように使用しているかに基づいてエクスペリエンスを変更することもできます。

既知の問題

  • 現在、Jetpack SceneCore を使用するには minSDK 30 が必要です。回避策として、minSDK が 23 の状態でビルドして実行できるように、次のマニフェスト エントリ <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> を追加します。
  • セッションは、メインパネルのサイズ変更、周辺機器の接続、ライトモードとダークモードの切り替えなど、アクティビティが自動的に再作成されるさまざまな状況で無効になる可能性があります。セッションの無効化に関する問題が発生した場合は、メインパネルのサイズ変更を不可にする、動的パネル エンティティを使用する、特定の構成変更に対するアクティビティの再作成を無効にする、ライトモード/ダークモードのテーマ変更を無効にするなどの回避策があります。
  • GltfEntity では、移動可能コンポーネントとサイズ変更可能コンポーネントはサポートされていません。
  • GltfEntity では Entity.getSize() はサポートされていません。
  • Jetpack XR アプリは、AndroidManifest で android.permission.SCENE_UNDERSTANDING 権限をリクエストする必要があります。
  • セッションの作成は、Android XR デバイスでのみサポートされています。この時点で、Session を作成して Android 以外の XR デバイスで使用しようとすると、RuntimeException が発生します。
  • `SpatialEnvironment.setSpatialEnvironmentPreference()` を使用してスカイボックスを null に設定しても、ドキュメントに記載されているようにスカイボックスが黒一色になりません。システム デフォルトのスカイボックスが適用されるか、現在のスカイボックスが変更されない可能性があります。
  • SceneCore クライアントは、アプリの依存関係の Gradle 構成に implementation(“com.google.guava:listenablefuture-1.0”) を追加する必要があります。将来のリリースでは、scenecore にこのライブラリが api 依存関係として含まれるため、クライアントが明示的に宣言する必要はありません。
  • SceneCore には、推移的依存関係として com.google.guava:guava-31.1-androidcom.google.protobuf:protobuf-javalite が誤って含まれています。これによりビルドで重複クラスエラーが発生する場合は、これらの 2 つの依存関係を安全に除外できます。
  • アプリで SceneCore を使用し、ProGuard を有効にしている場合、Session を作成するとクラッシュします。回避策として、ProGuard を無効にします。ProGuard を有効にする方法について詳しくは、こちらのガイドをご覧ください。