Rigidbody & Joint [Blender, MMD Tools] #2


はじめに

今回の目的です。

  • モデルの髪がモーションに合わせて自然に揺れる仕組みを作る

BlenderとMMD Toolsを使用して、MMDモデルを作成しています。

簡単なモデルを作り、モーションデータを読み込んで、MMDで動作確認をするところまで進めてきました。

モデルをもう少し作り込んでいきたいと思います。

具体的には「モデルの髪がモーションに合わせて自然に揺れる」ような仕組みを作りたいと考えています。

今回の学習のテーマです。

  • BlenderでMMD Toolsの機能を用いモデルに剛体を設定する

前回は、MMD Toolsを使用した剛体とジョイントの設置方法について確認をしました。

今回は実際にモデルに剛体とジョイントを設置してみて、プロパティの各値の設定や発生する問題について調べていきたいと思います。

尚、記事の内容については正確性を保証致しません。「解説」ではなく、個人のメモ、備忘録のような情報としてお読みください。
また、以下の環境でモデルの作成を行っています。

ソフト、アドオン
Blnender2.83LTS
MMD Tools2.4.0
PmxEditor0.2.5.7

各機能や設定についてハイライトで色を分けています。

  • Blenderの機能・設定
  • MMD Toolsの機能・設定
  • MMD Toolsの機能で作成されたもの

今回の成果

MMD

髪のメッシュに剛体とジョイントを設置し、MMDでモーションを読み込みました。

作品名製作者様URL
ねこみみスイッチdeniwellhttps://piapro.jp/daniwell
ねこみみスイッチモーションhinohttps://bowlroll.net/file/421
お借りした作品

モデルの設定

今回作成したモデルの各パラメータです。

剛体の設定

髪(ツインテール)の剛体のパラメータです。

項目
形状カプセル
半径/高さ0.7 /
剛体タイプボーン追従、物理演算
コリジョングループ0
コリジョングループマスク0
重さ
反射性0
摩擦0
線速度の減速0.99
角速度の減速0.99
剛体の各設定

カプセルの高さは剛体によって様々です。メッシュやボーンのサイズに合わせて調整しています。
重さも各剛体によって様々ですが、髪の根元程重く、先端に進むにつれて軽くなるよう設定しました。

ジョイントの設定

髪(ツインテール)の開始点のジョイントのパラメータです。

制限/パラメータXYZ
移動min: 0 max: 0min: 0 max: 0min: 0 max: 0
回転min: 0 max: 10min: -10 max: 10min: -10 max: 10
制限/パラメータの各設定
ばねXYZ
移動000
回転000
ばねの各設定

髪の先端に進むにつれX軸・Z軸の回転量が増えるように設定しました。ばねの設定は全てのジョイントで上記の値です。

ジョイントの種類は全て「バネ付き6DOF(標準)」を選択しました。

その他の設定

詳細は割愛いたしますが、前髪等にも剛体とジョイントを設置しました。

体のメッシュへの食い込みを避けるため、頭や肩、胴体等にも剛体を設置しました。
メッシュの形状に合わせるためサイズの変更を行った以外はデフォルト設定のままです。

項目
形状頭:カプセル、他:ボックス
剛体タイプボーン追従
その他の剛体の各設定

以下の記事は、髪の剛体・ジョイント作成の備忘録です。


準備

「髪」が必要なので髪のメッシュを作成しました。

加えて、髪が揺れる様子を楽しむのであればモデルにキャラクターがあると良いかなと思い、衣服の作成と材質の設定を行いました。

髪のメッシュを作成

「カーブ」オブジェクトの形状を整え、「メッシュ」オブジェクトに変換し、作成しました。

作成に当たり、mmCGチャンネルさんの動画を参考にさせていただきました。

出来上がったのがこちらです。

「可愛さ」や「美しさ」については今後の課題にして、まずはモデルに剛体とジョイントを設置することに集中します。

選択中のツインテールのメッシュに剛体とジョイントを設置していきます。

衣服・材質

体のメッシュの一部から複製し簡単な衣服を作成しました。また、画像テクスチャを各メッシュに対して作成しました。

最終的には上記の衣服に少し工夫を加えたものに変更しました。


剛体とジョイントの作成

剛体を作成

前回の投稿で確認した方法で行いました。

①アーマチュアの編集モードを選択
②剛体を設置したいボーンを選択
③MMD Tools「リジッドボディ」タブで「+」ボタンをクリック

選択中のボーンにちなんだ名称の剛体が作成されます。作成過程は割愛します。

