はじめに
BlenderでMMDモデルを制作しています。趣味です。
mmd_toolsからNew MMD Model_armを作成しリギングの作業を行いました。
尚、記事の内容については正確性を保証致しません。
解説ではなく、個人のメモ、備忘録のような情報としてお読みください。
以下の環境でモデルの制作を行っています。
ソフト、アドオン | 版 |
---|---|
Blender | 3.35LTS |
mmd_tools | 2.8.0 |
PmxEditor | 0.2.5.7 |
参考資料
参考動画
前回に引き続き、いつもお世話になっているmmCGチャンネルさんのキャラクターモデリング解説シリーズ動画を参考にさせて頂きました。
今回はリギング解説の#1~#5を参考にさせて頂きました。各動画のリンク先は末尾に記載させて頂きます。
尚、ドライバーの設定は行っていません。
衣装のウェイトペイントにデータ転送モディファイアを使用する方法が紹介されていますが、非常に便利です。
参考モデル
ボーンの構造や設定について参考にさせて頂きました。
モデル名 | 製作者様 | 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 |
MMDボーン構成
体の中心部分と腕、足に対して作業を行いました。目、髪、衣服については次回以降に行う予定です。
概観
尚、この段階ではボーン名は「〇〇.L」のような形式になっています。これはPmxEditorで編集する際に修正する予定です。
_dummy_〇〇や_shadow_〇〇等の名称のボーンが存在していますが、おそらくはmmd_toolsの機能で自動作成されたと思われます。
mmd_additional_rotationという一時的なBoneConstraintの対象として必要となるようで、Blender上で回転付与を再現する役割があるようです。
皆様のモデルを参考にさせて頂くと、ひじ補助、手先、指先等のボーンを見つけることができますが、私の勉強不足でその役割が分からないため、今回は作成していません。
作成方法
- mmd_toolsのモデル製作から「モデルを作成」を実行
New MMD Modelという名称のアーマチュアが作成されるので、全ての親ボーンから押し出していきます。
具体的な作成方法については割愛します。
私の作成手順です。
- D、C、IKを含めた全てのボーンを作る
- IKのBoneConstraintを設定する
- 対称化を行う
- 回転付与の設定をする(mmd_tools)
回転付与の設定を対称化前に行わない理由は、以前の投稿で述べた問題が今の開発環境(Blender3.35LTS、mmd_tools2.8.0)でも発生するためです。
https://pingpongfrog.com/archives/1152
肩部のボーン構成
肩P、肩、肩Cを作成しました。
概観
ボーン名 | 親 | Weight | 回転付与 |
---|---|---|---|
肩P | 上半身2 | 無 | |
肩 | 肩P | 有 | |
肩C | 肩 | 無 | 付与親:肩P、値:-1.00 |
肩Cボーンが腕ボーンの親となり、腕部へ繋がっていきます。
皆様のモデルを参考にさせて頂くと、肩Cボーンの位置は腕のヘッドに合わせるのが正しいようです。
上の画像のように、腕のヘッドの位置からBlenderのZ軸で+方向に垂直に伸びている形です。
肩Cボーンの位置
当初は下の画像のようなボーン構成で作成していました。
肩P、肩、肩C全て同じ位置に配置し、レイヤーを分けて区別しています。
(腕、腕捩、ひじ、手捩ボーンのレイヤーは非表示中)
肩Cがこの位置にあると問題が起こります。
これは、前回の投稿で確認した、腰キャンセルボーンと足ボーンの関係と同じ問題です。
肩Cボーンの位置の違いで生じる動作の違いについて簡単な動画を作りました。
動画の前半は、肩Cが正しい位置にある条件で肩P、肩をX軸で回転させた様子。
後半は、肩Cが肩P、肩と同じ位置にある条件で回転させた様子です。
後々、Aポーズに変更する予定ですので、肩部と腕部の軸がズレれば腕の先端の回転半径はもう少し大きくなると思います。
肩Cの位置が異なっていても、肩Pと肩で腕の回り方が変わる点は同じです。
しかし、肩Cと腕の距離が空く場合(動画の後半)、腕以下のボーンの追従が弱いです。
肩Pの回転に対して腕以下が動きが少なすぎるように思います。
肩P、肩はこういう動作をするボーン、という基準が、おそらく存在するのだろう、と思います。
モデルは違っていても同じ名称のボーンは各モデルで同じ働きをしないと、ポーズやモーションのデータを共有するのは難しくなると思います。
モーションをお借りしても、自作したモデルがうまく踊ってくれないのは嫌ですから、やはり、例に習う、基準に従う方向で進めるのが良いかな、と思います。
上腕部のボーン構成
腕、腕捩を作成しました。
概観
皆様のモデルを参考にさせて頂くと、下の画像のような構成になるようです。
腕捩ボーンは腕ボーンの内側、ひじボーン寄りの位置に配置される傾向にあるようです。
軸は腕ボーンと同じであり、腕ボーンと腕捩ボーンは同じ直線上に存在しています。腕捩ボーンには軸制限がかかります。
基本的に操作の対象になるボーンにはローカル軸が採用されるようです。
腕ボーンはローカル軸がONですが、腕捩ボーンについてはモデル毎にまちまちでした。
今回は作成していませんが、腕捩1~3を作る場合は、手捩1~3のように該当する位置からZ軸で垂直に伸ばすようです。
私の場合
腕、腕捩ボーンが順に繋がる構造で作成しました。特に問題はないように思うので、今回はこのまま進めていこうと考えています。
対称化後、腕捩に対してMMDボーンツールから軸制限の設定を行いました。
Blenderで開発する場合、おそらくボーンの複製や細分化を用いて腕捩ボーンを作ると思います。(他に適切な方法があるのかもしれません)
腕と腕捩で軸を一致させることを考えれば、先に腕、ひじ、手首ボーンを作成しその位置を決めた後に、腕捩ボーンを作成するのが無難だと思います。
前腕部のボーン構成
ひじ、手捩ボーンを作成しました。
概観
皆様のモデルを参考にさせて頂くと、下の画像のような構成になるようです。
腕捩ボーンの例と同様に、手捩ボーンもまた、ひじボーンの内側、手首寄りの位置に配置されています。
軸はひじボーンと同じであり、ひじボーンと手捩ボーンは同じ直線上に存在しています。手捩ボーンには軸制限がかかります。
ひじボーンはローカル軸がONですが、手捩ボーンについてはモデル毎にまちまちでした。
手捩1~3
ボーン名 | 親 | Weight | 回転付与 |
---|---|---|---|
手捩1 | ひじ | 有 | 付与親:手捩、値:0.25 |
手捩2 | ひじ | 有 | 付与親:手捩、値:0.50 |
手捩3 | ひじ | 有 | 付与親:手捩、値:0.75 |
手捩 | ひじ | 有 |
回転付与の値を見ると、手首に近い程よく回り、肘に近い程あまり回らない仕組みになっていることが分かります。
手捩の部分で細かくボーンを分割することで、より自然な前腕の回転を再現しているのだと思います。
自分の前腕を回してみると、確かにそういう動きをしているように見えます。
手捩1~3は軸をひじ、手捩ボーンと合わせることはなく、Z軸(Blender)で+方向に伸びています。
私の場合
上腕部と同様、ひじと手捩が順に繋がる構造で作成し、手捩1~3も軸を他のボーンと一致させました。
特に問題はないようなので、今回はこのまま進めていこうと思います。
対称化後、手捩に対して軸制限を設定しました。
手のボーン構成
手首、各指のボーンを作成しました。
私の場合
今回は指0ボーンを作成してみました。
皆様のモデルを参考にさせて頂くと、各指についてはローカル軸が採用されています。
その他のボーン
その役割について調べていないので今回は割愛しますが、他にもダミー、手先、各指先ボーンが存在するようです。
腰部のボーン構成
前回の投稿で扱いましたので、今回は割愛します。
https://pingpongfrog.com/archives/2751
足部のボーン構成
IKに操作される部分ですので、基本のボーンに加えてD、IKボーンが必要になります。
D、IKボーンの役割
概要
ボーン名 | 親 | Weight | 回転付与 |
---|---|---|---|
足D | 腰キャンセル | 有 | 付与親:足、値:1.00 |
ひざD | 足D | 有 | 付与親:ひざ、値:1.00 |
足首D | 足首D | 有 | 付与親:足首、値:1.00 |
ボーン名 | 親 | IK |
---|---|---|
足IK親 | 全ての親 | 無 |
足IK | 足IK親 | 設定先:ひざ、チェーン:2 |
つま先IK | 足IK | 設定先:足首、チェーン:1 |
IKの影響下にあるボーンは単独での操作が難しいため、単独操作と同じ役割を果たすDボーンが必要です。
Blenderで言えば、IKのポールの設定が似た役割だろうと思います。
足部のIK、Dボーンの働きを簡単にまとめると、以下のような仕組みになると思います。
- IKで操作された足、ひざ、足首ボーンが回転する
- 回転付与の働きで各Dボーンが同じ回転をする
- Dボーンに乗ったウェイトの影響でメッシュが変形する
- (Dボーンで各関節の回転を微調整する)
変形階層
ボーンプロパティのMMDボーンツールから設定できます。
Blender上では、変形階層の数値はIK、Dボーンともに全て0のままでも問題なく動作しているように見えます。
エクスポート先のPmxEditorでは、変形階層の値を変更しないとTransformViewで姿勢が崩れます。
変形階層については以前の投稿で実験を行いました。
https://pingpongfrog.com/archives/1245
とりあえずは、IK、Dボーンの変形階層を1に指定すれば正しく動作するのではないか、と思います。
足IK親
名称は『足IK親』ですが、このボーンはIKを設定することはないようです。
PmxEditorでもIKとして指定はされていません。
ただし、足IK親はその名の通り足IKの親ですので、足IK親を操作すると子である足IKは追従し、足部全体が変形します。
IKの設定方法
BlenderとPmxEditorの違い
IKの設定はBlenderのBoneConstraintから行います。
Blenderでは、PmxEditorで言えばIKボーンのLinkのNo.0に当たるボーンに対してIKの設定をします。
足を例に挙げます。
設定先 | チェーンの長さ | Target |
---|---|---|
ひざ | 2 | 足IK |
設定先 | Link | Target |
---|---|---|
足IK | 0:ひざ、1:足 | 足首 |
角度制限
X軸の角度制限
皆様のモデルを参考にさせて頂くと、PmxEditor上では、ひざに対してX軸の角度制限が設定されています。
軸 | - | + |
---|---|---|
X | -180.0 | -0.5 or 0 |
一般的に膝関節は、脹脛と太腿の裏が接する方向に大きく回転させることはできますが、逆方向にはほとんど回すことはできませんよね。
これをMMDモデルの動作で再現するために、このような角度制限が必要なのだと思います。
Y、Z軸の角度制限
Y、Z軸では正負の値ともに0が指定されています。
この値0は、制限を指定しない、という意味ではなく、数値の通り、Y、Z軸では回転をさせない、ということだと思います。
- 膝から下を横に持ち上げる(ひざボーンをY軸で回転させる)
- 膝から下を捩じる(ひざボーンをZ軸で回転させる)
一般的に言って、現実世界の人間では上記のような動きを膝関節単体ですることは難しく、太腿の動き(股関節)の助けを借りないと、このような動きをすることはできない、と思います。
皆様のモデルの足IKの動きをTransformViewで確認してみても、可動域が単一であるひざボーンを足ボーンの柔軟な回転で補っているように見えます。
軸の扱いの違い
Blenderではポーズモード時にボーンプロパティのインバースキネマティックス(IK)で角度制限の設定が可能なようです。
BlenderとPmxEditorでは軸の正負の向きが反対のようです。
ソフト | 反時計回り | 時計回り |
---|---|---|
PmxEditor | - | + |
Blender | + | - |
膝関節を例に挙げると、脹脛と太腿の裏が接する動きはPmxEditorではX軸で-180度、BlenderではX軸で180度、と制限を指定することになります。
PmxEditorでは、正の値の入力欄に負の値を指定、または負の値の入力欄に正の値を指定できますが、Blenderではこれは不可能なようです。
具体的には、上記膝の角度制限をX軸で入力する際、PmxEditorでは正の値に-0.5が指定可能です。
しかし、Blenderで負の値に0.5を入力しても受付されず、0、とみなされてしまいます。(PmxEditorとBlenderで回転方向が入れ替わる点に注意)
Blenderでも角度に小数の入力は可能ですので、小数点以下を切り捨て整数に丸められた、という訳ではないようです。
エクスポート後の反映
回転方向の正負については問題なく変換されます。
エクスポート時、IKの角度制限でいずれかの軸で制限に✓が入っていた場合、✓が入っていない軸の制限角度はデフォルト値で.pmxに変換されるようです。
Blenderでは、各軸で角度制限に✓が入っていない状態でも、その初期値がそれぞれ-180、180で設定されており、この値が指定されたものとしてエクスポートされるようです。
これは、変換した.pmxをPmxEditorで開くと確認することができます。
Blender上で、予めY、Z軸の制限に✓を入れて値0を指定しておく方が良いかもしれません。
自然な膝関節の動きを再現するという目的は、Blender、PmxEditorで変わらないはずです。
Blenderでも、Y、Z軸に制限がされている状態でIKの動作確認をするのが良いのではないか、と思います。
Dボーンの位置
皆様のモデルを参考にさせて頂けば、各Dボーンはその付与親のヘッドからBlenderのZ軸で+方向に垂直に伸びています。
(肩Cボーン、手捩1~3ボーンと似ています)
個人的には、ボーンの向きがウェイトの乗った箇所とズレていることに違和感を覚えますが、これによる影響は無く、メッシュは正しく変形するようです。
Dボーンがこのような配置にあることによりモデルの動作に影響を与える要素があるのでしょうか?
もしくは、単純にDボーンとして区別が容易だから、かもしれませんが、詳細は現時点で不明です。
私の場合
Dボーンの位置や軸は付与親と完全に一致しています。
今のところ悪い影響が出ているようには見えませんので、今回はこのまま制作を進めていこうと思います。
つま先を軸に足を回す動きを操作できるように、つま先に足IK親を付与親とする負の回転付与を設定しています。
また、IKとは異なる機構で足部を回転できるように、足IK親の親に足FKを指定しています。
これらのボーンについては試作中です。
mmCGさんの動画を拝見して、PIVOTやFKの役割をするボーンをMMDでも再現できないだろうか、と考え、作ってみました。
基本的には、足IK親は足首のヘッドに向けてZ軸で+方向に垂直に伸びる配置にあるようなので、位置の違いがモデルの動作に歪みを生んでしまうかもしれません。
つま先のボーン構成
つま先、足先EXが必要とされるようです。
概要
皆様のモデルを参考にさせて頂くと、下の表のような特徴がありました。
ボーン名 | 親 | Weight | 変形階層 |
---|---|---|---|
つま先 | 足首 | 無 | 0 |
足先EX | 足首D | 有 | 1 or 2 |
つま先、足先EXともに回転付与の設定はありません。
足首ボーンのテールが足の指先まで伸びており、つま先ボーンは足首のテールに存在するのみ、といった印象です。
実際、MMD上ではボーン操作に表示されることはないようです。
足の指を変形させる役割は、ウェイトが乗った足先EXが担うようです。
足首のテール、つま先の位置からやや後方に足先EXが配置されています。該当するウェイトに合う位置に置かれているように思います。
足先EX
足先EXの変形階層の値が0でない理由は、親である足首Dのそれが1であるからだと思われます。
仮に足先EXのそれが0であった場合、おそらく、足首Dが回転した際に追従しないだろうと思います。
これは、以前の投稿で行った実験の結果からそのように推測します。
https://pingpongfrog.com/archives/1245
足先EXという名称の起源は分かりません。
Dボーンが親であるのに回転付与の設定がないとか、D、IKボーンではないのに変形階層の値が0でないとか、その辺りに名前の理由があるのかもしれません。
私の場合
足IK親については上記の通りですので、無視して下さい。
足先EXを作らず、つま先に直接ウェイトを乗せています。
変形階層の値は0です。
動作を見る分には特に問題がないように思うのですが、名称が異なっているのは良くないはずです。
一般的なMMDモデルが、足の指の操作をするボーンを表示枠に『足先EX』という名前で載せるのであれば、それに合わせる必要があります。
仮に役割が同じボーンであっても、名前が異なっていれば、モーションデータに対応できないだろうと思います。
現時点でPmxEditorのTransformView、MMD上で該当部分の動作に何か問題があるようには見えません。
このまま『つま先』を『足先EX』に名称変更すれば、名前の問題は解消されるかもしれません。
ただ、同じように見えるだけで、足の指先のウェイトが乗るボーンの変形階層の値によって、内部的には演算順序が違ってくるはずですから、その影響は何かしらあるのかもしれません。
ここはやはり、例に従うのが無難かなと思います。
今回は見送りますが、いずれ修正する予定です。
センターの構成
全ての親、センター、グルーブ、腰です。
私の場合
とりあえず視認しやすい位置に置いてしまいました。
モーションの制作経験がないので、センター、グルーブがどのように使われるのか想像が付きません。
腰の位置、角度もなんとなく決めてしまいましたが、これについても調べた方が良さそうです。
製作者様のモデルを参考に位置を調整するのが無難でしょうか、今回はこのままにしておこうと思います。
各ボーンの位置
皆様のモデルを参考にさせて頂くと、下の表のような特徴がありました。
ボーン名 | ヘッドの位置 | テールの位置 | 軸 |
---|---|---|---|
全ての親 | 足元 | 膝のやや上 | Z軸で垂直(+) |
センター | 膝のやや上 | 足元 | Z軸で垂直(-) |
グルーブ | センターのやや上 | 太腿の中央 | Z軸で垂直(+) |
腰 | 腰部背中寄り | 下半身・上半身のヘッド辺り | X軸の傾き |
終わりに
少しずつ、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.9 Tutorial】キャラクターリギング解説 #1 -Character Rigging #1 | https://www.youtube.com/watch?v=G2orwhrl4VU | 2023/7/4 |
【Blender 2.9 Tutorial】キャラクターリギング解説 #2 -Character Rigging #2 | https://www.youtube.com/watch?v=i5jlRHnRpb4 | 2023/7/4 |
【Blender 2.9 Tutorial】キャラクターリギング解説 #3 -Character Rigging #3 | https://www.youtube.com/watch?v=aA3stiznPaY | 2023/7/4 |
【Blender 2.9 Tutorial】キャラクターリギング解説 #4 -Character Rigging #4 | https://www.youtube.com/watch?v=2sSLzoPieoo | 2023/7/4 |
【Blender 2.9 Tutorial】キャラクターリギング解説 #5 -Character Rigging #5 | https://www.youtube.com/watch?v=hf4Erhc3sNU | 2023/7/4 |
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 |