MMDからVRMへ(blender)

【概要】

MMD用として作成済み(もしくはフィニッシュ前)のモデルをVRMへ転用できる体裁に整える。
 ※VRMへ転用=FBXフォーマットでExport後Unity Editorで加工

前提:

・MMD用としてExportできる直前まで完成している。
・MMD用のリグは捨て去り、Auto-Rig Proで新設する。
・ウェイト付けはVoxel Heat Diffuse Skinningで行う。
 ※Auto-Rig Proは有償のリグ(40ドル)
  Voxel Heat Diffuse Skinningも有償(30ドル)
  これらはいずれもblenderプラグイン。骨入れ及びスキニングを大幅に省力化できる。

ARPのリグを使う理由は、出来がよく扱いやすいリグであることに加え、ゲームエンジンへのExportがサポートされているから。FBX変換時のトラブルを最小限にすることができる。ARPでリグを組んでおけば汎用性が高い。

VHDSを使う理由は、blender標準の方法ではエラーを吐くようなメッシュにも自動でウェイトを設定することができるから。これにより、使い勝手と汎用性が高まる。

こうした利点を、独自のスキルや知見でカバーできるのであれば、ARPやVHDSをあえて使う必要性は薄い。

手順:

①AスタンスをTスタンスにする(blender)

MMD用のアーマチュアを使って腕ボーンを水平まで回転する。
掌を平ら(※)にして、親指の開き具合を(上から見て)45度に。
 ※つまり、机に掌をピタッと押しつけた時のような状態にする。
訂正:掌を真っ平らにする必要はない。親指の位置は四指よりも下の方がよい。

ボディメッシュにアーマチュアモディファイヤーを適用した上で、
 ポーズモード:ポーズ>適用>デフォルトのポーズに適用

ボディメッシュの頂点グループをすべて削除。
アーマチュアとの親子関係を解除したボディメッシュをAuto-Rig Proへ。 肩から上腕への凸凹が気になる場合はメッシュを整形。

【ポイント】
同じリグで作成されているコスチューム複数を一括してポーズ変換するべし。

②Auto-Rig Proのリグを仕込む

Reference Boneの配置

肘と膝は完璧に伸びきった状態(直線)ではなく、関節をごく浅く曲げた状態で再現する(曲がる側を明示するため)。腕なら上面図(XY面)で、脚なら側面図(YZ面)で、それぞれY軸方向へ“曲げ”を作る。
 関節を“く”の字に見立てると、谷にした側に曲がる――正面図(XZ面)でも。つまり、正面から見てわずかにX脚にしたとすると、内股気味の関節が出来上がってしまうので注意。したがって、脚、腕とも、正面図は直線になるように関節を配置する。

背骨の数

4本をオススメする(デフォルトは3本)。breastとfacialはお好みで。MMDで頂点モーフによるシェイプキーを実装済みなら、ボーンによるブレンドシェイプは不要だろう。視線ボーンについては後述の ⑤カスタムボーン で触れる。

③Voxel Heat Diffuse Skinningを利用する

 あらかじめ、ARPでメッシュをバインドして、ボディメッシュに基本となるウェイト(頂点グループ)を付けておく。

既存ウェイトの保護

VHDSを使う前に、ボディメッシュの両手指~両手首のウェイトを保護する為の操作を行う。手指のウェイト付けはVoxel Heat方式ではうまくいかないためだ。その操作とは、編集モードに入り、保護したい頂点を選択状態のままにしておく。これだけ。

 太ももの付け根付近で、内股の箇所もまた正反対のウェイトが付きやすい(※)ことから、ここも保護しておくとよいかもしれない。
  ※左太ももの場合なら、右太ももの影響を受けてしまう。
 とにかく一回テストし、結果からフィードバックするべし。例えば、肘、膝関節はARPで付けられたウェイトのままで十分な可能性がある――十分なら保護しておくだけだ。

パネルの出し方

専用パネルを出すには、[オブジェクト]モード(※)で、ボディメッシュとアーマチュアを(可視状態にした上で)一度に選択する。選択する順番はメッシュ→アーマチュア。アウトライナー上で、メッシュを選択した状態でShiftキーを押しながらアーマチュアをクリック。

3Dビュー>ツールシェルフ>「アニメーション]タブ内にパネルが現れる。

 ※バインド後、アーマチュアの変形を確認するべく[ポーズ]モードにしていることが多い。オブジェクトモードにしないとパネルが表示されない。

 Voxel Resolutionはデフォルト値よりも高め(160~256)にすると分解能が増してよさげ。その代わり、計算時間は延びるので、非力なマシンの場合はむやみに増加させないように。

④ウェイト調整(blenderでの操作)

