現在、Unityで独自のVRMビューアを開発中なのだが、利用しようとして試している機能で悩んで原因がわかってきたので簡単にまとめてみた。
動的にFbxやObjを読み込めるアセット「TriLb2」というのがある。
TriLib2 - unity Asset Store
※参考記事
https://qiita.com/jyouryuusui/items/5d0f041fc635295640c8
やろうとしたこと
自作アプリの特徴として、VRMの他にVRMに取り付けたい小物も読み込めるようにして、動的にVRMに色々パーツを付けてポージングして遊べるようにしたい。
そこで3Dモデルの動的読み込みで有名なTriLib2の力を借りようと考えて導入した次第。
発覚した問題
今までVRoid作成時に作った小物Fbxを試しに読み込ませてテストしようとしたら・・・テクスチャやマテリアルが表示されないのだ!
試しに、アビス・ホライズン開発チームが公開しているFbxを読み込ませてみると正常に表示される。
最初はTriLib2の利用の仕方、コーディング方法でミスがあるのかと思ったが、他所様のFbxが正常に読み込めるので、TriLib2の利用の仕方にミスはない模様。
ファイル・フォルダの構成を確認
TriLib2に読み込ませるのにfbx単体ではダメ?明示的にフォルダを構成しなければいけないのか?と思って逸仙のFbxに倣ってフォルダを構成し、Zip圧縮してみたがやはりダメ。
これを真似たが別にフォルダ構成が重要とかそういうわけではないと察した。
Blenderで設定を確認
Blenderで各設定を見直してみた。
自作のVRoid用小物のFbx=MToon_universioned
シェーダーが明らかに違う。
そこで試しに自作の小物FbxのシェーダーをプリンシプルBSDFに設定し直して、TriLib2で読み込ませてみた。
(本当はマテリアルの設定も怪しいが後でそこは変更しなくても今回の問題には影響なかったのでスルーした)
正常に表示されるようになった!Asset Unloaderでもマテリアルの画像のサムネイルが認識されるようになっている。
上図のうち、要素1の「base_color_texture」にあたる部分がいままではサムネの色がなくブランクだった。
結論
TriLib2はVRoid/VRMのMToonシェーダーには対応していないことがわかった。TriLib2で動的にFbxやObjなどを読み込ませたかったから、VRoid用だとしてもプリンシプルBSDFなどの一般的なシェーダーにする必要ありそうだ。
ただVRoidにMToon以外のシェーダーを設定した3Dモデルを寄り添わせると雰囲気が違ってくる。テクスチャの雰囲気がMToonとそれ以外では違うのだ。ゲームなどでの利用では作風の問題にも影響してくる可能性がある。
もちろん動的にゲーム中に3Dモデルを読み込ませるなんて、よほどのことだろう。自分はその「よほど」の特殊事例なだけかもしれない。
あと、VRoidSDKをプロジェクトに導入していると、TriLib2はnewtonsoft.JSON.dllが競合するのでビルド時にエラーが出るので要注意。(自分はまだ解決に至っていないが、VRoidSDKがアプリに不要だとわかったので削除して事なきを得た。)