はじめに
BlenderでMMDモデルを制作しています。趣味です。
今回は作成中のモデルの髪に対してリギングを行いました。
具体的には、髪のメッシュにボーンを通し、mmd_toolsでリジッドボディ、ジョイントを作成、物理演算で髪が揺れる仕組みを作りました。
尚、記事の内容については正確性を保証致しません。
解説ではなく、個人のメモ、備忘録のような情報としてお読みください。
以下の環境でモデルの制作を行っています。
ソフト、アドオン | 版 |
---|---|
Blender | 3.35LTS |
mmd_tools | 2.8.0 |
PmxEditor | 0.2.5.7 |
参考資料
参考動画
mmCGさんのHairRig解説動画を参考にさせて頂きました。
主にボーンの押し出しとウェイトペイントについて勉強させて頂きました。
尚、動画ではRigidBodyToolsというアドオンが使用されています。
この投稿ではmmd_toolsの機能で剛体とジョイントを作成するので、このアドオンは使用しておりません。
参考モデル
剛体、ジョイントの構造や設定について参考にさせて頂きました。製作者の皆様、ありがとうございました。
モデル名 | 製作者様 | 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 |
今回の成果
HairRigで簡単なアニメーションを制作しました。
首の後ろに髪が入り込んでいる部分があるので、その修正が今後の課題です。
剛体間の距離が近い時、物理演算タイプの剛体が暴れてしまう問題が解決できなかったため、今回は頭、首に対しては剛体を設置しませんでした。
しかし、調べていくと、剛体のサイズ調整を正しく行えばこの問題を解決できそうだと分かりました。
次回以降、体のメッシュに対しても剛体を設置してみたいと考えています。
作成の手順
リジッドボディ(剛体)とジョイントの作成については、以前にも私なりに調べた内容を投稿しました。
https://pingpongfrog.com/archives/1751
https://pingpongfrog.com/archives/1785
ここでは簡単に済ませておきます。
1. ボーンを押し出す
詳細は割愛します。
具体的な方法、コツについては上記のHairRig解説をご覧になるのが良いかと思います。
簡単な例を挙げます。

立方体の頂点の位置に合わせてBone.000~002を押し出しました。
全ての親から押し出していますが、髪の場合は頭から押し出すことになると思います。
尚、個人的に必要だと考える作業が有ります。
- 各ボーンのロール角度を整える
こちらについては後述します。
2. ウェイトペイント
詳細は割愛します。
こちらについても具体的な方法、コツについては上記のHairRig解説をご覧になるのが良いと思います。

画像は頂点グループBone.000の様子です。
3. リジッドボディの作成
mmd_toolsの機能で作成します。
- New MMD Model_armを選択し、編集モードに切り替える
- 剛体を設置するボーンを選択する
- mmd_toolsのリジッドボディから+ボタンを実行
選択したボーンに対して剛体を作成すると、編集モードからオブジェクトモードに自動で切り替わります。
剛体を設置するボーンの数だけ、上記の作業を繰り返します。
簡単な参考動画を作りました。
4. ジョイントの作成
mmd_toolsの機能で作成します。
- オブジェクトモードに切り替える
- 連結させるふたつの剛体を選択する
- mmd_toolsのジョイントから+ボタンを実行
作成した全ての剛体間の連結部の数だけ上記の作業を繰り返します。
簡単な参考動画を作りました。
5. ポーズモードで確認
物理演算が正しく機能するか確かめます。
- mmd_toolsの組み立てから物理演算を実行
- ポーズモードに切り替え、ボーンを動かしてみる
物理演算プロパティ
リジッドボディ、ジョイントの設定は物理演算プロパティから確認、変更ができます。
剛体のプロパティ
MMDリジッドボディという専用プロパティが存在します。

