どんぶらアニマル さんぽ道

CBR250RR(MC22)とNSR80(HCO6)とAPE50(AC16)を中心とした備忘録。

ClusterのアバターをBlender 3.2で作ってみた

 METAのメタバースがいまいち盛り上がってない、ディズニーがメタバース部門を解体とネガティブなニュースが続くも、バンダイがガンダムを軸にしたサービスを予定しているなどポジティブなニュースもある中、何もやったことが無いと子供達にもおいて行かれそうなのでclusterをやってみることにした。

clusterが用意しているロボットのアバターで2時間位いくつかワールドを徘徊してみたけど、何していいのかよくわからないというのが正直な感想。で、あきた。

メタバースは社会であると評されることから人とコミュニケーションしないと始まらないんだろうなと思いつつも、知らない人に話しかける勇気がまだ出ない。

勇気充填しつつ、アバターを作ることで愛着がわいて継続できるかもと淡い期待をしつつアバターを作ってみた。主につまずいたところを書いてとく。

 

環境

OS:Windows10 Pro
Blender:3.2.1

Unity:2019.4.40f1
VRゴーグル:なし(誰でも、というにはまだ高すぎ。NTTグループの新会社がきっかけで安くていいのが出るのを期待)
 

clusterを選んだわけ

ググってみると有名どころはVRChatとclusterっぽかった。他にもいろいろあるみたいだけど情報収集に疲れたのでこの2つから選ぶことにした。

clusterにした理由は主に2つ

・スマホでもできる(社会であるからにはゴーグルが無いお外でもアクセスできて欲しい)
・日本のサービスだから(日本がんばれ)

社会にはSNSも含まれてて、LINEや各種メッセンジャーの代わりにもなるはずなので、いつでも、どこでも使えるべきであると思ってる。(ほぼメタバースを使ったことが無いので、この認識は間違ってるかも)

 

clusterにアップできるモデルの作り方

禅(zen)さんのyoutubeの「ワニでもできる!モデリングforVRChat」シリーズと「《cluster》ワニでもできた!アバターをVRMにしてclusterにアップロードしよう」でツールのインストールから全てを解説してくれてる。感謝、感謝。

第四回の21:40あたりからのシェイプキーを応用して「あいうえお」のリップシンクも追加した。

 

Blenderでモデリング

多分、Blenderを使うのは半年くらいぶり。何からやるんだったっけ状態からいろいろググって思い出してモデルを作った。早くアップしたかったので簡単なモデルにした。基本的には禅(zen)さんの手順通りでできるけど、テクスチャの書き込みとか、テクスチャを使わずにマテリアルを設定するとか、板ポリ使うとかにちょっと違った手法も使ったので。

blenderでアバターを作成
 
以前にモデルを作ったときのテクスチャはGIMPとinkscapeで描いたけど、今回はBlenderの3Dビューに直接書いてみた。
 

BlenderからUnityにエクスポート

エクスポートの本当の正解はわからないけど、今のとこ下記の設定でうまくいってるっぽい。
・「パスモード」を「コピー」にして、「テクスチャの埋め込み」(右のアイコン)をオン
・「オブジェクトタイプ」は「エンプティ」、「アーマチュア」、「メッシュ」、「その他」をオン
・「スケールを適用」を「全てFBX」に変更
・「トランスフォームを適用」をオン
・「リーフボーン追加」をオフ
BlenderからUnityへのエクスポート設定
 

Unityでマテリアルとボーンを設定

禅(zen)さんの手順どり、マテリアルとボーンを設定した。

Unityでマテリアルとボーンを設定

生成されたマテリアルは全てVRM/MToonにする。但し、アルファブレンドを使ったマテリアルは透過部が黒くなる。
unityでマテリアルを設定

透過させるには、「Rendering Type」を「Transparent」に変更する。
unityのマテリアルを透過設定
 

Unityで再インポートしてシェイプキーを設定

これも禅(zen)さんの教えの通り。ただし、再インポートがうまくいかなかったので再インポート用のプロジェクトを新規に作成してる。

unityに再インポートしてシェイプキー設定
 

つまずいたところ①:unityでエクスポートしたFBXをunityにインポートできない

16:45 VRMを再度インポートし、リップシンクを設定する
でインポートできなかった。ドロップしても何も起きない。
 
試しにメニューバーのVRM→UniVRM-0.61.1→Importも試してみたら下記のエラーが発生。
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 ()
 
1行目のこのエラーをググってみると「Error in VRM file exported #654」に0.63.1でfixしたと書いてあるので、UniVRM-0.63.2_2c19.unitypackageを使ってみたけど改善せず。その他いろいろ試した結果、既存のプロジェクトへのインポートはあきらめて、新たにシェイプキーを設定するためだけのプロジェクトを作って回避した。手順は以下の通り。
 
