どうもふしめろです。
今回は前回の記事に引き続きVRchatのアバターにEyeTrackingを実装していきます。
今回は作業が繁雑な上になれていないとかなり大変ですので、心してかかってください。
必ず利用規約に目を通しましょう!
MMDモデルに限らずVRchat上で自分以外の人が創ったモデルを利用する際は
モデルの利用規約にしっかりと目を通しましょう。
モデルの規約を守らない場合モデル作者さんに多大なるご迷惑がかかります!
また、自作のアバターを作ってみたい!!
という方はこちらの記事が有意義かつおすすめです。
VRChatで自作アバターを作りたい人向けの記事
— ふしめろ@バーチャルYouTuber (@hushinomiya) 2018年1月7日
3Dモデルなんて作れないいい!!!
って人は是非こちらを参考にして自作モデルを作ってみてください。
オリジナルアバターを簡単に作りたい人向けチュートリアル モデリング編 https://t.co/4w7iGDSgo6 pic.twitter.com/V22gSqdp9V
- 必ず利用規約に目を通しましょう!
- また、自作のアバターを作ってみたい!!という方はこちらの記事が有意義かつおすすめです。
- 参考動画
- 対象読者
- 持ち物
- blender-mesh編集
- blender-bone編集
- Unity編
- EyeTrackingは実装できたが・・・
- 大口開ける問題の解決
参考動画
対象読者
前回の記事を読み、アバターにLipSyncを実装できてよくわからないソフトでもなんとなく操作できる人
持ち物
MMDモデルが読み込めるblender
LipSyncに対応させたMMDモデル
何があってもめげない心
それでは始めて行きましょう
blender-mesh編集
blenderでMMDモデルを読み込む
まずはblenderでMMDモデルを読み込みます。
これはファイルからインポート>MikuMikuDanceを開いて良い感じにインポートすればOKです。
インポート時に左下にある拡大縮小の値を0.08に設定すると良い感じになるみたいです。
オブジェクトを整理・リネームする
その後、分かりやすい様にオブジェクトを整理します。
ジョイントなどは消してしまって大丈夫です。最低限必要なのは三角形アイコンのmeshとboneの情報です。
そして、boneとその親に
Armature
と言う名前をつけます。あと何回か名前をつける場面があるのですが、誤字がないように気をつけてください。
meshを分割・再統合・必要に応じてデシメート
次にテクスチャーを表示させて色をつけた後、meshを分割します。分割方法は左端の各タブからMMDのタブを選択し、Separate by Materialsとか書いてある奴を押します。
これにより、meshが分割されます。
このときに、ばらした各メッシュをblenderの機能を使ってデシメートすることが出来ます。ただ、分割したすべてのmeshにはシェイプキーつまりモーフが添加されているので、モーフの影響を受けるmesh以外これらを削除してください。
なぜならblenderではシェイプキーが設定されているmeshはデシメート出来ないためです。腕や小物にもシェイプキーがついているので、随時消していきましょう。
そして、見ればわかるとおりmeshはかなり細かく分かれているので、管理がめんどくさいです。なのでばらしたmeshを再度統合させます。
再統合にはいくつかの条件があり、
- まずmeshが見えている状態であること
- 次にマウスカーソルを作業スペース(モデルが3Dで表示されているところ)に持っていっていること
- 最後にCtrl+Jを押すこと
これらを守って統合していってください。
そして、上記の作業が終わった各メッシュは最終的に一つのmeshに統合しておいてください。
一つのmeshに統合した場合
VRchatのパフォーマンスがアップします。
簡単に言うと複数のメッシュの場合FPSが落ちやすくなり、一つのメッシュに統合しておくとFPSが落ちにくくなります。オススメです。
meshをリネーム
そして、統合が完了したら。モーフを設定したmeshの名前を
Body
と変更します。必ずこの名前にしてください。
mesh編集はこれで終わりです。すべて見えなくしてかまいません。
blender-bone編集
さて、次によくハマるbone編集です。ゆっくりやっていきましょう。ここからは動画を見ながらやることを推奨します。
boneの削除とリネーム
まずはboneを表示し、いくつかのboneを削除していきましょう。
基本的には足の間にあるぶっといboneは必要ありません。これらを消してキレイに足のboneが見えるようにしてください。
次にboneのリネームです。
Hips
Spine
Chest
Neck
Head
このようにboneをリネームしていってください。どのboneがどれに値するかは正直モデルによるのでフィーリングに頼るしかありません。
そして次に右目左目のboneをリネームします
LeftEye
RightEye
これでOKですね。
ここまで来ると概ねこのような形になっているはずです。
目boneの向きを調整する
次に目boneの向きを調整します。
MMDの目boneは基本的に横に向かって伸びています。しかし、VRchatではこれを垂直に立てる必要があるようなので立てます。
このとき、MMDの目boneには目先boneという小骨がくっついていることが多いのですが、どうも目のboneは一本でないとダメなようです。なのでどちらかの骨を消さなければいけないのですが、目のmeshがこの二つのboneのどちらにくっついているかの確認しなければなりません。なので、両方の骨を大きくし、ポーズモードでの挙動を確認してから削除すると良いでしょう。*1
目boneを回転させる
目boneを垂直に立てたあと、目boneの軸を調整します座標軸を表示した後目boneの軸を回転させて、Zの矢印が前に、Xの矢印が左腕の方を向くようにします。
Hipsのboneを垂直に直す
さて、最後にHipsの角度を調整します。
一部のMMDモデルではHipsに相当するboneが尻尾みたいな感じで飛び出ていることがありますので、上記の目boneと同じ要領で回転させ、垂直にしてやります。
これでblenderでの編集は終わりです。出力しましょう。
fbxで出力
出力したいオブジェクトをすべて選択した後、エクスポート>fbxでFBXファイルで出力するのですがこのとき、下のように出力設定を少しいじってください。
このとき拡大縮小欄の右側にある、帽子と矢印のマークのチェックを外すと良いみたいです。
これで出力すればOKです。unityに行きましょう。
Unity編
さて、Unityです。とりあえずいつものように先ほど出力したFBXをhierarchyにおいてください。このときによくテクスチャがバグるので、各meshのテクスチャ設定をいじって正常に戻しておいてください。
先に一度ローデン氏のサイトでFBXを作っておくと、バグりが少なくなる印象があるので、FBXを置く前にそちらでFBXを出力して置くのも良いかもしれません。
テクスチャが正常であるということを前提に話を進めていきます。
Rigにboneを設定していく
さて、VRchatでアバターをアバターとして使うためにはRigをhumanoidにしなければならないのは前回の記事の通りなのですが、今回出力したファイルではhumanoidに設定してもboneが上手く置かれません。
なので、手動でboneを設定してやる必要があります。
ここのconfigurationをおして、bone設定に飛びます。このときセーブしろと言われるのでセーブします。
そして、異常が出ているところの骨を治します。基本的にはめちゃくちゃに骨が入っているので、すべてのboneが正しく設定されているかを見た方が良いでしょう。
スケールがすさまじいことになっているので0.5とかスケールを縮小して使ってくださいね。
追記
5.6Updateでこのbone周りがちょっと難しくなっているようです。
UpperChestにボーンを設定したらアバターをアップロードできないので、UpperChestにボーンを割り当てずに、ショルダーとネックの親のボーンをチェストに割り当てなければ行けません。
よく解らないと思いますので下の画像通りにしてみてください。
この青く光っているボーンがネックとショルダーの親のボーンです。似たような場所に似たような骨があるはずなので、探して設定してみましょう。
UpperChestにboneを設定しないようにするといいらしいです。
また、口が半開きになる症状が出たらheadからjawボーンをNoneつまり、設定を外せば直ることが多いです。
EyeTrackingは実装できたが・・・
さて、ここまででEyeTracking自体の実装は完了しましたが、マイクを切っているのに時たま大口を開けるというモーションが入ります。
他のモデルでも試したのですが、同じような症状が出るので何かがおかしいのですが何がおかしいのかよくわかりません。
煮え切りませんが一端これで終わりにします。うーん残念。
大口開ける問題の解決
タチコマさんよりこのような情報をもらいました。
前にvrc.lowerlid入れてないモデル作ったけど、口開いて何でだろうと調べたら、メッシュをBodyにした場合、モーフの1から4はvrc.blink記述関係なく瞬きと目蓋だった。3、4番目に口パクモーフあったのが原因だった。
by tachikoma390
確かに今回のモデルは vrc.lowerlid関連のモーフを設定していないので急遽実施しました。その結果改善しました。
- 確かに上から4番目までのモーフが瞬き関連に割り当てられていた
- モーフ適用meshはBodyと明記しなければ瞬きおよびEyeTrackingは動作しなかった
- お宮さんのネオンちゃん可愛い
移動時にちょくちょく白目向く以外は直りました!
tachikomaさんサンキュー!
*1:ただboneの設定によっては小骨を消すと目が取り残されるというホラーな状態になるのでこれもモデルによります