東屋書店

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

広告

VRchatでMMDモデルをアバターとして使う方法-上級者編

どうもふしめろです。

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

今回は作業が繁雑な上になれていないとかなり大変ですので、心してかかってください。

必ず利用規約に目を通しましょう!

MMDモデルに限らずVRchat上で自分以外の人が創ったモデルを利用する際は


モデルの利用規約にしっかりと目を通しましょう。


モデルの規約を守らない場合モデル作者さんに多大なるご迷惑がかかります!

 

 

gyazo.com

3d.nicovideo.jp

また、自作のアバターを作ってみたい!!
という方はこちらの記事が有意義かつおすすめです。

 

bibinbaleo.hatenablog.com

vr-san-o.hatenablog.com

参考動画

www.youtube.com

対象読者

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

 

www.hushimero.xyz

 

 

持ち物

MMDモデルが読み込めるblender

blender.jp

blender-cg.net

LipSyncに対応させたMMDモデル

 

www.hushimero.xyz

 

何があってもめげない心

 

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

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に統合した場合
VRchatのパフォーマンスがアップします。


簡単に言うと複数のメッシュの場合FPSが落ちやすくなり、一つのメッシュに統合しておくとFPSが落ちにくくなります。オススメです。

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が正しく設定されているかを見た方が良いでしょう。

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

追記

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

UpperChestにボーンを設定したらアバターをアップロードできないので、UpperChestにボーンを割り当てずに、ショルダーとネックの親のボーンをチェストに割り当てなければ行けません。

よく解らないと思いますので下の画像通りにしてみてください。

gyazo.com

 

この青く光っているボーンがネックとショルダーの親のボーンです。似たような場所に似たような骨があるはずなので、探して設定してみましょう。

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

また、口が半開きになる症状が出たらheadからjawボーンをNoneつまり、設定を外せば直ることが多いです。

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の設定によっては小骨を消すと目が取り残されるというホラーな状態になるのでこれもモデルによります

VRchatでMMDモデルをアバターとして使うマニュアル

どうもふしめろです。

この記事ではMMDモデルをVRchat上で使う際にLip Syncさせて目をぱちぱちさせて髪の毛スカートゆーらゆらーさせるためのマニュアルです。

必ず利用規約に目を通しましょう!

MMDモデルに限らずVRchat上で自分以外の人が創ったモデルを利用する際は


モデルの利用規約にしっかりと目を通しましょう。


モデルの規約を守らない場合モデル作者さんに多大なるご迷惑がかかります!


上級者の方はこちらもどうぞ

 

www.hushimero.xyz

 

また、自作アバターを作ってみたい!!!
という方はこちらの記事が非常に有意義かつおすすめです。

 

bibinbaleo.hatenablog.com

vr-san-o.hatenablog.com

持ち物

Unity 5.6.3p1

unity3d.com

最も基本的なソフト

VRchat SDK

www.vrchat.net

VRchatへアバターを上げるときに必須

公式サイトをスクロールしていくとSDKと出てくるのでそれをクリックしていく

PMXエディタ

kkhk22.seesaa.net

最強に可愛いMMDモデル

3d.nicovideo.jp

今回はお宮さんが作成されたMMDモデルの掲載許可が出ましたので彼女にお付き合いしてもらいます。

 

また、このネオンちゃんモデルはVRゲームであるAirtoneのメインキャラクターが大本であります。

airtone-vr.com

音ゲー苦手な僕でも普通にS評価とか出せる上に奥がめっちゃ深いので、VR機器を購入したらまず買うべきゲームの一つです。

絶対買いましょう!

 

Mantis LOD フリー版

Mesh Online - Polygon Reduction Tool for Unity

リンク先最下部の Online Edition v4.0リンクよりZIPをダウンロード

解凍した物をunityのassetにファイルごと入れておく

 

dynamicbone

unityのアセットストアで20ドルで売ってるので買う

注意

この記事では正確<わかりやすさを目指しているので各種用語はめちゃくちゃです。わかりにくかったらごめんなさい。

UnityとVRchatSDKをインストールする

まあ特に説明は必要ないはずです。

VRchatSDKの導入方法はUnity左上メニューのAssets>Import Package>Custom PackageでダウンロードしたVRchatSDKを選択した後Import押すだけです。