主に、脇の下、股の付け根、尻が修正を必要とするだろう。本体が四肢による変形を受けにくくなるようにウェイト値を調整できればよい。

 具体的には、変形を受けている頂点を複数選択し、選択済み頂点のみにペイントがかかるようにマスクする。この状態で、影響を及ぼしている[頂点グループ](以下に明示)を選択し、ペイントしていく。

 ARPで変形に寄与するボーンは、アーマチュアレイヤー番号31をアクティブにすると表示される。

 まず、オプション:XミラーをON

 肩と上腕(肩関節、脇の下)
 上腕  c_arm_twist_offset.l
 肩   shoulder.l

 もも上げのお尻の下がり具合、股の付け根
 尻  thigh_twist.l

 肘曲げ内側のえぐれ
 上腕  arm_stretch.l
 前腕  forearm_stretch.l

 膝曲げ裏側のえぐれ
 太もも  thigh_stretch.l
 スネ   leg_stretch.l

 頭部を上下に向けた際の顎の伸び縮み
 頭部・顎/頭髪  neck.x

ツールシェルフ(左):[ツール]タブ>▼ブラシ
 ウェイト:1.000 のまま
 ブレンド:[減算]と[追加]だけを使う。
適宜、変更するのは以下の二つだけ。
 半径=ブラシの大きさ(面積)
 強さ=塗るウェイト値への影響そのもの

 マスクした頂点のウェイトを、ブラシで塗ることで減算するか、さもなくば追加する。変形の具合を確認しながら増減を試みる。強さの最小は0.009くらいを目安に、頂点ひとつ、もしくは頂点のまとまりに対してマウスでじわじわと塗っていく。ざっくり塗りたければ、ブラシ半径や強さを大きくする。やり過ぎてしまったと感じたら、ブレンドを反対にして――減算だったなら追加にして、逆もしかり――塗り直す。

段差やシワ、ヒビができてしまったら――
 ツールシェルフ(左):[ツール]タブ>▼ウェイトツール>[スムーズ]ボタン
 ――を一、二回から五、六回程度実行。スムーズを与えたい範囲にまで、頂点を多めに選択しなおすと、より効果がはっきり出る。

【ポイント】
 基本となるボディにウェイトを付けて完成させる。
 ボディのウェイトを流用可能とし、後にコスチュームへ転送させる。もしくは、Voxel Heat Diffuse Skinningをコスチュームのメッシュに対しても実行する。

⑤カスタムボーンを追加する(ARP)

MMDで視線ボーン方式を採用しているのであれば、これをカスタムボーンとして実装するか、さもなくばARPのfacialから一部拝借して使う。後者の場合、鼻や頬、唇といった不要なボーンであっても除去できないので、実体のない残骸としてVRMへImportすることになる。

ARPを流用した視線ボーン

眼だけのメッシュ(瞳の板ポリ)にバインドする場合、Reference Bonesのfacialに☑を入れ、出てきたガイドで位置を決める。眼の回転軸は、eye_offset_ref.l(または.r)の位置で定まる。Match to Rig後にバインドすると、facial関連の頂点グループが追加される。瞳の板ポリには、この頂点グループのうち、
 左目 c_eye.l
 右目 c_eye.r
をそれぞれウェイト1.0で割り付けなおせばよい。とりあえず、これだけでARP上で眼が動くようになる。それ以外のfacialの頂点グループは眼だけのメッシュからは削除してかまわない。ただし、頭部全体のウェイトであるepaules_bend.x は残しておいた方がよいだろう。なお、ARPのfacialボーンは削除できないので不要なものを隠して(見えなくする=Hキー)運用する。

揺れ物用ボーン

MMDで既存の髪揺れ用ボーン、スカート揺れ用ボーン、などがカスタムボーンの候補である。カスタムボーンはARPによるリグ(およびウェイト)が確定してから追加していくのが望ましい。そうでないと、バインド時にカスタムボーンがウェイト計算に影響を与えてしまう。

カスタムボーンはARP既存のボーン名と被らない名称を付ける。Export時に付随されるようにカスタムプロパティを作ってprop名をccにしておく(これを自動化するボタンが[Auto-Rig Pro: Export]パネルの[Set Custom Bones])。

MMDでの髪揺れ用ボーン、スカート揺れ用ボーンを頂点グループとして割り付けたウェイトは原則的にそのまま流用できる(ただし、正規化における割合などは調整した方がいいかもしれない)。ARPの頂点グループと競合する場合、上書きされないようにロックしたり、あらかじめノーマライズされる比率を加減しておく。

親ボーンへの接続

