3D モデルをインポートしてシーン形式に変換し、Android Studio でプレビューする方法について学習します。
新しい 3D アセットをインポートする
シーンは、次の形式の 3D アセットをサポートします。
- OBJ
- glTF(アニメーションはサポートされていません)
- FBX(アニメーションあり / なし)。
新しい 3D アセットをインポートする手順は次のとおりです。
プロジェクトの
app
フォルダにsampledata
フォルダがあることを確認します。フォルダを作成するには、[Project] ウィンドウで
app
フォルダを右クリックし、[New > Sample Data Directory] を選択します。sampledata
フォルダは Android Studio プロジェクトの一部ですが、そのコンテンツは APK には含まれません。3D モデルのソースアセット ファイル(
*.obj
、*.fbx
、または*.gltf
)とそのすべての依存関係(*.mtl
、*.bin
、*.png
、*.jpg
など)をsampledata
フォルダにコピーします。これらのソースファイルをプロジェクトの
assets
フォルダやres
フォルダにコピーしないでください。コピーすると、それらが不必要に APK に含まれることになります。3D モデルのソースアセットを右クリックし、[Import Sceneform Asset] を選択してインポート プロセスを開始します。
これらの値は、app's
build.gradle
のsceneform.asset()
エントリで使用され、プロジェクトの*.sfa
ファイルと*.sfb
ファイルの生成場所を決定します。モデルを初めてインポートする場合は、デフォルト値を使用します。
フィールド 説明 ソースアセットのパス インポートする OBJ、FBX、glTF 3D モデルアセットのファイル名。 マテリアル パス default
は、組み込みのデフォルトのマテリアルか、カスタム マテリアルの*.mat
ファイルのパスを使用するようにシーンに指示します。
.sfa 出力パス デフォルトを使用するか、 sampledata
フォルダの下に別のパスを指定します。.sfa ファイルが見つからなければ、このファイルが生成されます。インポート プロセスの一部の側面は、変更して制御できます。
これにより、
*.sfa
が APK に不必要に含まれることがなくなります。.sfb 出力パス デフォルトでは src/main/assets/
フォルダが使用されるため、任意のアセット ファイル名を使用できます。ファイル名(ファイル拡張子なし)が有効なリソース識別子(
R.raw.filename
など)の場合、代わりにsrc/main/res/raw/
フォルダを使用できます。アプリで
assets/
フォルダとres/
フォルダを使用する方法について詳しくは、Android のアプリリソースの概要をご覧ください。アニメーション ファイル *.fbx
アニメーション ファイルをインポートする場合は、プラス記号(+)をクリックして、残りのファイルを個別に追加します。[完了] をクリックしてインポート プロセスを開始します。
アセットをインポートするために、プラグインは次のことを行います。
プロジェクト
build.gradle
にシーン Gradle プラグインを追加します(すでに存在しない場合)。dependencies { … classpath 'com.google.ar.sceneform:plugin:1.15.0' }
app の
build.gradle
ファイルを更新して、apply plugin
行と、新しくインポートされたアセットのsceneform.asset()
エントリを含めます。apply plugin: 'com.google.ar.sceneform.plugin' sceneform.asset('sampledata/models/andy.obj', // 'Source Asset Path' specified during import. 'default', // 'Material Path' specified during import. 'sampledata/models/andy.sfa', // '.sfa Output Path' specified during import. 'src/main/res/raw/andy') // '.sfb Output Path' specified during import.
アプリの
build.gradle
に新たに追加されたこれらのエントリは、次の 2 つの Gradle タスクを作成します。createAsset-<asset-name>
がまだシーンアセット定義(*.sfa
)ファイルが存在しない場合は、ファイルを作成します。このタスクでは既存の
*.sfa
ファイルが上書きされません。インポート後に SFA ファイルを変更しても、上書きされることはありません。*.sfa
ファイルは、人が読める形式でアセットのインポート設定を記述したテキスト ファイルです。ソースアセットのモデルとテクスチャを参照し、シーンベースの物理的マテリアルにマテリアル パラメータを指定することでマテリアルを定義します。compileAsset-<asset-name>
は、*.sfa
ファイルをシーンバイナリ アセット(*.sfb
)ファイルにコンパイルします。この
*.sfb
ファイルはアプリの APK に組み込まれ、実行時に読み込まれてレンダリング可能を作成します。
詳細については、Sceneform Gradle プラグイン リファレンスをご覧ください。
テキスト ウィンドウで
*.sfa
を、ビューア ウィンドウで*.sfb
を開きます。
以前にインポートした 3D アセットを更新する
以前にインポートした OBJ、FBX、glTF モデルのソースアセット ファイル(*.obj
、*.fbx
または *.gltf
)を更新する場合、app の対応する sceneform.asset()
エントリによって、プラグインが現在の *.sfa
パラメータに基づいて更新された *.sfb
ファイルを自動的に生成します。
インポート済みのアセットのパラメータを反復処理するには:
- SFA ファイル形式のリファレンスをガイドとして使用して、
*.sfa
テキスト ファイルを変更します。 - 変更を保存します。これにより、アセットが再コンパイルされ、
*.sfb
ファイルが更新されます。 *.sfb
ファイルをダブルクリックしてアセットの [閲覧者] ウィンドウを開き、更新されたアセットをプレビューします。
以前にインポートしたアセットにアニメーション データを含む更新する場合は、インポート ダイアログの [アニメーション ファイル] セクションでプラス記号(+)を使用し、更新された各 *.fbx
ファイルを個別にインポートします。
Gradle アセットの定義
インポート プロセスでは、build.gradle
ファイルの最後に *.fbx
アニメーション ファイルが追加されます。
sceneform.asset('sampledata/models/andy_dance.fbx',
'default',
'sampledata/models/andy_dance.sfa',
'src/main/res/raw/andy_dance',
['sampledata/models/andy_wave_r.fbx',
'sampledata/models/andy_wave_l.fbx'])
レンダリング可能アセットを作成する
アセットを *.sfb
形式にコンパイルしたら、次のように ModelRenderable
をビルドしてシーン内のノードにアタッチできます。
ModelRenderable.builder()
// To load as an asset from the 'assets' folder ('src/main/assets/andy.sfb'):
.setSource(this, Uri.parse("andy.sfb"))
// Instead, load as a resource from the 'res/raw' folder ('src/main/res/raw/andy.sfb'):
//.setSource(this, R.raw.andy)
.build()
.thenAccept(renderable -> andyRenderable = renderable)
.exceptionally(
throwable -> {
Log.e(TAG, "Unable to load Renderable.", throwable);
return null;
});
カスタム マテリアルの使用
シーンのデフォルトのマテリアルを使用すると、デベロッパーは簡単に優れた結果を得ることができます。カスタム マテリアルを使用して、アセットの外観を細かくカスタマイズすることもできます。
アセットにカスタム マテリアルを割り当てるには:
[カスタム マテリアル リファレンス](/sceneform/develop/custom-material)をガイドとして使用し、カスタム マテリアル定義(
*.mat
)ファイルを作成します。カスタム マテリアルをアセットに適用します。
新しいアセットをインポートする場合:
- インポート プロセス中に、カスタム マテリアルの
*.mat
ファイルを指定します。
以前にインポートしたアセットを更新するには:
*.sfa
コンテンツがカスタマイズされていない場合は、既存の*.sfa
ファイルと*.sfb
ファイル、およびアプリbuild.gradle
のsceneform.asset()
エントリを削除してから、アセットを再インポートします。これにより、再生成された*.sfa
属性とマテリアル パラメータは、カスタム マテリアルでサポートされるものと一致するようになります。*.sfa
のカスタマイズを保持するには、*.sfa
ファイルを開き、source
属性をカスタム マテリアル*.mat
ファイルのパスに変更してから、カスタム マテリアルに合わせて*.sfa
属性とマテリアル パラメータを手動で調整します。
- インポート プロセス中に、カスタム マテリアルの