PMXエディタでモーフを編集してLipSyncの準備をする

目、口、表情モーフの複製

さて、あなたの用意した可愛いMMDモデルをPMXエディタで読み込みましょう。

gyazo.com

こんな感じになるので、左の画面よりモーフタブを選択しモーフ画面を開きます。

モーフとは簡単に言うとモデルの一部を値に応じて変形させて表情を作ったりする奴です。たとえば笑顔モーフに値を入れると目が∩∩こうなって口が∪こんな感じになります。

 

LipSyncは音声に応じて各種モーフを連続的に変化させていくことで実現しているようなので、ここから目、口、場合によっては表情に関係するモーフを選び、それ以外の不要なモーフは申し訳ないですが後の作業性を考えて今回は削除します。

なお、どのモーフが何に対応するかとかはモデルによって千差万別なので状況に応じて臨機応変に対応してください。

gyazo.com

今回の場合はこのようなモーフが登録されていました。この中からリップシンクに必要ななモーフを探していくことになります。

モーフの動作確認

どのモーフがどんな物かわからない場合は、モデルが出ている画面の編集>モーフ編集でウィンドウを開き、既存モーフボタンを押して編集開始ボタンを押し、動作確認欄のスライダーか0/1を押して変化を確認してください。

https://gyazo.com/7f1cd6970395e228c235990c87ff5d28

 

これはこの次の操作で重要になってきます。

モーフ名のリネーム

次に複製し残したモーフの名前をLipSync用の名前に変えていきます。

この操作は飛ばしても問題ないですが、後の操作が簡単になるのでやることを推奨します。

さて、LipSyncをするためには各「音」の口の動きをアバターに登録してやる必要があります。音のモーフは15あり、別に4つの目のモーフがあります

Name the 19 shapes exactly as follows:
(in the same order)


vrc.blink_left
vrc.blink_right
vrc.lowerlid_left
vrc.lowerlid_right
vrc.v_aa
vrc.v_ch
vrc.v_dd
vrc.v_e
vrc.v_ff
vrc.v_ih
vrc.v_kk
vrc.v_nn
vrc.v_oh
vrc.v_ou
vrc.v_pp
vrc.v_rr
vrc.v_sil
vrc.v_ss
vrc.v_th

Blender To Unity Vrchat Avatar Creation

この引用のv_**となっている物が音のモーフで、それ以外の上4つが目のモーフです。

そして、各音のモーフはどういった物が望ましいか? と言うのが上記の引用リンクの下の方にあり、サンプルで青い人の顔がずらっと並んでいます。これらが各音のモーフです。

gyazo.com

 

これは「vrc.v_aa」の口の形ですね。こういう形の口が15個乗っているのでそれらを比較する必要があるのですが、正直めんどくさいでしょうから、ある程度の指針を下に乗せておきます。

これの通りやってもらっても大丈夫ですし、やらなくても良いです。

ただ、一つだけ言えるのはアニメでキャラがしゃべっているときに口の形をことさら気にして見ている人はほとんどいないということです。これはVRchatでも同じできっちりやらなくても普通にしゃべっているように見えます。

 

なのでここはさくっと終わらせておきましょう。結構似た口の形が多いので適宜モーフの複製を行ってください。

 

また、モーフの動きを確認しながら名前を変更したり削除するときは、モーフ編集ウィンドウの編集中ボタンをオフにしないとおかしなことになるのでやめた方が良いです。

MMDモーフ対応表(提案)

vrc.blink_left :左ウインク
vrc.blink_right :右ウインク
vrc.lowerlid_left :左下まぶた*1
vrc.lowerlid_right :右下まぶた*2
vrc.v_aa :「あ」
vrc.v_ch :「ss」よりも口をすぼめた「い」
vrc.v_dd :控えめな「え」
vrc.v_e :「え」
vrc.v_ff :英語的なふの発音「□」が近い
vrc.v_ih :「あ2」ないし「あ3」それらがない場合「あ」か「□」のモーフを複製し適用
vrc.v_kk :「ih」と同じで口元が気持ち上がる感じ「ワ」も範囲に入る
vrc.v_nn :「ん」ないし「ih」か「dd」のモーフを複製
vrc.v_oh :「お」か「う」下記より口を広げている方
vrc.v_ou :「お」か「う」上記より口をすぼめている方
vrc.v_pp :Mをネイティブっぽく発音したエンムのム「にやり」か「ω」が近い
vrc.v_rr :「□」が近いので「ff」を複製
vrc.v_sil :標準のモーフを設定する要は真顔
vrc.v_ss :「ch」よりも口を広げた「い」「ch」を複製しても良いかも
vrc.v_th :「ih」に近いので複製