RigidType
髪が揺れる支点となるボーンに設置した剛体では「ボーン」を選択し、「ボーン」タイプから繋がる剛体には「物理演算」もしくは「物理演算+ボーン」を選択します。
前章に挙げた例で言えば、Bone.000の剛体ではボーンを選択し、Bone.001、002では物理演算を選択しました。
CollisionShape
剛体の形状を選択します。
製作者の皆様のモデルを参考にさせて頂けば、頭については「球」、髪については「カプセル」が選択されることが多いようです。
ある「ボーン」剛体から連なる「物理演算」剛体の鎖を見れば、剛体のサイズは設置されたボーンを包み込み、上下に連結する他の剛体とやや重なり合う程度になるようです。
これは次のコリジョングループマスクとの関係もあるように思います。
CollisionGroup, Mask
各剛体のグループ分けと、グループ間の接触、非接触について設定できます。
ある「ボーン」剛体から連なる「物理演算」剛体の鎖、今回の例で言えば髪の束に通る剛体の鎖を見れば、同じ鎖に連なる剛体は同じグループに所属し、かつそのグループ自身と非衝突です。
その他
剛体の形状によって半径などのサイズを調整できます。
また、以下の項目の設定も可能です。
尚、()内はPmxEditorにおける各パラメータの名称です。
- 重さ(質量)
- 反射性(反発力)
- 摩擦(摩擦力)
- 線速度の減速(移動減衰)
- 角速度の減速(回転減衰)
この辺りは以前の投稿で少し調整を試してみました。
髪の揺れ方に関わってくる部分ですが、今回はデフォルトのままで進めています。
安定して髪を揺らすことが出来てきたら、いずれ、これらを調整してより自然な揺れ方を追求してみたい、と考えています。
ジョイントのプロパティ
MMDジョイントという専用プロパティが存在します。

揺れる髪の回転角度について設定できます。
動いて欲しくない方向への回転を小さくしたり、逆に大きくしたりと設定が可能です。IKの角度制限と似ていますかね。
注意点
私が考える、各作業の細かい注意点です。
剛体のサイズ調整
オブジェクトモードでの剛体の拡縮は、実際のサイズに影響しないようです。
オブジェクトモードでBone.000の剛体の縮小を行った際はMMDリジッドボディ上の半径に数値の変化はありません。
しかし、編集モードで同様の作業を行った場合、MMDリジッドボディ上の半径の数値は小さくなりました。
どうやら、オブジェクトモードでの拡縮は見た目のサイズを調整しているに過ぎず、実際の剛体のサイズは調整できていないようです。
これが人型モデルの場合、下の動画のような問題が起こります。
頭の剛体のサイズを編集モードで縮小した場合、問題は起こらないようです。
製作者の皆様のモデルを参考にさせて頂けば、顔に近い髪の剛体については、基本的に頭の剛体と非衝突に設定することが多いようです。
かつ、頭部を髪が貫通しないように剛体の回転角度制限を設定できます。
(この辺りについては後述します)
そう考えると、頭の剛体のサイズ調整は必要なのか?という気もします。
しかし、長いツインテールのような髪型を考慮すると、毛先が頭部に接触する場合もあるでしょうから、やはり、剛体の形状やサイズはなるべくメッシュに近い方が望ましいのではないか、と思います。
非衝突グループ
製作者の皆様のモデルを参考にさせて頂けば、ひとつの髪の束にボーンの鎖が通り、各ボーンに剛体が設置されている場合、コリジョングループの設定には以下のような特徴があります。
- 各剛体は同じグループに所属する
- 各剛体は自身のグループと非衝突
前章に挙げた例で言えば、Bone.000~002の剛体は全てグループ0に所属し、またグループ0の剛体と衝突しない設定です。
グループ0とグループ0が衝突する場合、ジョイントで繋がれた剛体間で接触するためか、剛体が暴れてしまいます。
これは各剛体の大きさを調整することで解決できる場合もありそうです。
ただ、多くのモデルが上記の条件で作成されていることを考慮すれば、これは例に習うのがベターなのではないか、と思います。
ジョイントの回転制限
回転制限とは
簡単な参考動画を作りました。
この場合、ジョイントのZ軸はグローバルのZ軸と一致しています。Z軸の回転を制限すると、立方体が捩れる動きが少なくなりました。
人型モデルを例に挙げれば、髪の束のジョイントのZ軸に回転制限を設定することで、髪が捩れてしまうのを防ぐ効果があるようです。
回転制限を活用すれば、より自然な揺れを表現できるようです。
回転軸の向き
ジョイントのローカル軸
自然な揺れを表現するため、回転制限の軸に注目します。
上記のMMDジョイントのプロパティでは、角度の設定においてそれぞれのジョイントのローカル軸が基準となるようです。
つまり、回転制限の軸はジョイントのローカル軸と一致しているようです。
ジョイントのローカル軸の向き
また、ジョイントのローカル軸の向きは、剛体及びジョイントを設置するボーンのロール角度の影響を受けるようです。