・新しいプロジェクトを作る
・新しいプロジェクトが開いたらUniVRM-0.61.1_7c03.unitypackageをダブルクリックしてインポート
・unity上でAssetsの中にVRM01フォルダを作成
・unityで書き出したFBXファイルをVRM01フォルダ内にドロップ
 
あとは、禅(zen)さんの動画の通りに進めたらできた。
 
このつまずきに半日くらい費やした。
 

つまずいたところ②:unityにシェイプキーが無い

最初は、①の方法でインポートしてもBlenderで定義したシェイプキーが赤枠の部分に何も表示されなかった。
 
blenderで設定したシェイプキーがunityに無い

 
原因は、Blenderで作ったときに耳やツノ、手、足などにミラーモディファイアを使っているが、適用してなかったから。以下はBlenderでの作業。
 
耳、ツノにはミラー状態でシェイプキーを定義しているので、そのままではミラーを適用できず、「モディファイアはシェイプキーのあるメッシュには適用できません」(赤枠部)のエラーになる。ミラー以外にもサブディビジョンも定義していて、こっちも適用できない。
シェイプキーを設定したモディファイアの適用ができない
 
シェイプキーを定義しているオブジェクトのモディファイアの適用にはホロモンさんの「Blender2.8でシェイプキーを設定したオブジェクトにモディファイアを適用する(Apply Modifier アドオン)」を参考に(ホロモンさんはフォーク元をリンクしていたみたいだけどリンク切れだったのでTareminさんの2.8用の)Apply Modifierアドオンをインストールしてすべてのオブジェクトのミラーとサブディビジョンモディファイアを適用した。(試してないけどサブディビジョンは適用しなくてもいいのかも)
 
ここでの注意点は、アーマチュアには適用しないこと。最初は全てのモディファイアを適用したので、clusterにアップしたら直立不動で移動するアバターになってしまった。アーマチュアを適用するとウェイトが無くなるのか、親子関係が解除されるのかしてボーンに追従しなくなるみたい。
 
なので「Apply Selected Modifier」でアーマチュア以外をチェックして適用を実行した。
モディファイアを適用してしまうと、その後のモデルの修正が面倒になるので、モデルのファイルをコピーしてモディファイアの適用とエクスポートをするためのファイルを作った。モデルの修正をする時はコピー前のファイルに戻って修正して、再度モデルのファイルをコピーしてモディファイアの適用、エクスポートをするという感じの運用にしてる。
 
このつまずきも半日くらい費やした。

つまずいたところ③:板ポリがUnityで表示されない

目と頬紅は頭の前に板ポリを置いて、テクスチャを設定している。これはUnityでも表示される。(ラッピングを使えば頭にピッタリの板ポリが作れるけど今回はやってない)
bldenerで板ポリ
 
元々、口も板ポリのテクスチャを切り替えることで動かそうと思っていたが、Unityでのやり方がわからなかったので、簡単にできそうな方法として、新たに口の板ポリを用意して頂点を動かすことにした。口の板ポリにはテクスチャは設定せず、マテリアルだけ設定して色を黒にしたらUnityでは表示されなかった。
 
分かりにくいけど「う」のシェイプキーの時の口の厚みのない口オブジェクト。口オブジェクトは一旦、上唇と下唇の2つのオブジェクトを作って1つのオブジェクトに結合してある。真顔(ニュートラル)の時は上下とも同じ形にしてにっこり顔にしてる。
blenderで口のシェイプキー
 
 
そこで、頂点を選択して、「e」でほんのちょっとだけ押し出して厚みを付けた。これでUnityでも口が表示されるようになった。
blenderで口のシェイプキー

多分、厚みが無く、テクスチャも無いものは表示されないっぽい。よって、厚みを付けるかテクスチャを設定することで回避できるみたい。
 
これは1時間位で回避できた。
 

clusterにアップロード

禅(zen)さんの手順通りアップロードして最初の部屋?に入るとこんな感じ。
clusterにアバターをアップロード

 
リップシンクはこんな感じで口、ツノ、耳が動く。再生すると絶望的な音が出ます。モーフに時間がかかるので早口でしゃべると形が変わり切れずに次の音に変わっていく。どこかに速度の設定があるのかも。自分の声を聞くといつも絶望、削除したい。。。
 
 
いろんな人たちが会話してるけど勇気の充填が足りず。。。
clusterのロビーに行ってみた.png
 
clusterのロビーに行ってみた.png
そっと、ウィンドウを閉じた。
 
 
ここまで、つまづきを含めて2日くらいかかった。
モデルは腕や足、首にもテクスチャを貼って模様を付けたかったけど想定以上につまずき時間が長かったので模様無しのままアップしてしまった。しっぽも揺らしたいのでボーンは入れてるけど剛体使っていいのかしら?
 
とりあえず、マイクでしゃべるとシェイプキーを設定した口やツノ、耳が動いたので勇気を充填できたら行ってみよう。
 
気が向いたら感想をお願いします。(ログイン不要、ボタンを押すだけです)