Unity glTFast
Unity glTFastというのを使う。前から個人の方?が開発してたけど、Unityに統合されたらしい
UnityのほうのGithubページ
ドキュメント
アセットを入れる
これでPackageManagerから入れれる
com.unity.cloud.gltfast
入った
Ver6.2.0
公式ドキュメントのどこにも書いてない・・・と思ってたが、左上のバージョンで6.2.0にしたら書いてあった
ランタイムロード
空のオブジェクトにGLTFAssetというコンポーネントをつける
そしてgltfかglbのモデルのURLを指定する。
とりあえずこちらの記事の方のURLを使わせていただいた
そして実行すると3秒後ぐらいに読み込まれた。
GltfAssetをつけたオブジェクトの子になる
自分でもLumaAIのスキャンデータをgithubにおいてそれを読み込もうとしたら
glTF has no (main) scene defined. No scene will be instantiated.
と出て読み込まれなかった。
gltfファイルにシーンを設定しないといけないのか・・・?
エディタへのインポート
ドキュメントを見ると普通にglbファイルをインポートできそうだけどインポートしても何も起こらない・・・
最初一度uniGLTFが競合しているみたいなエラーが出たからそれのせいかな?2回目以降何も出ないが
複数glbインポーターがデフォルトとしてあるときは、片方をオフせよと書いてあった。VRMのほうはオフの仕方わからない・・・
しょうがないのでglTFastのほうをオフにする
Player設定のOther SettingsでGLTFAST_FORCE_DEFAULT_IMPORTER_OFFを追加する
そしたら無事読み込めるようになった。確かに二つのインポーターがあってuniGLTFのほうがデフォルトになってる。
読み込んだ後でGLTFastのほうに変更できた。
エディタからのエクスポート
うまくランタイムで読み込めたadamHeadと読み込めなかったlumaAIのデータを比べたら階層構造が違うようだ
読み込むためのデータを作るのに、Unity glTFastでエクスポートしたほうがいいのかな~?
エクスポートは簡単で3種類やり方があってそれぞれ、glb形式かgltfか選べる
これで書き出したら勝手に階層構造がいい感じに変わるのかと思ったが、書き出したものをエディタにインポートしても特に階層は変わっていない。
ランタイムインポートできるか
でもまたgithub経由でランタイムインポートしたら読み込まれた!テクスチャないが
シーンごと書き出しも試した。ついでにポイントライトとかも追加した。
それをランタイムインポートしたら読み込まれた!
やはり一度Unityから書き出さないと読み込まれないのか・・・
テクスチャ
あとテクスチャに関してはUnityから書き出している時点でついてなかった;;
別のfbxのとましーぷちゃんをglbで書き出してランタイムインポートしたらちゃんとテクスチャついた。
glbをglbで書き出してたのがダメだったのか・・・?
LumaAIからobjデータで書き出して、それをUnityでGlbに変換したらちゃんとテクスチャがついた!
ボタンを押したらインポート
またこちらの記事にあるスクリプトを使ったらできた
Unityのラインタイム中に表現に利用する3Dモデルを動的に差し替える
「gltf.Url = "url";」が呼ばれたときに読み込まれるのか~
なんか直感的じゃないような
ボタンから呼び出し
最後に
重いモデルだと読み込みに時間がかかるがうまくいっているのかわからないのでローディング中画面を出したい。ドキュメント見た限りそういう機能はないのかな?それとも一般的なやり方がなにかあるのかな~