上の画像は、ボーンのロール角度をそれぞれ変更した後、剛体とジョイントを設置した様子です。(緑の座標軸がジョイントの軸)
剛体、ジョイントの軸はボーンの向きに沿うように決定されているようです。
発生する問題
通したボーンのロール角度が髪の束によってそれぞれ異なっていると、回転制限の軸についてもジョイント毎に変わってしまう、という問題が出てきます。
例えばジョイント毎にX軸とY軸が入れ替わっていたり、回転方向の正負が逆になっていたりします。

上の画像のモデルの場合、X軸及びY軸がグローバル軸と一致していませんし、かつ、耳の下の髪と後ろ髪でジョイントの軸の向きが異なっています。
例えば、耳の下の髪と後ろ髪に対して同じ方向への回転制限を設定したい場合、前者と後者で数値を変更する軸が変わってしまうことになります。
(実際その体験をしたために、ジョイントのローカル軸に注目しました)
ロール角度を整える
回転制限の設定をする際に、いちいちジョイントのローカル軸を確認しながら作業をするのはしんどいですし、後々修正の必要が出てきた場合、かなり面倒なことになるのではないか、と思います。

ということで、各ボーンのロール角度を0°に変更し、グローバル軸に合わせるようにジョイントのローカル軸を修正しました。
ジョイントが設置された状態では修正を受け付けないようだったので、一旦全てのジョイントを削除し、各ボーンのロール角度を調整後、再度ジョイントを作成しました。
ジョイントの回転制限をグローバル軸で指定する方法が存在すれば良いのでしょうが、今回調べた限りでは見つけることはできませんでした。
余談
ちなみにですが、ジョイントの修正後に、剛体のローカル軸を確認するとそれぞれ異なる方向に向いていました。
やはり、剛体及びジョイントを設置した後にボーンのロール角度を調整してもその影響はないようです。
今のところ、物理演算の働きに剛体のローカル軸が影響しているようには見えませんので、このまま放置してもよさそうです。
(剛体の形状が球とカプセルであるため、たまたま問題が起きていないだけかも)
ただ、上記のサイズ調整の問題にまだ気付かずに、この剛体群はオブジェクトモードで縮小を行ってしまったこと、そしてこのローカル軸のことと合わせ、個人的にはちょっと気持ちが悪い部分もあります。
難しい作業ではないので、剛体の作成からやり直しても良いかもしれません。
終わりに
物理演算、剛体とジョイントの扱いは難しいなと感じていたのですが、少し自分の中で整理されてきたような気がします。
今回は以上です。読んで下さった方、ありがとうございました。
サイト名、作品名 | 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.91 Tutorial】キャラクター Hair Rigのつくり方 解説 – How to make the Hair Rig【剛体 Simulation】 | https://www.youtube.com/watch?v=1EuyiH_uuqc | 2023/8/3 |
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 |