ジョイントを作成

前回の投稿で確認した方法で行いました。

①ふたつの剛体を選択
②MMD Tools「ジョイント」タブを開き「+」ボタンをクリック
③必要があれば各項目を設定し、「OK」をクリック

ジョイントの名称は先端側の剛体にちなんだものになるようです。作成過程は割愛します。

テスト

剛体の作成時に「半径」と「高さ」は拡縮で変更しました。それ以外の設定は変更せず、初期状態のままアニメーションを再生してみます。

項目
形状カプセル
半径/高さ
剛体タイプボーン追従、物理演算
コリジョングループ0
コリジョングループマスク無し
重さ1kg
反射性0
摩擦0.5
線速度の減速0.04
角速度の減速0.1
【video1】剛体の各設定
制限/パラメータXYZ
移動min: 0 max: 0min: 0 max: 0min: 0 max: 0
回転min: -45, max: 45min: -45, max: 45min: -45, max: 45
【video1】ジョイント:制限/パラメータの各設定
ばねXYZ
移動000
回転000
【video1】ジョイント:ばねの各設定
video1:Dafault Property

ボーンの間に隙間ができて髪のメッシュが伸びてしまっています。

また、ボーンがブルブルと震え、髪が細かく振動してしまっています。

現状では、あまり髪らしい動きとは言えないですね。不自然であり、期待したものとは違うと思います。


剛体とジョイントの設定を確認し、なるべく髪が自然に揺れる動きになるよう、修正していきます。

余談

髪の形状と剛体の配置

動画の状況でもまだ良い方でした。
ボーンの隙間があまりにも大きい、ボーンが逆さまになる、等様々な問題が起こりました。

そのため、ツインテールは何回か作り直しています。形状や頂点数等の関係もあるのではないか、と考えたからです。
メッシュ、剛体、ウェイトペイントの試行錯誤にはかなり時間がかかりました。

以下は失敗例です。

ツインテールが先端で不規則に広がるような形にしたかったのですが、メッシュのラインに「関連ボーン」を合わせたため、物理演算が働くと髪がまっすぐに伸びてしまいました。

メッシュに対して剛体とその「関連ボーン」をどの角度で合わせれば期待した動きを表現できるのか、要勉強だと感じました。

mmd_bonetrackの場所

mmd_bonetrack』というエンプティが剛体作成時に作成されます。

この『mmd_bonetrack』は、本来は作成した剛体の下に配置されるようなのですが、どういう訳かコレクション下に直接配置される場合がありました。

うまく作れなかった剛体を削除した際に残ってしまったものかもしれません。

今回、最終的な形状の髪と剛体を作成している時はこのような事態には遭遇しませんでした。作業が順調な時には起こらない事態、ですので、おそらくですが、この状態は望ましくない状態なのだと思います。

これが原因なのかハッキリしませんが、この状態で作業を続けるとBlenderが落ちることがしばしばありました。


剛体の設定

物理演算プロパティ「MMDリジッドボディ」で設定します。

剛体の形状の設定

形状

以下の選択肢があります。

  • ボックス(箱)
  • カプセル

サイズは半径のみ指定可能です。

ボックス(箱)

サイズはX、Y、Z軸で指定可能です。
PmxEditor上では、幅、高さ、奥行、という表記になります。

カプセル

サイズは半径と高さを指定可能です。

どの形状の剛体にするのか?

モデル制作者の皆様の作品を参考にさせていただき、確認してみました。参考にさせていただいた制作者様、モデル名は末尾に記載いたします。

確認した限りでは、カプセル型が多い印象です。


剛体タイプの設定

以下の記事では、剛体作成時に指定するボーン、及び剛体が関係を保つボーンを、PmxEditorを参考にして「関連ボーン」と表現します。

剛体タイプ

以下の選択肢があります。

  • ボーン追従
  • 物理演算
  • 物理演算+ボーン
ボーン追従

「関連ボーン」の位置で固定される剛体、のようです。

アニメーションを再生しても移動・落下することはありません。
物理演算を取り入れたいメッシュの根元に配置する、と考えればいいのではないかと思います。

物理演算

名前の通りだと思います。

今回の場合、「ボーン追従」剛体の「関連ボーン」の子ボーンに対して、つまり髪の揺れる部分に設置していきます。

物理演算+ボーン

PmxEditor上では「物理・ボーン位置合わせ」という名称で表されるようです。

基本的に物理演算剛体と同じ挙動ですが、移動分を捨てて回転のみをボーン側へフィードバックする仕組みとなります(Jointズレ対応用)

