東屋書店

一つのブログは一冊の本である

広告

VRchat上でEyeTrackingと瞬きをアバターに追加する方法-完全版

どうもふしめろです。

今回は前回の記事に引き続きVRchatのアバターにEyeTrackingを実装していきます。

今回は作業が繁雑な上になれていないとかなり大変ですので、心してかかってください。文字だけではほぼ伝わらないはずなので、動画も平行して見てください。 

gyazo.com

3d.nicovideo.jp

 

対象読者

前回の記事を読み、アバターにLipSyncを実装できてよくわからないソフトでもなんとなく操作できる人

 

www.hushimero.xyz

 

 

持ち物

MMDモデルが読み込めるblender<

blender.jp

blender-cg.net

LipSyncに対応させたMMDモデル

 

www.hushimero.xyz

 

何があってもめげない心

 

それでは始めて行きましょう

 

 

youtu.be

blender-mesh編集

blenderでMMDモデルを読み込む

まずはblenderでMMDモデルを読み込みます。

これはファイルからインポート>MikuMikuDanceを開いて良い感じにインポートすればOKです。

インポート時に左下にある拡大縮小の値を0.08に設定すると良い感じになるみたいです。

gyazo.com

 

オブジェクトを整理・リネームする

その後、分かりやすい様にオブジェクトを整理します。

ジョイントなどは消してしまって大丈夫です。最低限必要なのは三角形アイコンのmeshとboneの情報です。

そして、boneとその親に

Armature

と言う名前をつけます。あと何回か名前をつける場面があるのですが、誤字がないように気をつけてください。

gyazo.com

meshを分割・再統合・必要に応じてデシメート

次にテクスチャーを表示させて色をつけた後、meshを分割します。分割方法は左端の各タブからMMDのタブを選択し、Separate by Materialsとか書いてある奴を押します。

gyazo.com

これにより、meshが分割されます。

このときに、ばらした各メッシュをblenderの機能を使ってデシメートすることが出来ます。ただ、分割したすべてのmeshにはシェイプキーつまりモーフが添加されているので、モーフの影響を受けるmesh以外これらを削除してください。

なぜならblenderではシェイプキーが設定されているmeshはデシメート出来ないためです。腕や小物にもシェイプキーがついているので、随時消していきましょう。

 

そして、見ればわかるとおりmeshはかなり細かく分かれているので、管理がめんどくさいです。なのでばらしたmeshを再度統合させます。

gyazo.com

再統合にはいくつかの条件があり、

  • まずmeshが見えている状態であること
  • 次にマウスカーソルを作業スペース(モデルが3Dで表示されているところ)に持っていっていること
  • 最後にCtrl+Jを押すこと

これらを守って統合していってください。

そして、上記の作業が終わった各メッシュはすべて一つのmeshに統合しておいてください。

meshの一つをリネーム

そして、統合が完了したら。モーフを設定したmeshの名前を

Body

と変更します。必ずこの名前にしてください。

mesh編集はこれで終わりです。すべて見えなくしてかまいません。

gyazo.com

blender-bone編集

さて、次によくハマるbone編集です。ゆっくりやっていきましょう。ここからは動画を見ながらやることを推奨します。

boneの削除とリネーム

まずはboneを表示し、いくつかのboneを削除していきましょう。

基本的には足の間にあるぶっといboneは必要ありません。これらを消してキレイに足のboneが見えるようにしてください。

 

次にboneのリネームです。

Hips

 Spine

  Chest

    Neck

      Head

このようにboneをリネームしていってください。どのboneがどれに値するかは正直モデルによるのでフィーリングに頼るしかありません。

そして次に右目左目のboneをリネームします

LeftEye

RightEye

これでOKですね。

ここまで来ると概ねこのような形になっているはずです。

gyazo.com

目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ファイルで出力するのですがこのとき、下のように出力設定を少しいじってください。

このとき拡大縮小欄の右側にある、帽子と矢印のマークのチェックを外すと良いみたいです。

gyazo.com

gyazo.com

gyazo.com

gyazo.com

これで出力すればOKです。unityに行きましょう。

Unity編

さて、Unityです。とりあえずいつものように先ほど出力したFBXをhierarchyにおいてください。このときによくテクスチャがバグるので、各meshのテクスチャ設定をいじって正常に戻しておいてください。

先に一度ローデン氏のサイトでFBXを作っておくと、バグりが少なくなる印象があるので、FBXを置く前にそちらでFBXを出力して置くのも良いかもしれません。

テクスチャが正常であるということを前提に話を進めていきます。

Rigにboneを設定していく

さて、VRchatでアバターをアバターとして使うためにはRigをhumanoidにしなければならないのは前回の記事の通りなのですが、今回出力したファイルではhumanoidに設定してもboneが上手く置かれません。

なので、手動でboneを設定してやる必要があります。

gyazo.com

ここのconfigurationをおして、bone設定に飛びます。このときセーブしろと言われるのでセーブします。

そして、異常が出ているところの骨を治します。基本的にはめちゃくちゃに骨が入っているので、すべてのboneが正しく設定されているかを見た方が良いでしょう。

5.6Updateでこのbone周りがちょっと難しくなっているようです。

UpperChestにboneを設定しないようにするといいらしいです。

スケールがすさまじいことになっているので0.5とかスケールを縮小して使ってくださいね。

EyeTrackingは実装できたが・・・ 

さて、ここまででEyeTracking自体の実装は完了しましたが、マイクを切っているのに時たま大口を開けるというモーションが入ります。

他のモデルでも試したのですが、同じような症状が出るので何かがおかしいのですが何がおかしいのかよくわかりません。

 

煮え切りませんが一端これで終わりにします。うーん残念。

 

www.hushimero.xyz

 

 大口開ける問題の解決

タチコマさんよりこのような情報をもらいました。

前にvrc.lowerlid入れてないモデル作ったけど、口開いて何でだろうと調べたら、メッシュをBodyにした場合、モーフの1から4はvrc.blink記述関係なく瞬きと目蓋だった。3、4番目に口パクモーフあったのが原因だった。

by tachikoma390

確かに今回のモデルは vrc.lowerlid関連のモーフを設定していないので急遽実施しました。その結果改善しました。

  1. 確かに上から4番目までのモーフが瞬き関連に割り当てられていた
  2. モーフ適用meshはBodyと明記しなければ瞬きおよびEyeTrackingは動作しなかった
  3. お宮さんのネオンちゃん可愛い

移動時にちょくちょく白目向く以外は直りました!

tachikomaさんサンキュー!

 

*1:ただboneの設定によっては小骨を消すと目が取り残されるというホラーな状態になるのでこれもモデルによります