MRが楽しい

MRやVRについて学習したことを書き残す

KhronosGroup/UnityGLTFでglbファイルの読み込みを試す

本日は glTF の技術調査枠です。
KhronosGroup/UnityGLTFでglbファイルの読み込みを試してみます。
f:id:bluebirdofoz:20200410160102j:plain

KhronosGroup/UnityGLTFとは

3Dモデルやシーンを表現するフォーマットである glTF を開発した Khronos Group が公開している Unity 用ライブラリです。
github.com
f:id:bluebirdofoz:20200410160118j:plain

利用すると 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]でプロジェクトをダウンロードしました。
f:id:bluebirdofoz:20200410160129j:plain

ダウンロードしたプロジェクトを任意のディレクトリに展開します。
f:id:bluebirdofoz:20200410160139j:plain

glbファイルのサンプルを取得する

今回動的読み込みを試す glb ファイルのサンプルは以下から取得しました。
github.com
f:id:bluebirdofoz:20200410160156j:plain

こちらの 2.0/Duck/glTF-Binary をダウンロードして取得します。
github.com
f:id:bluebirdofoz:20200410160213j:plain

GLTFSerializationのビルド

最初に GLTFSerializer のビルドを行います。
GLTFSerializer は Unity アセットモデルのシリアライズと GLTF アセットのデシリアライズを行うための C#DLL です。

GLTFSerialization ディレクトリ下の GLTFSerialization.sln を開きます。
f:id:bluebirdofoz:20200410160226j:plain

ソリューションファイルを開いた際、環境によっては以下のようなダイアログが表示されることがあります。
SDK のターゲットバージョンは最新化しても問題ないので[OK]をクリックします。
f:id:bluebirdofoz:20200410160236j:plain

ターゲットバージョンが変更できているかどうかは GLTFSerializationUWPTests プロジェクトを右クリックして[プロパティ]を開くと確認できます。
f:id:bluebirdofoz:20200410160246j:plain

ソリューションの構成を Release ビルドに切り替えます。
f:id:bluebirdofoz:20200410160256j:plain

UWP のビルドを通すため、GLTFSerializationUWPTests プロジェクトの構成を一部変更します。
メニューから ビルド -> 構成マネージャー を開きます。
f:id:bluebirdofoz:20200410160307j:plain

GLTFSerializationUWPTests のプラットフォームのみ、[ARM]に変更します。
f:id:bluebirdofoz:20200410160318j:plain

この状態でビルドを行います。
メニューから ビルド -> ソリューションのリビルド を実行します。
f:id:bluebirdofoz:20200410160327j:plain

4つのプロジェクトのビルドが正常終了していればビルド成功です。
f:id:bluebirdofoz:20200410160339j:plain

GLTFSerializationUWPTests ビルドが成功すると、UnityGLTF/Assets/UnityGLTF/Runtime/Plugins 配下にプラグイン類が出力されます。
f:id:bluebirdofoz:20200410160353j:plain

UnityGLTFプロジェクトの実行

プラグインの出力が完了したら UnityGLTF プロジェクトを Unity で開きます。
2020/04/10現在、プロジェクトは Unity 2018.4.14f1 以上のバージョンで作成されています。

UnityGLTF のフォルダを指定して Unity プロジェクトを開きます。
f:id:bluebirdofoz:20200410160405j:plain

今回、筆者の環境では Unity 2018.4.20f1 を使用して開きました。
f:id:bluebirdofoz:20200410160413j:plain

Unity プロジェクトを開いたら Colnsole を[Clear]します。
継続的なエラーが発生していなければ、プラグインを正常に読み込めています。
f:id:bluebirdofoz:20200410160424j:plain

サンプルシーンを利用する

このプロジェクトを使って glb ファイルの動的読み込みを試してみます。
サンプルとして以下のサンプルシーンを開きます。
・Assets/UnityGLTF/Samples
f:id:bluebirdofoz:20200410160435j:plain

シーンを改変するため、元のサンプルシーンを残して置きたい場合は File -> Save As... からシーンを別名保存しておきます。
f:id:bluebirdofoz:20200410160445j:plain

今回は Scene/Main として別名保存しました。
f:id:bluebirdofoz:20200410160455j:plain

サンプルデータの取り込み

取得した glb ファイルのサンプルをプロジェクトに取り込みます。
今回は StreamingAssets ディレクトリに新たに SampleGLB ディレクトリを作成してファイルをコピーしました。
StreamingAssets ディレクトリは UnityEditor 上から参照可能なディレクトリなので、本ディレクトリ配下にファイルを配置する必要があります。
・StreamingAssets/SampleGLB/Duck.glb
f:id:bluebirdofoz:20200410160504j:plain

glbファイル動的読み込みのテスト

取り込んだ Duck.glb を読み込むようサンプルシーンを修正します。
Hierarchy の GLTF オブジェクトを選択し、Inspector ビューを開きます。
f:id:bluebirdofoz:20200410160514j:plain

オブジェクトのサイズをそのまま表示したいので Transform の Scale を X:1, Y:1, Z:1 に変更します。
GLTFComponent の[GLTF Uri]に読み込むファイルの StreamingAssets ディレクトリ以下のパスを指定します。
今回の場合、SampleGLB/Duck.glb を指定します。
f:id:bluebirdofoz:20200410160523j:plain

シーンの再生ボタンをクリックします。
glb ファイルが読み込まれ、シーン上に3Dモデルが表示されれば成功です。
f:id:bluebirdofoz:20200410160532j:plain