{ } { }

Jetpack SceneCore

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

依存関係の宣言

XR SceneCore への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。

アプリまたはモジュールの build.gradle ファイルに、必要なアーティファクトの依存関係を追加します。

Groovy

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"
}

Kotlin

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

新しい問題を報告する

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

バージョン 1.0

バージョン 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 と機能

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

既知の問題

  • 現在、Jetpack SceneCore を使用するには、minSDK 30 が必要です。回避策として、次のマニフェスト エントリ <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> を追加して、minSDK 23 でビルドして実行できるようにします。
  • セッションが無効になる状況はさまざまです。たとえば、メインパネルのサイズ変更、周辺機器の接続、明るいモードと暗いモードの切り替えなど、アクティビティが自動的に再作成される状況では、セッションが無効になる可能性があります。セッションの無効化に関する問題が発生した場合は、回避策として、メインパネルのサイズ変更を無効にしたり、動的パネル エンティティを使用したり、特定の構成変更に対するアクティビティの再作成を無効にしたり、ライトモード/ダークモードのテーマの変更を無効にしたりできます。
  • 移動可能コンポーネントとサイズ変更可能コンポーネントは GltfEntity ではサポートされていません。
  • Entity.getSize() は GltfEntity でサポートされていません。
  • AndroidManifest で android.permission.SCENE_UNDERSTANDING 権限をリクエストする必要がある Jetpack XR アプリ。
  • セッションの作成は、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 を有効にしている場合、セッションを作成するとクラッシュします。回避策として、ProGuard を無効にします。ProGuard を有効にする方法については、こちらのガイドをご覧ください。