3D モデルを扱う場合、Jetpack XR SDK は glTF 2.0 オープン標準をサポートします。Android XR が Jetpack XR SDK で構築されたアプリをレンダリングする場合、3D モデルは glTF 2.0 標準で指定された物理ベース レンダリング(PBR)技術(およびサポートされている拡張機能)でレンダリングされます。Autodesk Maya、Maxon ZBrush、Blender、Spline などのほとんどのデジタル コンテンツ作成(dcc)ツールでは、3D モデルを glTF 形式(.gltf ファイルまたは .glb ファイル)にエクスポートできます。
ユーザーまたはアプリによって SpatialEnvironment スカイボックスが指定されている場合、3D モデルは環境スカイボックスによって提供される照明情報で照らされます。反射素材と鏡面ハイライトも環境スカイボックスを反映します。パススルーが有効になっている場合、照明、反射、鏡面ハイライトは、単一の指向性ライトがある明るい部屋に基づきます。
サポートされているマテリアルの概要については、Khronos サイトの glTF PBR プロパティをご覧ください。
Jetpack XR SDK で構築されたアプリで 3D モデルを読み込む主な方法は 2 つあります。
ActivitySpaceに 3D モデルを配置するの説明に沿って、ActivitySpaceに読み込みます。- インテントを使用して組み込みの Scene Viewer を使用する
3D モデルを ActivitySpace に配置する
glTF ファイルが用意できたら、次は Android Studio のアセット ディレクトリに追加します。アセットタイプを整理するために、models ディレクトリを作成することをおすすめします。

glTF モデルを読み込むには、GltfModel.create() を呼び出します。
val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))
この時点で、モデルはメモリに読み込まれますが、まだレンダリングされていません。読み込む 3D モデルが多い場合や、モデルが大きい場合は、事前に非同期で読み込むことをおすすめします。これにより、ユーザーはモデルがメモリに読み込まれるのを待つ必要がなくなります。
glTF を ActivitySpace に追加する必要があります。GltfModelEntity.create を呼び出してエンティティを作成し、ActivitySpace に配置します。ベスト プラクティスとして、アプリが空間機能を使用できる状態にあることを確認する必要があります。
if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) { val gltfEntity = GltfModelEntity.create(session, gltfModel) }
アプリを実行すると、読み込まれた 3D モデルが表示されます。

SpatialGltfModel を使用して 3D オブジェクトを追加する
Android XR は、3D モデルの glTF 形式をサポートしています。通常、.glb ファイルとして保存されます。これらのオブジェクトをレイアウトに追加するには、SpatialGltfModel コンポーザブルを使用します。この API により、アセットの読み込みと状態の管理のプロセスが簡素化されます。
モデルを表示するには、まず rememberSpatialGltfModelState を使用してモデルのソースと状態を定義します。アプリの assets フォルダ、URI、または raw data からモデルを読み込むことができます。
val modelState = rememberSpatialGltfModelState( source = SpatialGltfModelSource.fromPath( Paths.get("models/model_name.glb") ) )
状態を定義したら、SpatialGltfModel コンポーザブルを使用して、サブスペース内にレンダリングします。
SpatialGltfModel(state = modelState, modifier = SubspaceModifier)
Compose SceneCoreEntity に 3D モデルを配置する
SceneCoreEntity を使用して 3D モデルを配置するには、まず GltfModel.create() を使用して glTF をメモリに読み込む必要があります。次に、3D モデルを SceneCoreEntity に配置して、SceneCore コンポーネントと Compose for XR レイアウトをブリッジできます。SceneCoreEntity を使用してレイアウトに 3D オブジェクトを配置するをご覧ください。
Scene Viewer を使用して 3D モデルを読み込む
基本的なインタラクション機能を備えた 3D モデルを読み込む最も簡単な方法をお探しの場合は、モバイルと同じように Scene Viewer を使用することをおすすめします。Android XR とモバイルの Scene Viewer の主な違いは、Scene Viewer が glTF ファイルを指すファイル URI パラメータのみをサポートし、他のすべてのパラメータは無視されることです。
Scene Viewer は、インテントを使用して呼び出され、フルスペース モードで実行される別のアプリです。そのため、呼び出すとアプリは表示されなくなり、Scene Viewer にフォーカスが移ります。変更した環境は、ユーザーのシステム設定にリセットされます。
Android XR の Scene Viewer で Intent を使用して glTF ファイルを表示する例を次に示します。
val url = "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/Avocado/glTF/Avocado.gltf" val sceneViewerIntent = Intent(Intent.ACTION_VIEW) val intentUri = Uri.parse("https://arvr.google.com/scene-viewer/1.2") .buildUpon() .appendQueryParameter("file", url) .build() sceneViewerIntent.setData(intentUri) try { startActivity(sceneViewerIntent) } catch (e: ActivityNotFoundException) { // There is no activity that could handle the intent. }
Scene Viewer のインタラクティブ オプションについて詳しくは、3D モデルの設計に関するドキュメントをご覧ください。
glTF 拡張機能
Jetpack XR SDK は、3D モデルの機能を拡張するいくつかの gfTF 拡張機能をサポートしています。これらの機能は、GltfModelEntity と Scene Viewer の両方で使用できます。
KHR_animation_pointerKHR_draco_mesh_compressionKHR_lights_punctualKHR_materials_clearcoatKHR_materials_sheenKHR_materials_unlitKHR_materials_variantsKHR_mesh_quantizationKHR_texture_basisuKHR_texture_transformEXT_texture_webp