アプリで 3D モデルをカスタマイズする

対象の XR デバイス
このガイダンスは、次のようなタイプの XR デバイス向けのエクスペリエンスを構築する際に役立ちます。
XR ヘッドセット
有線 XR グラス

アプリに 3D モデルを追加したら、カスタマイズして視覚的およびインタラクティブなエクスペリエンスを強化できます。たとえば、埋め込み glTF アニメーションを再生して制御したり、カスタム マテリアル プロパティ(ベースカラーや金属の粗さなど)を定義したり、カスタム テクスチャを 3D モデルに適用したりできます。これらの機能を使用すると、実行時にオブジェクトの外観と動作を動的に変更できます。

3D モデルをアニメーション化する

glTF 仕様の一部として、3D モデルにアニメーションを埋め込むことができます。Jetpack XR SDK では、スケルトン(リグ)アニメーション、リジッド アニメーション、モーフ ターゲット(ブレンド シェイプ)アニメーションがすべてサポートされています。KHR_animation_pointer glTF 拡張機能で作成されたマテリアル アニメーションもサポートされています。

アニメーションを再生するには、animations のリストから特定のトラックの名前を指定します。GltfAnimation.start() を呼び出して再生を開始します。GltfAnimationStartOptions を使用して、速度、シーク時間、アニメーションをループさせるかどうかを任意で指定できます。

val animation = gltfEntity.animations.find { it.name == "Walk" }
animation?.start(GltfAnimationStartOptions(shouldLoop = true))

pause()resume()stop() のアニメーションも使用できます。また、seekTo() を使用して、アニメーション トラックの特定の時間にジャンプすることもできます。アニメーションの現在の状態をクエリするには、GltfAnimation.AnimationState を使用します。

3D モデルのマテリアル プロパティをカスタマイズする

Jetpack XR のマテリアル システムは glTF™ 2.0 仕様に基づいており、3D モデルは物理ベース レンダリング(PBR)を使用してレンダリングされます。実行時にマテリアル属性を調整して、ユーザー入力やアプリの現在の状態に基づいてオブジェクトの外観を動的に変更できます。

Material は、オブジェクトのサーフェスの視覚プロパティのセットを定義し、そのサーフェスがシーン内の光とどのように相互作用するかを決定します。

Jetpack XR では、KhronosPbrMaterial クラスと KhronosUnlitMaterial クラスを使用して、これらのマテリアルを作成および操作します。名前が示すように、KhronosUnlitMaterials は点灯せず、シーンの照明の影響を受けません。KhronosPbrMaterial を使用すると、光沢の色、オブジェクトの金属感や粗さ、発光するかどうかなど、より広範囲のプロパティをカスタマイズできます。

サポートされている各プロパティと Android XR のカスタマイズ可能なパラメータの詳細については、リファレンス ドキュメントをご覧ください。これらのプロパティを理解するには、Khronos 用語集をご覧ください。

3D モデルのベースカラーを変更する例

3D モデルのマテリアル プロパティをカスタマイズするには、まず KhronosPbrMaterial を使用して新しいマテリアルを作成します。実現しようとしている外観に合わせて、適切な AlphaMode を設定する必要があります。

val pbrMaterial = KhronosPbrMaterial.create(
    session = xrSession,
    alphaMode = AlphaMode.OPAQUE
)

次に、変更するプロパティを定義します。この例では、setBaseColorFactor を使用してベースカラーを変更します。このメソッドには Vector4 が必要です。ここで、xyzw の各コンポーネントは、それぞれ RGBA(赤、緑、青、アルファ)の値に対応します。

pbrMaterial.setBaseColorFactor(
    Vector4(
        x = 0.5f,
        y = 0.0f,
        z = 0.5f,
        w = 1.0f
    )
)

3D モデルのカスタム テクスチャを作成する

Texture は、3D モデルの表面に適用して、色、詳細、その他の表面情報を提供できる画像アセットです。Jetpack XR Texture API を使用すると、アプリの /assets/ フォルダから PNG ファイルなどの画像データを非同期で読み込むことができます。

テクスチャを読み込むときに、テクスチャのレンダリング方法を制御する TextureSampler を指定できます。サンプラーは、フィルタリング プロパティ(テクスチャが元のサイズより小さくまたは大きく表示される場合)とラッピング モード(標準の [0, 1] 範囲外の座標を処理する場合)を定義します。Texture オブジェクト自体は単なるデータです。3D モデルに視覚効果を与えるには、Material に割り当てる必要があります。

3D モデルのテクスチャを変更する例

カスタム テクスチャを作成するには、まず画像ファイルを /assets/ フォルダに保存する必要があります。ベスト プラクティスとして、そのフォルダに textures サブディレクトリを作成することをおすすめします。

ファイルを適切なディレクトリに保存したら、Texture API を使用してテクスチャを作成します。必要に応じて、ここでオプションの TextureSampler を適用することもできます。

val texture = Texture.create(
    session = xrSession,
    path = Path("textures/texture_file.png")
)

次に、テクスチャのタイプを定義し、対応するパラメータを設定します。この例では、オクルージョン テクスチャを適用して強度を設定します。

pbrMaterial.setOcclusionTexture(
    texture = texture,
    strength = 1.0f
)

3D オブジェクトにマテリアルとテクスチャを適用する

新しいマテリアルまたはテクスチャを適用するには、glTF ノードの特定のノードの既存のマテリアルをオーバーライドします。これを行うには、GltfModelNodesetMaterialOverride を呼び出します。

gltfModelNode.setMaterialOverride(
    material = pbrMaterial
)

新しく作成したマテリアルを削除するには、GltfModelNode の以前にオーバーライドされたノードで clearMaterialOverride を呼び出します。これにより、3D モデルがデフォルトの状態に戻ります。

gltfModelNode.clearMaterialOverride()


glTF および glTF ロゴは、Khronos Group Inc. の商標です。