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

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

アプリに 3D モデルを追加したら、カスタム マテリアル プロパティを定義してオブジェクトにテクスチャを適用することで、視覚的な エクスペリエンスを向上させることができます。Jetpack XR のマテリアル システムは glTF™ 2.0 仕様に基づいており、3D モデルは 物理ベース レンダリング(PBR)を使用してレンダリングされます。これらは、Khronos Group が管理しているオープン スタンダードです。

マテリアル属性は実行時に調整して、ユーザー入力やアプリの現在の状態に基づいてオブジェクトの外観を動的に変更できます。

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

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

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

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

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 = 0.0f
    )
)

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

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

テクスチャを読み込むときに、テクスチャのレンダリング方法を制御する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 ノードの特定のノードの既存のマテリアルをオーバーライドします。これを行うには、 setMaterialOverrideGltfModelNode で呼び出します。

gltfModelNode.setMaterialOverride(
    material = pbrMaterial
)

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

gltfModelNode.clearMaterialOverride()


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