本日は glTF の技術調査枠です。
KhronosGroup/UnityGLTFでglbファイルの読み込みを試してみます。
KhronosGroup/UnityGLTFとは
3Dモデルやシーンを表現するフォーマットである glTF を開発した Khronos Group が公開している Unity 用ライブラリです。
github.com
利用すると Unity で以下の操作が可能になります。
・glTF 2.0ファイルの実行時インポート
・glTF 2.0ファイルの実行時エクスポート
・glTF 2.0ファイルの設計時インポート
・glTF 2.0ファイルの設計時エクスポート
2020/04/10現在 Unity 2018 以降のバージョンでのみメンテナンス/サポートされています。
本記事ではこの KhronosGroup/UnityGLTF を用いて UnityEditor での glb ファイルの動的読み込みを試してみます。
KhronosGroup/UnityGLTFを取得する
git clone でGitHubか、zip ファイルでプロジェクトを取得します。
今回は[Download ZIP]でプロジェクトをダウンロードしました。
ダウンロードしたプロジェクトを任意のディレクトリに展開します。
glbファイルのサンプルを取得する
今回動的読み込みを試す glb ファイルのサンプルは以下から取得しました。
github.com
こちらの 2.0/Duck/glTF-Binary をダウンロードして取得します。
github.com
GLTFSerializationのビルド
最初に GLTFSerializer のビルドを行います。
GLTFSerializer は Unity アセットモデルのシリアライズと GLTF アセットのデシリアライズを行うための C#DLL です。
GLTFSerialization ディレクトリ下の GLTFSerialization.sln を開きます。
ソリューションファイルを開いた際、環境によっては以下のようなダイアログが表示されることがあります。
SDK のターゲットバージョンは最新化しても問題ないので[OK]をクリックします。
ターゲットバージョンが変更できているかどうかは GLTFSerializationUWPTests プロジェクトを右クリックして[プロパティ]を開くと確認できます。
ソリューションの構成を Release ビルドに切り替えます。
UWP のビルドを通すため、GLTFSerializationUWPTests プロジェクトの構成を一部変更します。
メニューから ビルド -> 構成マネージャー を開きます。
GLTFSerializationUWPTests のプラットフォームのみ、[ARM]に変更します。
この状態でビルドを行います。
メニューから ビルド -> ソリューションのリビルド を実行します。
4つのプロジェクトのビルドが正常終了していればビルド成功です。
GLTFSerializationUWPTests ビルドが成功すると、UnityGLTF/Assets/UnityGLTF/Runtime/Plugins 配下にプラグイン類が出力されます。
UnityGLTFプロジェクトの実行
プラグインの出力が完了したら UnityGLTF プロジェクトを Unity で開きます。
2020/04/10現在、プロジェクトは Unity 2018.4.14f1 以上のバージョンで作成されています。
UnityGLTF のフォルダを指定して Unity プロジェクトを開きます。
今回、筆者の環境では Unity 2018.4.20f1 を使用して開きました。
Unity プロジェクトを開いたら Colnsole を[Clear]します。
継続的なエラーが発生していなければ、プラグインを正常に読み込めています。
サンプルシーンを利用する
このプロジェクトを使って glb ファイルの動的読み込みを試してみます。
サンプルとして以下のサンプルシーンを開きます。
・Assets/UnityGLTF/Samples
シーンを改変するため、元のサンプルシーンを残して置きたい場合は File -> Save As... からシーンを別名保存しておきます。
今回は Scene/Main として別名保存しました。
サンプルデータの取り込み
取得した glb ファイルのサンプルをプロジェクトに取り込みます。
今回は StreamingAssets ディレクトリに新たに SampleGLB ディレクトリを作成してファイルをコピーしました。
StreamingAssets ディレクトリは UnityEditor 上から参照可能なディレクトリなので、本ディレクトリ配下にファイルを配置する必要があります。
・StreamingAssets/SampleGLB/Duck.glb
glbファイル動的読み込みのテスト
取り込んだ Duck.glb を読み込むようサンプルシーンを修正します。
Hierarchy の GLTF オブジェクトを選択し、Inspector ビューを開きます。
オブジェクトのサイズをそのまま表示したいので Transform の Scale を X:1, Y:1, Z:1 に変更します。
GLTFComponent の[GLTF Uri]に読み込むファイルの StreamingAssets ディレクトリ以下のパスを指定します。
今回の場合、SampleGLB/Duck.glb を指定します。
シーンの再生ボタンをクリックします。
glb ファイルが読み込まれ、シーン上に3Dモデルが表示されれば成功です。