モーフの順番を守る

gyazo.com

リネームを19個分済ませて、余分なモーフを全部消したらこうなります。

口周りのモーフはどんな順番でも問題ないですが、必ず目関連のモーフは上の方にこの順番でおいてください。

なぜなら、上から4番目までのモーフは瞬きと下を向いたときの動作として勝手に割り当てされて自動的に動くからです。

下手すると口のモーフと相まってアへ顔になるのでマジで気をつけましょう。

 

 

これで保存しますが、一応別名で保存した方が良いでしょう。

注意

ただ、この設定だけでは目の瞬きは実装されません。目の瞬きを実装するにはボーンなどの設定が必要なので非常に大変です。 今回は準備ということで目のモーフを設定していることを覚えておいてください。

Pmx2Fbx WebでPMXをFBXに変換する

上記の内容で保存した編集済みPMXをローデン氏が作成したPMX→FBXファイル変換サイトを使用します。

ローデンの独り言 ver 6.1

gyazo.com

使い方についてはリンク先に書かれているので詳しくはそちらを見るといいでしょう。

ここからUnityに持って行くには下記のようにします。

  1. ダウンロードした物をpmxファイルが入っていたフォルダにつっこむ
  2. 突っ込んだファイルごとUnityのassetに放り込む

 

 

unityで各種編集

さて、ここまででUnity上にモデルが出現していると思います。

gyazo.com

ここからさらに手を加えていきますね。

FBXファイルのRigをHumanoidに変更する

gyazo.com

ちょっと見えにくいですが、Unity上でFBXファイルを選択するとinspectorタブにいろいろ出てきますが、その中のRigをクリックしてAnimation Typeを確認します。

普通はGenericになっていますが、これはダメなので選択してHumanoidに変更します。

gyazo.com

こうなるのでApplyを選択してconfigureを選択します。

そうするとセーブするか聞かれるのでセーブして、FBXのボーン設定に入ります。

gyazo.com

ここでボーンがきちんと所定の位置に入っているかどうかを確認します。

たまにスカートのボーンが足のボーンとして設定されていることがあったりするので要注意です。

直す場合はボーンをマッピングへドラッグ・アンド・ドロップすることで設定できます。

 

また、最近のアップデートでUpperChestにボーンを設定したらアバターをアップロードできないので、UpperChestにボーンを割り当てずに、ショルダーとネックの親のボーンをチェストに割り当てなければ行けません。

よく解らないと思いますので下の画像通りにしてみてください。

gyazo.com

 

この青く光っているボーンがネックとショルダーの親のボーンです。似たような場所に似たような骨があるはずなので、探して設定してみましょう。

 また、アップロード後に口が半開きになる問題が発生した場合は、headからjawボーンをNone、つまり設定を外せば直ることが多いです。

ApplyとDoneを忘れずに押して戻りましょう。

shaderを変更する

さて、上記のネオンちゃんを見てもらえば解るとおり、全体的にマットで本来の美しさがありません。なのでシェーダーを変えて美しさを取り戻します。

上記の画像からMaterialフォルダがあることが解りますのでそこに移動します。

gyazo.com

このように各種テクスチャがMaterial化されているのでこれらすべてを選択し、inspectorタブからshaderを変更します。基本的にはUnlitの中から選ぶと本来の美しさを引き出すことが出来ます。

gyazo.com

ただ、欠点として周りの光源の影響を受けなくなるのでワールドによっては輝いたりして浮きます。まあ美しければ問題ないですね。

vrchatjp.playing.wiki

また、このシェーダーを使うと光源の影響を考慮した描画がされるので浮きにくくなります。

Dynamicboneで髪を揺らす

髪を揺らす場合は揺らす元の階層にDynamicboneを入れます。

Dynamicboneはまあまあ良い感じにいろんな物を超簡単に揺らしてくれます。入れ方はVRC_AvatarDescriptorと一緒です。