PmxEditor:readme.txt

「物理演算」タイプでは「関連ボーン」間に隙間が出来てしまう場合でも、この剛体タイプを選択すれば問題ない、ようです。

比較:「物理演算」と「物理演算+ボーン」

比べてみました。

髪の根元(twin_tail.L.000)髪(twin_tail.L.001…)
動画前半ボーン追従物理演算
動画後半ボーン追従物理演算+ボーン

剛体タイプ以外の設定は、動画前半・後半で全て共通です。

video2:Bone Type Comparison

拡大しないと確認できないかもしれませんが、剛体タイプ「物理演算」では「関連ボーン」間に出来ている隙間が、タイプ「物理演算+ボーン」では解消されています。

どのタイプの剛体にするのか?

モデル制作者の皆様の作品を参考にさせていただき、確認してみました。

ボーン追従タイプ

「ボーン追従」タイプはどのモデルで使用されています。やはり「物理演算」タイプ群の根元に配置されています。

物理演算タイプか、物理演算+ボーンタイプか?

結論を申し上げますと、どちらも存在しました。


グループの設定

「コリジョングループ」及び「コリジョングループマスク」の設定です。

概要

ソフト間で以下のような名称の違いがあるようです。

BlenderPmxEditor
コリジョングループグループ
コリジョングループマスク非衝突グループ

剛体に所属するグループを規定し、グループ間で衝突・非衝突の設定が可能、ということのようです。

髪のメッシュでは

製作者様の各モデルを参考にさせていただくと、髪のメッシュに配置された剛体のグループ設定は以下のようでした。

  • 所属するグループは同時に非衝突グループ

画像のように、剛体は以下の条件を満たしています。

  • グループ「〇」に所属
  • グループ「〇」は非衝突グループ

半径/高さの設定

剛体の形状でカプセル型を選択した前提です。

剛体のサイズを調整できます。PmxEditorでは「サイズ/姿勢」項目内にあります。

概要

編集モード時

剛体オブジェクトを選択し、編集モードで形状を変化させると「半径/高さ」の値もそれに応じて変化します。

編集モード中は「MMDリジッドボディ」プロパティの「半径/高さ」が消灯状態で表示され、数値の入力による変更はできないようです。
3Dビューポートで拡縮等で剛体の形状を変更すると、「半径/高さ」の値に反映されます。

オブジェクトモード時

一方、オブジェクトモード時は「MMDリジッドボディ」プロパティの「半径/高さ」が点灯状態で表示され、数値の入力による変更が可能です。

物理演算への影響

剛体の形状が物理演算に影響するようです。

PmxEditor上で剛体の「半径」の値を変更し、アニメーションを再生しました。

video3:Rigidbody Radius Comparison

剛体の形状が小さいと振動が大きくなりますが、形状が大きいと振動が小さくなるようです。

製作者様の各モデルを参考にさせていただいても、髪のメッシュに配置された剛体群は全体として「関連ボーン」群を包み込むような形状でした。
尚、半径の適切な値についてはメッシュや「関連ボーン」次第で変わってくると思われます。


物理演算パラメータ

ソフト間で以下のような名称の違いがあるようです。

尚、「物理演算パラメータ」はPmxEditor上の表記であり、Blender上ではこの表記は存在しません。

BlenderPmxEditor
重さ質量
反射性反発力
摩擦摩擦力
線速度の減速移動減衰
角速度の減速回転減衰

重さ(質量)の影響

重さ及び質量は物理演算に影響するようです。
「関連ボーン」間に隙間が出来てしまうのは、この影響によるところがが大きいのではないか、と感じました。

アニメーションを再生しつつ、各剛体の重さを変更し、なるべく「関連ボーン」間に隙間が出来ないよう調整してみました。

剛体の半径/高さについてもvideo1とは変えていますので、質量だけを調整してジョイントのズレを修正した訳ではないですが、一応、調整した結果を動画にしました。

項目
形状カプセル
半径/高さ
剛体タイプボーン追従、物理演算
コリジョングループ0
コリジョングループマスク無し
重さ
反射性0
摩擦0.5
線速度の減速0.04
角速度の減速0.1
【video4】剛体の各設定
制限/パラメータXYZ
移動min: 0 max: 0min: 0 max: 0min: 0 max: 0
回転min: -45, max: 45min: -45, max: 45min: -45, max: 45
【video4】ジョイント:制限/パラメータの各設定
ばねXYZ
移動000
回転000
【video4】ジョイント:ばねの各設定
video4:After Weight Setting