カスタムボーンを接続するべき親は、ARPの変形用ボーン(アーマチュアレイヤー31番)か制御用ボーン(同レイヤー1番および2番)。親にしてはいけないのがガイド用ボーン(同17番)。Export時には、FBXで利用される変形用ボーンが自動的に親になる。

カスタムボーンを、ARP既存のボーンの階層(Hierarchy)に割り込ませないこと。末端に付属させる。例えば、首―頭―カスタムボーン帽子ならOKだが、背骨1―カスタムボーン―背骨2はNG。

FBX Export(ARP)

メッシュのパーツは、最低限、頭部とボディに分けておく。頭部(付属する頭髪や装具も含む)は、VRMFirstPersonを意識して、体のメッシュとは別に用意しておかねばならない。一人称視点の要求に合わせて顔を消すためだ。それ以外は、任意に分けておくことができる。

細分割曲面モディファイヤー
適用前の細分割曲面が混在している場合、Export後は多重にかかる(※)ようなので、Export前に適用するのがよい。
※最も細かい網目に揃うように自動調整されるようだ。

結果として出力されるウェイト
体積を維持は働かない。blender上での調整や見た目と異なる場合があり得る。プロパティrigの「体積を維持」オプションを解除した上で、見た目を確かめる手段がある。また、当然ながら、ある繊細な変形がFBXで省略されるボーンによってのみ実現されていた場合、それらは影響を受けてしまう。

マテリアル色
マテリアルの色味がFBX内に保持される。VRM時のテクスチャの色味に影響させたくない場合、白(RGBとも1)にしておいてもいい。いずれにせよ、VRMセットアップ時に修正できる。

Gloval Scale
この値によって、Export時の大きさ(身長)を変化させることができるのだが、カスタムボーンにおいては末端ボーン長にまで倍率が均等に及ばないため、1.00を推奨する。この末端ボーンの長さが変化してしまう事例は、揺れ物設定のルートボーン指定に影響する。1.00以外だと泣きを見るのだ(経験談)。

⑦FBX Import(Unity Editor+UniVRM)

最初のVRM作成時にはOptimizeに☑しない

Optimizeによってfacialの不要なボーンを読まないように取捨選択することができるが、VRMで生成されるPrefabに自動的にアタッチされるScriptまで削られてしまう。これらを手動でアタッチする方法に詳しくないのなら、Optimizeはしない方がいいだろう。

テクスチャ指定

ColorのTexture欄。◎みたいなボタンを押すか、ドラッグ&ドロップ。AssetsのFBXがある場所に、テクスチャをあらかじめ、コピーしておくとよい。

何らかの動きを再現して揺れ具合を確かめるには

VRMファイルが出来上がったら、Assetsに読み込ませ、Prefabを開いてSecondaryのVRM Spring Boneで揺れ物を設定する。例えば、髪の揺れなら、RootBonesには、前髪~横~後ろ髪カスタムボーンを指定する。Draw Gizmoに☑を入れておけばプレイモードのSceneで剛体の配置具合が見られる。

SceneのHierarchyにVRMを放り込み、VRMのInspectorを一旦ロックして、任意のAnimationControllers(※)を、VRMのAnimatorのController欄に(ドラッグ&ドロップして)アタッチする。
※Assets StoreのFreeモーションなど。例えば、BasicMotions@Run

プレイボタンを押し(プレイモード)、自動的にGameタブに切り替わると動作を確認できる。Draw Gizmoが確認できるのはSceneタブ。

Gameでのカメラの初期位置の直し方

デフォルトでは、被写体の背後にカメラがある。Gameタブには、キャラクターの背中しか映らない。したがって、これを直す。それには、Sceneタブに戻ってから、カメラを選択して、(上述の続きなら、Inspectorのロックを解除して、)カメラのtransformのRotation欄Yに180を入れ(※)、ギズモでカメラを被写体の正面まで引っ張ってくる。ズームはカメラのField of View値を小さくすることで実現できる。
※ギズモの[移動/回転]切り替えは、Editorウィンドウのメニューバーの一段下にあるので、それを切り替えてギズモでグリグリ動かしてもいい。Sceneでの視点移動はAltキーを併用できる。

VRMのPrefabでTransformのScaleを弄らない

 揺れ物のVRM Spring Boneのルートボーンに適正な倍率が当たらないため、TransformのScaleは1のまま運用する。
 例えば、TransformのScaleをXYZとも0.4へと変更すれば、キャラクターの身長を4割に減ずることができる。ところが、残念なことに、剛体の大きさやルートボーンの長さにまで倍率が適用されない。そのままでは揺れ物の挙動がおかしくなってしまう。Scriptの記述を書き換えないと、拡大縮小や身長を変える目的では使えない。


この記事が気に入ったらサポートをしてみませんか?