使い方はこちらのブログさんへ

dvorak.hatenablog.com

もうちょい詳しい使い方

qiita.com

gyazo.com

今回入れるばしょはこの辺ですね。なぜここかというと、完全に根元から入れると髪の動きがかなりおかしいことになります。ベストな位置を見つけるまで少し時間がかかりますが、ここはこだわりましょう。

 

揺れ先の元を指定してあげる必要がありますが、髪の毛の場合は基本は一つ上かHeadを指定しましょう。

 

https://gyazo.com/8ac5755052b36877c72b8253ce250f4d

基本的にはDumping Distribのグラフを変更してやるだけでOKです。

余りにも揺れすぎだったら一つ下のElasticityを変更しましょう。

上手くいけばこんな感じになります。少しオーバーな動きですがこのくらいがちょうど良いです。

https://i.gyazo.com/2aa6d12848e9e9fac35d36bed2fd7c46.gif

Mantis LODを使い全体のポリゴンを20000以下にする

 さて、様々な設定が終わったらVRchatへavatarを送信するのですが、このときにAvatarのポリゴン数は20,000以下でないといけません。

そうしたときにオススメなのがこのMantis LODです。これはポリゴン数を簡単3ステップでうまいこと削減してくれます。

これは記事冒頭の通りunity-assetに入れてあるとして話を進めます。

使い方はこの動画を見ればわかります。

www.youtube.com

 

もう少し詳しく説明すると、ローデン氏のサイトでファイル変換しインポートするとFBXファイル内にはいくつかの白メッシュが生成されます。

gyazo.com

その白メッシュに対してMantis LODを適用し、動画のように使用します。

 

 

ただ、ここで注意が二つあります。生成したデータを動画内ではメッシュレンダーに入れ込んでいますが、今回の場合はSkinned MeshRendererのmeshと書かれているところに入れ込みます。

gyazo.com

そしてもう一つは絶対に顔付近のmeshにはMantis LOD をかけてはいけないことです。なぜならこれをやると上記で設定したモーフが破損するからです。

それ以外のmeshにはどんどんかけていきましょう。

 

 

まとめると

  1. 適用したい白meshをHierarchyタブから選択し、Mantis LODをAdd Component
  2. meshUploadをクリック
  3. 一番下のQualityスライダーで割合を変更
  4. ポリゴン数と実際の見た目を確認
  5. 良い感じであればsave current meshでmeshを保存する
  6. 保存したmeshを該当白meshのSkinnd mesh Rendererのmeshにドラックアンドドロップ

こうなります

 

clothを使ってスカートをひらひらさせる

やり方はこちらを参照した方が圧倒的に分かりやすいのでこちらへどうぞ。

 

blogs.unity3d.com

ただ、clothを入れるのはスカートに値する白meshです。

また、sphereやcapsuleのコライダーを使った物理判定を入れる場合は、それらのメッシュレンダーを削除しないとコライダー自体が他人に見えてしまうので死ぬほど恥ずかしい思いをするので注意しましょう。

 

LipSyncの設定

これで最後の設定をします。

LipSyncの設定です。まずはVRCAvatarDescriptorをモデル本体に入れ込みましょう。

これはAddComponentから、Script>VRCSDK2に入っています。

gyazo.com

次に目線の高さを指定します。

gyazo.com

このような灰色のボールがVRchat上での目線の高さとなります。

このボールはView Positionという数値で変更できるので、目と目の間に半分埋め込ませる形で設置しましょう。

gyazo.com

次にDefault Animation Setでこのモデルは男か女かを設定しておきます。

gyazo.com

最後にLipSyncを上記の画像のように選択し、顔のmeshを指定します。そうするとPMDエディタで設定したモーフを設定するメニューが現れるのでそれらを合わせていきます。

 

https://i.gyazo.com/f4c6dcb3a4586109587b348a65f4fac1.gif

アップロードして終わり

これでアップロードすればLipSyncが出来ているはずです。

出来ていたらヒャッホーと盛り上がればOK!!!!

 

Eye Trackingその他については後日書きますね!

 
書きました!

*1:下を向いたときに発動するモーフなので、能動的に何かを表現したいモーフに利用するといいでしょう。ただ、予期しない動きになることもあるのでない方が良いかもしれません

*2:同上