「ボーン追従」タイプ剛体から距離が離れる程、「物理演算」タイプ剛体の重さは小さくする、という感覚で調整するとうまくいくように感じました。

最終フレーム終了時に値の更新が行われるようなので、アニメーション再生時でも値の調整は可能でした。
フレーム数を少なくして、細かく値を調整するのが良いかな、と思います。

髪の揺れとしては依然不自然ですので、他のパラメータも調整をして、少しでも自然な動きに寄せていければ、と思います。


反射性と摩擦の影響

個人の感想に過ぎませんが、この項目の調整はあまり効果を感じることはありませんでした。

「反射性(反発力)」や「摩擦(摩擦力)」が、わたしの想像する力の働きと一致していれば、ですが、おそらく、衝突判定のある他の剛体と接触した際の動きに関係のあるパラメータだと思います。

概要

デフォルトの値です。

項目デフォルト値
反射性(反発力)0
摩擦(摩擦力)0.5

製作者様の各モデルを確認した限りでは、反射性については小数点以下の値が設定されていることもありますが、摩擦については共通して「0」でした。


線速度・角速度減速の影響

概要

デフォルトの値です。

項目デフォルト値
線速度の減速(移動減衰)0.04
角速度の減速(回転減衰)0.1

この設定はモデルによって異なり、髪の根元から先端に沿って値が減少する、逆に増加する等、様々でした。

Blenderの「MMDリジッドボディ」では、設定できる値は最大で「1」でしたが、PmxEditorでは「1」より大きい値でも設定が可能です。

比較:移動減衰・回転減衰の値とアニメーションへの影響

比べてみました。

全て同じモデルを使用し、移動減衰と回転減衰の値のみ変更しています。

video5:Speed Decay Comparison

デフォルト値では髪が頭の上まで跳ね上がっていますが、減衰の値を大きくすると、髪がなびく様が緩やかになっていると感じます。


ジョイントの設定

物理演算プロパティ「MMDジョイント」で設定します。

ジョイントの設定

制限/パラメータ

概要

「制限/パラメータ」はPmxEditor上の表記であり、Blender上ではこの表記は使用されていません。
ただ、「MMDジョイント」でこの項目に明確な名称が付いていないため、判別のためこのように表現させていただきます。

デフォルトの値です。

項目XYZ
移動min: 0 max: 0min: 0 max: 0min: 0 max: 0
回転min: -45 max: 45min: -45 max: 45min: -45 max: 45

この項目はBlenderの「リジッドボディコンストレイント」の「リミット」に当たります。こちらでの値の変更は「MMDジョイント」の「制限/パラメータ」に同量の変更を加えます。

以下、BlenderとPmxEditorでの、この項目の呼称対応表です。

ソフト項目
Blenderリミットリニア角度
PmxEditor制限/パラメータ移動回転
それぞれの値について

製作者様の各モデルを確認した限りでは、移動については概ね全ての軸において最小最大全て「0」でした。

回転については「0」「±30~80」等箇所によって様々でしたが、Y軸(高さ)については共通して「±10」等、幅が狭く設定されていました。
髪が前後左右に揺れるけれど、捩れる動きは少なくなるような工夫なのだと思います。

ばね

概要

デフォルトの値です。

項目XYZ
スプリング(リニア)000
スプリング(角度)000

Blenderの「リジッドボディコンストレイント」の「ばね」の「リニア」「角度」に該当する項目ですが、「剛性」のみ対応しており「減衰」については扱われないようです。

また、Blenderの「ばね」からの「剛性」の値の変更は「MMDジョイント」の「スプリング」の値に変更を加えませんでした。
一方で、「MMDジョイント」の「スプリング」の値に変更はBlenderの「ばね」の「剛性」の値に同量の変更を加えます。

以下、Blender、「MMDジョイント」、PmxEditorでの、この項目の呼称対応表です。

ソフト項目
Blenderばねリニア(剛性のみ)角度(剛性のみ)
MMDジョイントスプリングリニア角度
PmxEditorばね移動回転
それぞれの値について

製作者様の各モデルを確認したところ、この値はモデルによって様々でした。

Joint種類

PmxEditorで設定できる項目です。

Blenderにも「タイプ」という設定があり、ヒンジ、スライダー等いくつかの種類から選択できますが、この「タイプ」の選択はエクスポート時継承されることはないようでした。

ですので、こちらの設定はエクスポート後でないと変更できないようです。
尚、使用しているMMD Toolsは2.4.0版ですので、最新版であれば仕様は異なるのかもしれません。

