Starlight Ensign

MMDモーションファイル(VMD)をBlenderの自作モデルに適応するまで

タイトルの通りのことを実現できた.この効果は思っていたより絶大で,MMD用モーションデータというライブラリ(しかも,使われることが前提になっていて写真トレス問題みたいなことが起こりづらいので気軽に試せる!)がBlenderリソースとして使えるようになる.これはポージングのテストで,FreeStyleと組み合わせて使っている.

57s

具体的な方法は続きに書いた.

さて,必要なツールは主にmmd_toolsである.mmdのモデルデータやモーション,モーフデータをBlenderにインポートするためのAddonsで,これで全てインポートすればそれだけで動画は完成する.本記事は,モデルはBlenderで作っているものを使いたいが,モーションは流用したい場合のためのものである.

導入の手順

  1. mmd_toolsをBlenderにインポートする.
  2. Blenderで日本語フォントを表示できるようにする.これをしないと,ボーン名が□□□で表示されてかなり困る
  3. MMDをダウンロードして,標準ボーンを手に入れる.
  4. ボーン(Armature)以外を削除して,ボーンも必要のない部分を取り払う.
  5. ボーンをモデルに合わせる.
  6. ボーンの名前に合わせて頂点グループを作成して,ArmatureのModefierを入れる.
  7. あとは,Armatureを選択した状態で,VMDインポートすれば,その動作が流し込まれる.

ここからは,それぞれの手順を細かく追っていこう.

1:mmd_toolsをインポートする

インポートの手順はmmd_toolsの説明のところに書いてあるので,特に困ることはない.zipを解凍して,Addonsのフォルダに入れて,有効化する.[Ctrl]+[Alt]+[U]で出てくるUserPreferenceで有効化しておけば良い.
mmd_tools

mmd_tools自体は配布元の説明が豊富なので,あまり苦労することはないと思う.

2:日本語フォントの表示

既に日本語化している人は関係ないので飛ばして良い項目.見落としやすく,躓きやすく,かつあまり説明されていないと感じるのがこの部分である.自分は英語のまま使っている(そのほうがショートカットキーが覚えやすいと思う)ので,日本語名をつけると下のSSの様に表示されてしまう.
nihongomei

こんな感じに□□□になっている.MMDの標準ボーンは名前が日本語なので,これでは作業全般にわたって支障が出る.そこで,フォントの表示設定を弄る必要がある.
nihongomei2

先ほどAddonsを追加した時と同じUser Preference画面である.ここの赤丸で囲った部分にある”International Fonts”のチェックボックスをオンにする.
nihongomei3

オンにして,日本語を選択すると日本語フォントが有効化される.これで,日本語がきちんと表示されるようになる.ちなみに,この画面でInterface等のボタンを押すと,その部分が日本語化される.日本語化したい人はここからどうぞ.
nihongomei4
これが表示結果である.「Cube.日本語ですヨ」がきちんと表示されている.

表示周りは以上.

3:MMDのダウンロードとモデルの抽出

MMDの配布サイトから,MMDをダウンロードする.一番上のMMDだとPMDが見つけられなかったので,64bitOS版とかをダウンロードしたほうが良さそう.ダウンロードして解凍すると,「…\UserFile\Model」フォルダにいくつかPMDファイルが入っている.どれでもいいのでMMDモデル(PMD,PMXファイル)をBlenderにインポートして,モデルから標準ボーンを引っぺがす.標準ボーンの構成がわかっていれば,自分でArmatureを組んでも良いが,基本的に標準ボーンから(正確には,モーション付けを行ったモデルのボーン構造から)ボーン構造が離れれば離れるほどモーションの再現性が低くなるので,素直に標準モデルから抽出したボーンを使ったほうがいいと思う.自分は弱音ハクのArmatureを使った.
Arma

mmd_toolsの変換によって,モデルは

  1. Armature
  2. Armatureターゲット用のEmpty群
  3. Rigid Body用のカプセル

に分かれて取り込まれている.自分は1以外消してしまったが,他を起こしておいたほうが良い場合もあるかもしれない.跳ねた毛の挙動や袖の挙動は全てBlender側で付け直すならば,Armature以外は消してしまっていいだろう.

4:ボーンの剪定

