はじめに
BlenderでMMDモデルを制作しています。趣味です。
今回はキャラの表情、モーフについてです。
- MMDモデルに最低限必要とされるモーフは?
- モーフの作成~MMDで開くまでの手順
- mmd_toolsのモーフツールの使用方法
主な内容は上記の3点になりますが、以前の投稿でも扱いましたので重なる部分もあるかと思います。
https://pingpongfrog.com/archives/1987
尚、記事の内容については正確性を保証致しません。
解説ではなく、個人のメモ、備忘録のような情報としてお読みください。
以下の環境でモデルの制作を行っています。
ソフト、アドオン | 版 |
---|---|
Blender | 3.35LTS |
mmd_tools | 2.8.0 |
PmxEditor | 0.2.5.7 |
MMDモデルの表情
MMDモデルにに最低限必要な表情はどれくらいあるのか、私なりに調べてみました。
参考モデル
モーフを調べるに当たり、製作者の皆様のモデルを参考にさせて頂きました。
モデル名 | 製作者様 | URL |
---|---|---|
Tda式初音ミク・アペンド Ver1.10 | Tda | https://3d.nicovideo.jp/works/td1586 |
YYB Hatsune Miku_NT | 三目YYB | https://www.nicovideo.jp/watch/sm41007053 |
Sour式鏡音リンVer.2.01 | Sour暄 | https://bowlroll.net/file/155105 |
必要なモーフ
上記のモデルを調べ、共通して存在するモーフをリストアップしてみました。
目
笑い | ウィンク | ウィンク右 | |
まばたき | ウィンク2 | ウィンク2右 | |
なごみ | はぅ | びっくり | じと目 |
キリッ | はちゅ目 | はちゅ目縦潰れ | はちゅ目横潰れ |
星目 | はあと | 瞳小 | 恐ろしい子! |
ハイライトは同系統のモーフと推測される表情です。
特に黄色と青のグループについては、X軸の左右対称編集でベースとなる太文字のモーフを作れば、ミックスから作成と頂点グループの指定で残りのモーフは作ることができると、私個人は考えています。
例えば「笑い」の場合、「ウィンク」「ウィンク右」はBlenderの機能で作成が可能です。実際に編集モードで頂点の位置を調整するのは「笑い」を作る時のみで済む、ということです。
紫のグループ「はちゅ目」の場合は、ベースに対してX、Z軸の拡縮を調整して他を作るのではないか、と考えています。
リップ
にやり | にっこり | ぺろっ | 口角上げ |
口角下げ | 口横広げ |
まゆ
真面目 | 困る | にこり | 怒り |
上 | 下 | 前 |
手順:MMDで開くまで
色々な表情を作る前に、Blender、PmxEditor、MMDに渡って作業をする、その流れを確認しておきます。
私の作業を例として挙げます。
- Blender上でシェイプキーの作成
- mmd_toolsのモーフツールと同期
- エクスポート、PmxEditorで編集、MMDで確認
作成の前に
シェイプキーの作成時はBlenderの機能を使用することが出来ます。
- 新規シェイプをミックスから作成
- 頂点グループの指定
上記の機能を使用することができるので、シェイプキーの作成それ自体は特にmmd_toolsの操作を必要としたり、mmd_toolsの制限を受けたり、ということはないように思います。
- 同名のシェイプキーはエクスポート時に統合される
同名のシェイプキーが異なるオブジェクトに存在する場合、それらのオブジェクトを結合すると、シェイプキーも結合される、という性質があります。
詳細は次章で紹介するmmCGさんの動画をご覧になるのが良いかと思います。
似たような性質がエクスポート時に働くようです。
Blender上で同名のシェイプキーが異なるオブジェクトに存在し、モデルをエクスポートする場合、シェイプキーが結合されて.pmxが書き出されます。
例えば瞼と睫毛で別々にシェイプキーを作成していても、そのシェイプキーが同名であれば、エクスポート時に統合されます。
PmxEditor、MMDで.pmxファイルを開いた際には、同名モーフひとつだけで瞼と睫毛を同時に操作することが出来ます。
シェイプキーの作成
Blenderの機能で作成します。
参考動画
Blender上のシェイプキーの作成について参考にさせて頂きました。
尚、動画中ではモデルの表情をボーンで操作する仕組みについて解説がされていますが、この投稿ではそちらは扱っていません。
- 新規シェイプをミックスから作成
- 頂点グループの指定
- オブジェクトの結合とシェイプキーの結合
主に上記の点について勉強させて頂きました。ありがとうございました。
作成手順
とりあえずではありますが、動画を参考に「まばたき」を作り、それを元にして「ウィンク2」「ウィンク2右」を作ってみました。
左右の頂点グループの作成
まずは準備作業をします。
- 頭部のメッシュに左右それぞれの頂点グループを作る
私の場合は、頭部と顔のパーツが別のオブジェクトですので、頭部だけなく顔のパーツに対しても同じ作業をしました。
詳細は割愛します。
(具体的な作成方法は参考動画をご覧頂くのが良いと思います)
まばたき
「まばたき」を作ります。
- 上瞼、下瞼のシェイプキーを作成
- 上瞼、下瞼を元に「新規シェイプをミックスから作成」実行
私の例を挙げれば、画像中の黄色の枠で囲んだものがそれぞれ上瞼、下瞼のシェイプキーです。
詳細は割愛しますが、左右対称編集で上瞼、下瞼のシェイプキーを作成後、新規シェイプをミックスから作成と頂点グループの指定で、左右で別のシェイプキーに分離させました。
同名のシェイプキーを頭部、顔のパーツのオブジェクトにそれぞれ作成しています。
この時点では、計8個のシェイプキーを操作しないと、画像のような瞳を閉じた表情を作ることができません。
新規シェイプをミックスから作成を活用し、上下左右の瞼の表情を一括操作できるシェイプキーを作ります。
新規で作成されたシェイプキーの名称を変更します。
ここでは『まばたきblog』としておきました。
画像は上下左右の各シェイプキーの値を0に、『まばたきblog』の値を1に合わせた様子です。
頭部と顔のパーツ、計2個の『まばたきblog』の操作で瞳を閉じる表情をつくることができるようになりました。
ウィンク2、ウィンク2右
続いて「ウィンク2」「ウィンク2右」を作ります。
- 「まばたき」を元に「新規シェイプをミックスから作成」実行
- 頂点グループを指定
- 作業3、4を繰り返し、対称となるシェイプキーも作成
『まばたきblog』の値のみ1に合わせた状態で、新規シェイプをミックスから作成を実行します。
新規作成されたシェイプキーには『ウィンク2blog』と名付けました。
この時点では『ウィンク2blog』は『まばたきblog』の単なるコピーに過ぎません。
上の画像は『まばたきblog』の値を0に、『ウィンク2blog』の値を1にした状態です。
ここで『ウィンク2blog』に頂点グループ『LEFT』を指定します。
左の瞳のみを閉じる表情を作ることが出来ました。
右の瞳のみ閉じる表情(この場合『ウィンク2右blog』)は、同じ作業を行い、頂点グループを『RIGHT』に指定することで作成できます。
モーフツールと同期
モーフツールを使用しない方法は後述します。
- 「モーフを.placeholderへバインド」(Bind morph sliders)
- 「モーフを.placeholderへバインド解除」(Unbind morph sliders)
- モーフスライダーの値を全て0に設定
モーフツールを開き、ドロップダウンリストから「モーフを.placeholderへバインド」を実行します。
モーフツールが更新され、作成したシェイプキーが表示されます。
同時に全てのモーフスライダーにドライバーが設定され、値が0に変更されます。
「モーフを.placeholderへバインド解除」を実行します。
(バインドを解除する理由は後述します)
モーフスライダーのドライバーが削除されました。
エクスポートに移る前に全てのモーフスライダーの値を0に合わせておきます。
(この理由も後述します)
エクスポート、編集、確認
mmd_toolsのシーン設定「モデル:エクスポート」を実行し、書き出された.pmxファイルをPmxEditorで開き編集します。
Blender上では同名のシェイプキーが頭部と顔のパーツにそれぞれ存在していましたが、前述の通り、.pmxに変換する際にそれらは結合されます。
編集後、TransformViewでモーフの動きを確認します。
最後にMMDで確認します。
mmd_tools2.8.0のモーフ
以前の投稿時はmmd_tools2.4.0を使用していましたが、今回はmmd_tools2.8.0を使用して開発をしています。
それに伴う変更点、発生する問題等について記します。
改訂による変更点
Create機能の削除
2.8.0ではMorph MenuからCreateが削除されたようです。
2.4.0では、Createの実行によって、スライダーにドライバーを設定せず、モーフリストにBlenderのシェイプキーを同期させることが可能でした。
Createの機能については以前の投稿で扱いました。
https://pingpongfrog.com/archives/1987
Bind morph sliders
Createが削除されたため、モーフリストの同期はBindの実行によって行う必要があるようです。
具体的には、以下のいずれかの方法を選択します。
- 「組み立て:モーフ」ボタン
- 「モーフを.placeholderへバインド」(Bind morph sliders)
カーソルを置いた際にのヘルプです。どちらのボタンでも、以下の文が表示されます。
Translate MMD morphs of selected object into format usable by Blender : Bind morph sliders
窓口が異なるだけで施される処理は変らないらしく、どちらを実行しても、リストの同期、mmd_tools側でモーフスライダーの操作が可能になるように設定が変更されるようです。
エクスポート時のデータ損失
問題となるのは、Bind状態でエクスポートした際、.pmx上のモーフのデータに損失があることでした。
そして、mmd_tools2.8.0の場合でも、この問題は発生しました。
画像はUnbind、Bindでそれぞれエクスポートし、PmxEditorで開いた様子です。
Bindではオフセット量のデータが消失しています。
この状態ではTransformViewでスライダーを操作しても表情が変化することはありません。
次で述べますが、Unbind設定に変更してからエクスポートする必要があるようです。
Unbind morph sliders
上記の問題を解消するには、以下のいずれかの操作が必要となるようです。
- 「組み立て:モーフゴミ箱」ボタン
- 「モーフを.placeholderへバインド解除」(Unbind morph sliders)
こちらも窓口が異なるだけで、実行による結果は同じだと思います。
Unbindの実行によって、mmd_tools側のスライダーと各モーフスライダー上のドライバー設定が削除されますが、モーフリストはBlnederのシェイプキーが反映された状態で残ります。
この状態であれば、問題なくエクスポートできると思います。
(後述するモーフスライダーの値には注意)
BindとUnbindの違いを簡単にまとめると、以下のような違いがあります。
設定 | スライダー(mmd_tools) | min | max | ドライバー |
---|---|---|---|---|
Bind | ○ | -10 | 10 | 有 |
Unbind | ✖ | 0 | 1 | 無 |
モーフスライダーが紫色で表示されていた場合、Bind状態だと判断してよいと思います。(Blenderのテーマによって色は異なるかもしれません)
尚、私が確認する限りでは、ドライバーが設定されてる場合、スライダーの操作はmmd_tools側で行う必要があるようです。
Blender側で操作をすると、以下のような警告が出て変更を受け付けません。
Can’t edit driven number value, see graph editor for the driver setup.
エクスポートのために
前章を踏まえ、作成したシェイプキーを含めて「安全に」.pmxファイルを書き出す方法です。
スライダーの値に注意
ここでの、安全に、の意味です。
- モーフのデータ損失がない
- Basisをモデルの初期状態とする
- 全てのスライダーが正しく機能する
モーフデータの損失については前章で述べたとおりです。
エクスポートの失敗例
エクスポート時のモーフスライダーの値と、モデルの初期状態の初期状態についてです。
何らかのモーフスライダーの値を0から変更してエクスポートした場合、その表情が初期状態と認識された.pmxファイルが書き出されます。
つまり、Blender上のシェイプキーBasisが初期状態ではないモデルがエクスポートされてしまうことになります。
Basisが初期状態でないモデルの場合、表情が変化しない、表情の変化が過剰になる、といった不具合が起こります。
画像は「まばたき」のスライダーの値を0に合わせずエクスポートした例です。
変化量の値が0であるのに、既に瞳を閉じています。
この例では「まばたき」のスライダーを操作してもこの状態から表情の変化はありません。スライダーが機能していないようです。
「ウィンク」「ウィンク2」を操作可能ですが、この状態からさらに瞳を閉じる方向に頂点が移動するだけなので、あまり意味がありません。
尚、PmxEditorの扱いに詳しい方であれば、この状態からでもスライダーの調整等で修正ができるのかもしれません。
スライダーの値を0に
全てのスライダーの値が0であれば、モーフBasisを初期状態としてエクスポートが出来ます。
- モーフスライダーの値を全て0に設定後、エクスポートを実行
以下で述べる、mmd_toolsの使用、不使用に関わらず、エクスポートの前に全てのモーフスライダーの値を0に設定する必要があるようです。
モーフツールを使う場合
モーフツール使用時、シェイプキーを含めて安全に書き出す方法についてです。
(今回の作成手順はこちらの方法で記述しています)
モーフの同期
Blnederのシェイプキーとmmd_toolsのモールツールを同期させます。
- Morph Menu:「モーフを.placeholderへバインド」
- 組み立て:「モーフ」
上記のいずれかの方法の実行により、次の処理が行われます。
- 全てのモーフスライダーの値は0にリセットされる
- 作成済みのシェイプキーがモーフツール上のリストに同期される
Bindの解除
モーフスライダーのBindを解除します。
- Morph Menu:「モーフを.placeholderからバインド解除」
- 組み立て:「モーフ」右の「ゴミ箱」
上記のいずれかの方法の実行により、作成済みのシェイプキーを含み、かつBasisを初期状態とするモデルをエクスポート可能な状態になります。
スライダーの値を確認
Bind morph sliderを実行した時点で、全てのモーフスライダーの値は0に変更されていると思います。
ただ、Bindm、Unbind後に編集作業を行うこともあるかと思いますので、全てのスライダーの値が0であるか再度確認しておきます。
モーフツールを使わない場合
試してみたところ、mmd_toolsのモーフツールと同期を取ることが必須、という訳ではないようです。
モーフツールを使用せずとも、作成したシェイプキーを含めてエクスポートされるようでした。
ですので、「安全に」エクスポートするためにスライダーの値さえ確認すれば問題なく.pmxファイルを書き出すことができるようです。
余談ですが、再度ヘルプを参照します。
Translate MMD morphs of selected object into format usable by Blender : Bind morph sliders
この説明を読む限りでは、Bindは.pmxをBlnederに読み込んで編集する際に使用すべき機能なのかもしれません。
あるいは、何かしらの理由で、Blender上でモーフの名称を英名と日本語名を分けたい場合、Bindをする必要がありそうです。
(「MMDシェイプキー」という項目が見当たらないので)
終わりに
作るべき表情はまだまだ残っています。
そして、おそらくですが、頭部以外に別オブジェクトを作成し、その拡縮と移動でシェイプキーを作成するケースもあるように思います。
例えば「はちゅ目」「はぅ」等は全て、あるいは一部が頭部以外のオブジェクトであるように見えるのですが、この辺りについてさらに調べていきたいと考えています。
今回は以上です。読んで下さった方、ありがとうございました。
サイト名、作品名 | URL | 参考にした日付 |
---|---|---|
Blender | https://www.blender.org/ | 2022/12/11 |
Blender Manual | https://docs.blender.org/manual/ja/3.3/index.html | 2023/6/1 |
3Dミクを躍らせるツールを自作してみた(説明前編) | https://www.nicovideo.jp/watch/sm2420025 | 2023/6/19 |
UuuNyaa/blender_mmd_tools | https://github.com/UuuNyaa/blender_mmd_tools | 2022/12/11 |
とある工房 | https://kkhk22.seesaa.net/ | 2022/12/11 |
mmCGチャンネル animetic | https://www.youtube.com/channel/UCvC55dRRUwzHgkj1oiylDpg | 2022/12/12 |
【Blender 2.83 Tutorial】キャラクター表情の作り方・顔のリギング【シェイプキー×ドライバー】 | https://www.youtube.com/watch?v=o8FbhlkYIZA | 2023/8/20 |
Tda式初音ミク・アペンド | https://3d.nicovideo.jp/works/td1586 | 2023/6/19 |
【MMD】Primary Star【モデル配布】 | https://www.nicovideo.jp/watch/sm41007053 | 2023/6/19 |
Sour式鏡音リン・レンVer.2.01 | https://bowlroll.net/file/155105 | 2023/6/19 |