METAのメタバースがいまいち盛り上がってない、ディズニーがメタバース部門を解体とネガティブなニュースが続くも、バンダイがガンダムを軸にしたサービスを予定しているなどポジティブなニュースもある中、何もやったことが無いと子供達にもおいて行かれそうなのでclusterをやってみることにした。
clusterが用意しているロボットのアバターで2時間位いくつかワールドを徘徊してみたけど、何していいのかよくわからないというのが正直な感想。で、あきた。
メタバースは社会であると評されることから人とコミュニケーションしないと始まらないんだろうなと思いつつも、知らない人に話しかける勇気がまだ出ない。
勇気充填しつつ、アバターを作ることで愛着がわいて継続できるかもと淡い期待をしつつアバターを作ってみた。主につまずいたところを書いてとく。
- 環境
- clusterを選んだわけ
- clusterにアップできるモデルの作り方
- Blenderでモデリング
- BlenderからUnityにエクスポート
- Unityでマテリアルとボーンを設定
- Unityで再インポートしてシェイプキーを設定
- つまずいたところ①:unityでエクスポートしたFBXをunityにインポートできない
- つまずいたところ②:unityにシェイプキーが無い
- つまずいたところ③:板ポリがUnityで表示されない
- clusterにアップロード
環境
OS:Windows10 Pro
Blender:3.2.1
VRゴーグル:なし(誰でも、というにはまだ高すぎ。NTTグループの新会社がきっかけで安くていいのが出るのを期待)
clusterを選んだわけ
ググってみると有名どころはVRChatとclusterっぽかった。他にもいろいろあるみたいだけど情報収集に疲れたのでこの2つから選ぶことにした。
clusterにした理由は主に2つ
・スマホでもできる(社会であるからにはゴーグルが無いお外でもアクセスできて欲しい)社会にはSNSも含まれてて、LINEや各種メッセンジャーの代わりにもなるはずなので、いつでも、どこでも使えるべきであると思ってる。(ほぼメタバースを使ったことが無いので、この認識は間違ってるかも)
clusterにアップできるモデルの作り方
禅(zen)さんのyoutubeの「ワニでもできる!モデリングforVRChat」シリーズと「《cluster》ワニでもできた!アバターをVRMにしてclusterにアップロードしよう」でツールのインストールから全てを解説してくれてる。感謝、感謝。
第四回の21:40あたりからのシェイプキーを応用して「あいうえお」のリップシンクも追加した。
Blenderでモデリング
多分、Blenderを使うのは半年くらいぶり。何からやるんだったっけ状態からいろいろググって思い出してモデルを作った。早くアップしたかったので簡単なモデルにした。基本的には禅(zen)さんの手順通りでできるけど、テクスチャの書き込みとか、テクスチャを使わずにマテリアルを設定するとか、板ポリ使うとかにちょっと違った手法も使ったので。
BlenderからUnityにエクスポート
Unityでマテリアルとボーンを設定
禅(zen)さんの手順どり、マテリアルとボーンを設定した。
生成されたマテリアルは全てVRM/MToonにする。但し、アルファブレンドを使ったマテリアルは透過部が黒くなる。
Unityで再インポートしてシェイプキーを設定
これも禅(zen)さんの教えの通り。ただし、再インポートがうまくいかなかったので再インポート用のプロジェクトを新規に作成してる。
つまずいたところ①:unityでエクスポートしたFBXをunityにインポートできない
unknown shader VRM_USE_GLTFSHADER. UnityEngine.Debug:LogWarningFormat (string,object[]) VRM.VRMMaterialImporter:CreateMaterial (int,UniGLTF.glTFMaterial,bool) (at Assets/VRM/UniVRM/Scripts/Format/VRMMaterialImporter.cs:51) UniGLTF.ImporterContext/d__50:MoveNext () (at Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs:673) DepthFirstScheduler.CoroutineFunctor`1 :Execute () (at Assets/VRM/DepthFirstScheduler/Functor.cs:118) DepthFirstScheduler.Schedulable`1 :Execute () (at Assets/VRM/DepthFirstScheduler/Schedulable.cs:102) DepthFirstScheduler.Schedulable`1 :ExecuteAll () (at Assets/VRM/DepthFirstScheduler/Schedulable.cs:114) UniGLTF.ImporterContext:Load () (at Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs:490) VRM.VRMImporterMenu/<>c__DisplayClass0_0: b__0 () (at Assets/VRM/UniVRM/Editor/Format/VRMImporterMenu.cs:60) UnityEditor.EditorApplication:Internal_CallDelayFunctions ()