概要
  • バネ付き6DOF(標準)
  • 6DOF
  • P2P(点結合)
  • Cone Twist(錐回転)
  • Slider(軸移動)
  • Hinge(軸回転)

デフォルトでは「バネ付き6DOF(標準)」が選択されています。

種別にアイコンカラーが設定されており、判別が容易です。

どの種類を選ぶべきか?

製作者様の各モデルを確認した限りでは、「バネ付き6DOF(標準)」のみでした。

BlenderとPmxEditorの軸について

BlenderとPmxEditorではY軸とZ軸の指す方向が異なります。それぞれが入れ替わる関係です。
また、回転の数値の計算も異なるようです。

例を挙げます。

上の画像のように、Blenderの「リミット」「角度」においてY軸の下限上限を指定しました。この変更は「MMDジョイント」にも反映されています。

この設定のモデルをエクスポートし、PmxEditorで開いてみます。

以下のことが確認できます。

ソフトXminXmaxYminYmaxZminZmax
Blender010-9090-1010
PmxEditor-100-1010-9090

簡単にまとめると、以下のような基準の違いがあるようです。

ソフト奥行高さ回転の計算
BlenderYZ+方向は反時計回り
PmxEditorZY+方向は時計回り

回転方向の参考画像です。

BlenderのX軸60度
PmxEditorのX軸60度

考えると混乱してきます。

しかし、逆に考えれば、エクスポート後に同じ動きになるように、MMD ToolsがBlnederの設定をPmxEditor用に変換してくれている、ということです。
軸や回転方向の入れ替え作業を自分で行う必要がない、と思えば、とても助けられている、と思います。

どちらかのソフトを基準にして各制限の数値を調整すれば、エクスポート時に他方のソフトに合うように変換されるので、作成時や編集作業中にこういったことを気にする必要はない、と思います。


終わりに

とりあえずは物理演算で揺れる髪を作ることができました。

しかし、良い「揺れ」を追求するには、剛体・ジョイントの設定をもっと細かく試す必要がある、と感じました。

また、今後の課題にもなりますが、トポロジーや頂点の場所を意識したメッシュ作成が大切だと実感しました。
服の裾が食い込んだり、服の内側の肌が露出したりするのは、形状やウェイトペイントのズレから起こるのではないか、と思います。

そして、読み込むモーションに応じたモデルのボーンの位置調整が必要かな、と思いました。
作成した動画では、手首から先が体に入り込んだり、肘のメッシュが崩れたりするシーンが見られます。おそらく、このモーションが基準にしているモデルと今回作成したモデルで腕や肘の位置が異なっているため、だと思います。

できることは、まだまだたくさんあると思います。少しずつ「可愛い」モデルを作れるよう勉強していきたいです。

読んでくださった方、ありがとうございました。

追記:2023/8/3
mmd_toolsを使用した剛体とジョイントの作成について新しく投稿をしました。

サイト名ページタイトルURL参考にした日付
Blenderhttps://www.blender.org/2022/12/11
UuuNyaa/blender_mmd_toolshttps://github.com/UuuNyaa/blender_mmd_tools2022/12/11
とある工房https://kkhk22.seesaa.net/2022/12/11
Vocaloid Promotion Video Projecthttps://sites.google.com/view/vpvp/%E3%83%9B%E3%83%BC%E3%83%A02022/12/11
mmCGチャンネル animetichttps://www.youtube.com/channel/UCvC55dRRUwzHgkj1oiylDpg2022/12/12
参考URL

参考にさせていただいたモデル、お借りした作品について

readme、各サイトのガイドライン等を読み、禁止事項に当たらないよう注意し、今回の投稿をしております。

制作者の皆様には、この場を借りてお礼を申し上げます。
制作者の皆様、素晴らしい作品を参照・使用させていただき、ありがとうございます。

モデル名製作者様URL
Tda式初音ミク・アペンド_ver1.10Tdahttps://bowlroll.net/file/4576
YYB Hatsune Miku_10th_v1.02YYBhttps://bowlroll.net/file/146083
つみ式ミクさんv4つみだんごhttps://3d.nicovideo.jp/works/td56081
Lat式ミクVer2.31Lathttp://innoce.nobody.jp/
参考MMDモデル
作品名製作者様URL
ねこみみスイッチdeniwellhttps://piapro.jp/daniwell
ねこみみスイッチモーションhinohttps://bowlroll.net/file/421
お借りした作品

comment