トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

UnityでGLTFをランタイムロード【Unity glTFast】

Unity glTFast

Unity glTFastというのを使う。前から個人の方?が開発してたけど、Unityに統合されたらしい

gamemakers.jp

UnityのほうのGithubページ

github.com

ドキュメント

docs.unity3d.com

zenn.dev

アセットを入れる

これでPackageManagerから入れれる

com.unity.cloud.gltfast

入った

Ver6.2.0

公式ドキュメントのどこにも書いてない・・・と思ってたが、左上のバージョンで6.2.0にしたら書いてあった

ランタイムロード

docs.unity3d.com

空のオブジェクトにGLTFAssetというコンポーネントをつける

そしてgltfかglbのモデルのURLを指定する。

とりあえずこちらの記事の方のURLを使わせていただいた

zenn.dev

そして実行すると3秒後ぐらいに読み込まれた。

GltfAssetをつけたオブジェクトの子になる

 

自分でもLumaAIのスキャンデータをgithubにおいてそれを読み込もうとしたら

glTF has no (main) scene defined. No scene will be instantiated.

と出て読み込まれなかった。

gltfファイルにシーンを設定しないといけないのか・・・?

エディタへのインポート

ドキュメントを見ると普通にglbファイルをインポートできそうだけどインポートしても何も起こらない・・・

docs.unity3d.com

最初一度uniGLTFが競合しているみたいなエラーが出たからそれのせいかな?2回目以降何も出ないが

複数glbインポーターがデフォルトとしてあるときは、片方をオフせよと書いてあった。VRMのほうはオフの仕方わからない・・・

vrm.dev

しょうがないのでglTFastのほうをオフにする

Player設定のOther SettingsでGLTFAST_FORCE_DEFAULT_IMPORTER_OFFを追加する

カスタム製スクリプトシンボル - Unity マニュアル

そしたら無事読み込めるようになった。確かに二つのインポーターがあってuniGLTFのほうがデフォルトになってる。

読み込んだ後でGLTFastのほうに変更できた。

エディタからのエクスポート

うまくランタイムで読み込めたadamHeadと読み込めなかったlumaAIのデータを比べたら階層構造が違うようだ

読み込むためのデータを作るのに、Unity glTFastでエクスポートしたほうがいいのかな~?

docs.unity3d.com

エクスポートは簡単で3種類やり方があってそれぞれ、glb形式かgltfか選べる

これで書き出したら勝手に階層構造がいい感じに変わるのかと思ったが、書き出したものをエディタにインポートしても特に階層は変わっていない。

ランタイムインポートできるか

でもまたgithub経由でランタイムインポートしたら読み込まれた!テクスチャないが

シーンごと書き出しも試した。ついでにポイントライトとかも追加した。

それをランタイムインポートしたら読み込まれた!

やはり一度Unityから書き出さないと読み込まれないのか・・・

テクスチャ

あとテクスチャに関してはUnityから書き出している時点でついてなかった;;

別のfbxのとましーぷちゃんをglbで書き出してランタイムインポートしたらちゃんとテクスチャついた。

glbをglbで書き出してたのがダメだったのか・・・?

LumaAIからobjデータで書き出して、それをUnityでGlbに変換したらちゃんとテクスチャがついた!

ボタンを押したらインポート

またこちらの記事にあるスクリプトを使ったらできた

Unityのラインタイム中に表現に利用する3Dモデルを動的に差し替える

「gltf.Url = "url";」が呼ばれたときに読み込まれるのか~

なんか直感的じゃないような

 

ボタンから呼び出し

最後に

重いモデルだと読み込みに時間がかかるがうまくいっているのかわからないのでローディング中画面を出したい。ドキュメント見た限りそういう機能はないのかな?それとも一般的なやり方がなにかあるのかな~