MMDの表情モーション(モーフのVMD)の中身|別のモデルで表情が動かない理由
モーションは動くのに、まばたきや口が動かない。原因はほとんどの場合、表情(モーフ)の名前がモデルと合っていないことです。VMDの表情キーは名前だけでモデルの表情を探すので、名前が違うものはエラーにならずに捨てられます。
名前が合わない表情は、ボーン名・表情名の読み替えでモデルの名前へ書き換えられます。 モデル(PMX)も入れると、モデルに無い表情だけを並べます。
表情キーは23バイトしかない
| 項目 | 大きさ | 中身 |
|---|---|---|
| 表情の名前 | 15バイト | Shift_JIS。全角なら7文字まで |
| フレーム番号 | 4バイト | 30フレームで1秒 |
| 値 | 4バイト(小数) | 0で無効、1で最大 |
ボーンのキーと違って補間曲線を持ちません。 キーとキーのあいだは直線でつながります。ゆっくり目を閉じたいなら、途中の値のキーを増やして形を作ります。実物のVMDの表情キー5,237個のうち、値がちょうど0か1のものが3,424個(65%)、そのあいだの値が1,813個(35%)でした。
名前が違うと、黙って無視される
表情キーは、モデルの中から同じ名前のモーフを探して値を当てます。見つからなければ、そのキーは捨てられます。エラーも警告も出ないので、「表情だけ動かない」という形でしか気づけません。three.jsのMMDLoaderも、モデルの表情の一覧に無い名前を読み飛ばす作りです。
実物のVMD 30本の表情キーを、手元の3体のモデルに当てて数えると、当たらないキーは人物Aで19%(5,237個中971個)、アリシアで29%(1,518個)でした。ほとんどはモーションを作ったモデルにしか無い表情(「にやりL」「ムス」「左押1」など)です。
綴りが違うだけで動かないもの
同じ表情でも、モデルによって半角と全角を書き分けていることがあります。半角カナは1文字1バイトで、全角の半分の長さで済みます。実物で見つかったのは次の組み合わせです。
| VMDの名前 | モデルの名前 | 違い |
|---|---|---|
ウィンク2右 | ウィンク2右(アリシア) | 半角カナと全角カナ |
キリッ / キリッ | キリッ(アリシア) / キリッ(人物A) | モデルごとに逆 |
にやり2 | にやり2 | 数字の半角と全角 |
照れ2 ワ2 | 照れ2 ワ2(アリシア) | 数字の半角と全角 |
見た目はほとんど同じでも、別の名前として扱われます。このサイトの読み替えでは、半角・全角だけが違う名前を入力欄に「候補」として出します。書き換えるかどうかは自分で決めてください(似た名前を機械が勝手につなぐと、別の表情に当たっても気づけないためです)。
ボーンも同じです。 VMDの「右腕捩1」(全角の1)はモデルの「右腕捩1」には当たらず、「右髪IK」は「右髪IK」に当たりません。実物のVMD 30本を人物Aに当てると36か所、アリシアに当てると47か所で、半角・全角の違いだけで動かないボーンがありました。
よく使われる表情の名前
表情キーを持つVMD 15本のうち、15本すべてに入っていたのは「まばたき」「あ」「い」「う」「お」「困る」「怒り」「上」「下」でした。「え」は12本です。これらの名前は、手元の3体のモデルすべてにありました。よく使われる名前はモデル側も揃えていることが多く、当たらないのは作者独自の表情です。
口の動き(リップシンク)は「あ」が中心
口の形の表情(あ・い・う・え・お)のキーを数えると、多いものでも1秒あたり2〜3個でした。口パクのほとんどを「あ」1つで作っているVMDも多く、あるVMDでは母音のキー120個のうち108個が「あ」でした。「い」「う」「え」が数個しかないVMDを見ると、そのキーの値はすべて0でした。口を閉じたままに保つためのキーです。
表情だけのVMDと、体と表情を分ける
表情は体の動きと別のVMDで配られることがあります。実物の中にも、ボーンのキーが1つも無く、216種類の表情に721個のキーだけを持つVMDがありました。
- 体と表情が1つのVMDに入っているものを分ける → 表情と体を分ける
- 体の動きはそのままで、表情だけ別のVMDに差し替える → 表情だけを差し替える
- 表情の名前をモデルに合わせる → ボーン名・表情名の読み替え