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属性とマテリアル パラメータを手動で調整します。
- インポート プロセス中に、カスタム マテリアルの