さて,Aramatureが取り込み終わったら,Boneの剪定を行う.自分のモデルはハゲで生身(?)のアンドロイドなので,袖やアホ毛やポニテ周りのボーンは全て消してしまった.X-Axis Mirrorをオンにしながら編集したほうがいいかもしれない.片方側にだけ袖があるモデルとかは少ないだろう.
bone

ここでボーンが極端に減ってしまっても問題ない.mmd_toolsはVMDのモーションを同名のボーンがある場合に,そのボーンに流し込む機能を持っているので,対応するボーンがなければ情報が破棄されるだけだからだ.逆に,ボーンを増やしてしまっても問題ない.Damped Trackで遅れて動く毛を表現したり,関節を綺麗に標示するためのボーンを増設しても一応は問題なく動くのはMMDと同じだと思う.

5:ボーンをモデルに合わせる

自分は1ユニット=1mでモデルを作っている.MMDは大きさが違うので,こんな感じで表示されているだろう.
size

この時,Editモードでボーンの寸法を変更してはならない.足先の位置がずれて,脚のモーションがおかしくなってしまう.おおまかなスケールを整えるときはObjectモードで揃えよう.

そして,上のSSのモデルもそうだがT字型でモデルを作っている場合は,モデルの方をボーンに合わせて回転させる.MMD標準モデルの腕の角度はだいたい30度位開いているみたいなので,そのくらいにしておかないと腕のモーションがズレてしまう.あとは,普通にArmatureを入れるときの感覚で各部に各Boneを合わせていく.この時は,MMDを起動して,それぞれのボーンが身体のどの部分を司っているのか表示しながらやったほうがわかりやすい.
注意点

それと,IKターゲットを移動させるのを忘れないようにしたい.[Shift]+[S]のスナップをうまく使って,IKターゲット用のボーンを指先や足先のボーン位置にスナップさせよう.

6:頂点グループの作成とArmature適用

これは普通のモデルにArmatureを入れるのと同じである.ただ,日本語は表示できても直接入力できないので,メモ帳からコピーしたり既存のボーン名をコピペしたりして頑張る必要はある.

Meshを選んでから[Shift]+[LMB]でArmatureを選んで,[Ctrl]+[P]のAutomatic Weightを使ってもいい.これなら関節位置が適切なら一発で適用できる.自分のモデルはアンドロイドなので各部品はかっちり動く,つまりWeight値を極端にする必要があったので,近くのBoneの名前をコピーしてはWeight値1.0の頂点グループを作成… というのを地道にやった.というのも,関節位置を元々使っていたRigifyのArmatureにピッタリ合わせて,頂点グループを改名して流用しただけである.

ただ,手と爪だけはボーン数が非常に多くて骨が折れるので,Automatic Weightで頂点グループを作成して,その後手首周りのWeight値を修正する流れをとった.

7:VMDデータの読み込み

あとは流しこむだけである.表情モーフはShapeKeyを選択した状態で同様に流し込めば,名前が同じモーフの値を流しこんでくれるようだ(まばたき以外未検証).

もしここで変な挙動が起きたら,その原因を探って修正する必要がある.大抵は全てをやり直す必要はなく,一部を修正するだけでなんとかなる.

  • 症状:脚が異様に開いてしまう,あるいは全然動かない.
  • 原因:ボーンのスケーリングがおかしい.Meshそのものをスケーリングしてしまった場合はこういうことになるようだ(経験).おそらく脚先の座標値でモーションを決めているため.
  • 対策:まずMMDで正常なモデルに同じ動作を流しこんで,大体脚の先端が何倍すっ飛んでいってるのかを調べる.あとは,Editモードでn倍してObjectモードで1/n倍するという動作を繰り返して調整する.

今のところかけるTipsはこのくらい.何かあれば追加します.

追記1:親指の向きがおかしい

57s

この最初の画像の黄色い方の親指をよく見てみると,なんだか捻れている.おそらく,MMDの標準的な親指ボーンの向きと自分のモデルが食い違っているからだ.
対策:親指の付け根から第一関節にあるボーンのRoll値を,ボーンの向きが他の指と同じになるように調整する.自分のモデルの場合は30度だったが,これはモデルによって異なりそう.


1 件のレスポンス

  1. ピンバック: MMD モデルを編集する方法 (mmd_tools) [Blender] – Site-Builder.wiki

コメントを残す





XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>