主にMMDやBlenderの個人的なメモ用です。一部に成人向けの内容を含みます!未成年の方はご覧にならないでください!

モデルの規約によっては改造だけでなくMMDとその派生型以外のソフトウェアにモデルを持っていくこと自体を禁止しているものもあります。ご注意ください!!

mmd_toolsで読み込んだMMDモデルにBlenderのクロスシミュレーション機能を使ってみます。

下記動画の左側モデルがmmd_toolsで読み込んで物理演算を有効化しただけの状態、右側のモデルがBlenderのクロスシミュ(細分化1使用)をスカートに使用した状態
動画ファイルへのリンク
モデル:ハイフェンA2(HAT10服2.pmx)
モーション:女の子がクルクル回るモーション(vmd) bowlroll

ちなみに、クロスシミュレーションほど高品質ではありませんが、スカートなどのボーンにBlenderの揺れものAddonを使って揺らすこともできます。
詳しくは【MMD×Blender】Blenderの揺れものAddonでMMDモデルの胸を揺らすのページをご覧ください。


MMDの物理演算とBlenderのクロスシミュレーション

MMDではモデルに設定された剛体とJointで物理演算を行ってボーンを動かし、それによってボーンに設定されたウェイトに従って頂点が移動します。
Blender上でもリジッドボディ(剛体)とリジッドボディコンストレイント(Joint)で似たような物理演算ができます。

Blenderへmmd_toolsで読み込んだMMDモデルも剛体/JointはBlenderのリジッドボディとリジッドボディコンストレイントへ変換されます。(物理演算エンジンが違うため演算結果は完全に同一にはなりません)

MMDには無いBlenderの機能の一つとしてクロスシミュレーションがあります。
これは剛体とJointで演算して頂点(正確にはボーンとそれに乗っているウェイト頂点)を動かすのではなく、メッシュの頂点や面と重力やコリジョンを演算して直接(剛体やボーンを介さず)頂点を動かし、布、衣服などをシミュレーションする機能です。

このためローポリモデルでは望んだ結果にはならないかもしれません。
  • 板ローポリモデルにクロスシミュレーションを使った例(板ポリがクロスシミュ対象、球体はコリジョン)

  • 細分化モディファイアーを使ってハイポリ化した板ポリにクロスシミュレーションを使った例


クロスシミュレーション機能は便利ですが、MMDモデルにそのまま使ってもほとんどの場合望んだ結果にはなりません。
Blender上でメッシュオブジェクトを同士を結合(Ctrl+J)しても頂点の繋がっていないメッシュが重力に従って落ちるなどするためです。


いくつか方法がありますがこのページではサーフェス変形モディファイアーを利用する方法を取ります。
スカートのオブジェクトを複製後、編集してそれに対してクロスシミュレーションを行い、サーフェス変形で元のスカートオブジェクト(材質)に演算(変形)結果を反映させる方法です。

MMDモデルにクロスシミュレーションを使ってみる

モデルのインポートはこちらインポートをご覧ください。

このページではハイフェンA2(HAT10服2.pmx)モデルを使わせてもらいます。
このモデルのスカートにクロスシミュレーションを使ってみます。

クロスシミュ対象(スカート)の物理削除


まずは今回クロスシミュを設定するスカート関連のリジッドボディ(剛体)とリジッドボディコンストレイント(Joint)を削除します。
サイドバーのMMDタブからモデル設定可視性:メッシュアーマチュアのチェックを外してリジッドボディジョイントにチェックを入れます。
(サイドバーが表示されない場合は3Dビュー上で[N]キーを押すと表示されます)


削除対象のスカートのリジッドボディを選択して[F2]キーを押してリジッドボディの名前を確認します。
このモデルでは”03J_左_skt_27_BODY”などとなっていることがわかります。


3Dビュー上部の選択からパターン選択を選び、パターン:*skt*と入力してスカートに関連するリジッドボディなどを選択状態にします。
[X]キーを押して削除します。
※殆どのモデルの場合は*スカート*などで関連するリジッドボディなどを選択できると思います。


このモデルではスカート関連のJoint名が”07L_J.JOINT_25214_25220”など、パターン選択で選択しづらい名前なので手動で削除します。
サイドバーのMMDタブからモデル設定可視性:リジッドボディのチェックを外してリジッドボディを非表示にします。
テンキーの[3]→[5]を押して横視点の平行投影に切り替え、[C]キーからサークル選択でスカート関連Jointを選択し、[X]キーから削除します。


サイドバーのMMDタブからモデル設定可視性:メッシュにチェックを入れてメッシュオブジェクトを表示状態にしてモデル設定メッシュ:マテリアルで分解をクリックしてメッシュオブジェクトをマテリアル(MMDで言う所の材質)単位で分割します。


このモデルではスカートが複数の材質に分かれているため、それらを[Shift]キーを押しながら複数選択して[Ctrl]+[J]キーで結合します。
※選択しづらい場合は3Dビューで[Z]キーからワイヤーフレーム表示にしたり、右上のアウトライナーから[Ctrl]キーを押して複数選択しましょう。


結合したスカートオブジェクトを[Shift]+[D]キーを押して複製し、[F2]キーから名前をわかりやすい物に変更します。
ここでは複製したスカートオブジェクトをClothとしました。

この複製したClothオブジェクトに対してクロスシミュレーションを行います。

クロスシミュレーションするオブジェクト(このページの例ではCloth)の設定

サーフェス変形モディファイアにはいくつかの制限があり、下記のようなメッシュにはターゲットに指定できません。(バインドが成功しない)
  • 3つ以上の面を持つ辺
  • 凹面
  • 頂点が重複している
  • 同一直線上のエッジを持つ面

これらを回避するためメッシュを編集します。

編集し易いように3Dビュー上で[Z]キーからワイヤーフレーム表示にしてます。


クロスシミュを設定するオブジェクト(このページの例ではCloth)を選択して[TAB]キーを押して編集モードへ入り、[A]キーですべての頂点を選択し、[M]キーを押して距離でを選択して重複頂点の削除とメッシュの結合を行います。
(モデルの衣装の構造によってはスカート関連オブジェクトを結合する前にブーリアンモディファイアーを使用してメッシュを結合しておかないと駄目かもしれません)


[X]キーを押して面だけを選択して面だけを削除します。


もう一度[A]キーを押してすべての頂点を選択して3Dビュー左上のメッシュからクリーンアップ穴をフィルをクリックして穴を埋めます。


[Ctrl]+[T]キーを押して面を三角化します。
これで今回のケースではバインドできる状態になりましたが、衣装のメッシュ構造によってはクリーンアップから凹面を分割などが必要かもしれません。


オブジェクトデータプロパティの頂点グループから、+ボタンをクリックして新規頂点グループを作成し、スカートの上の方の頂点を選択してウェイト1割り当てボタンをクリックします。

この頂点グループに割り当てた頂点はウェイト1の場合、クロスシミュされず、頂点はアーマチュアに追従します。
設定しないとスカート全体が重力に従って落ちてしまいます。

クロスシミュされない部分とクロスシミュされる部分がはっきり分かれて不自然な場合



[TAB]キーを押してオブジェクトモードへ戻り、物理演算プロパティからクロスを選択します。


クロスを下へスクロールして、シェイプから固定グループに先程作成した頂点グループを指定します。


[Space]キーを押して再生するとスカートがクロスシミュレーションされます。
[ESC]キーを押すか、もう一度[Space]キーを押して停止し、[Shift]+[←]で1フレーム目まで戻ります。
足にめり込んでしまってますが後で足にコリジョンを設定するので今はこのままでいいです。


画面右上のアウトライナーからFilter.をクリックしてカメラのアイコン(レンダーで無効)をクリックします。
アウトライナーの一覧にカメラのアイコン(レンダーで無効)が追加されるのでクロスシミュレーションを設定した材質を選択し、目玉のアイコン(ビューポートで隠す)とカメラのアイコン(レンダーで無効)をクリックしてビューポート、レンダー共に表示されないようにします。

シミュレーションを反映させるオブジェクトの設定


スカートオブジェクトを選択し、モディファイアープロパティからmmd_bone_order_override(アーマチュアモディファイア)のカメラのアイコン(レンダー)とモニターのアイコン(リアルタイム)アイコンをクリックしてoffにします。


モディファイアーを追加からサーフェス変形モディファイア追加します。


サーフェス変形モディファイアのターゲット:にクロスシミュレーションを設定したオブジェクト(今回の例ではclothオブジェクト)を指定します。
オブジェクトを指定したらその下のバインドボタンをクリックします。

上手くバインドできれば右の画像のようになります。

逆にバインドできない場合はクロスシミュレーションを設定したオブジェクトがサーフェス変形の制限事項に引っかかっています。


[Space]キーを押して再生してみます。スカートがクロスシミュレーションされるはずです。
[ESC]キーを押すか、もう一度[Space]キーを押して停止し、[Shift]+[←]で1フレーム目まで戻ります。

ボディへのコリジョン設定

このままだと足などにスカートがめり込んでしまうので足にコリジョン(衝突判定)を設定します。


足など、スカートが接触するオブジェクトを選択して物理演算プロパティからコリジョンをクリックします。

サブディビジョンサーフェス(細分化)モディファイアを使ってより滑らかにする


クロスシミュレーションを設定したオブジェクトにモディファイアプロパティからClothより上にサブディビジョンサーフェス(細分化)モディファイアを追加します。
カトマルクラークとなっているのを隣のシンプルにし、細分化:1にします。(細分化の値を大きくするとより滑らかになりますが計算量が増えてベイクに時間がかかります)


シミュレーションを反映させるオブジェクトの方にもサーフェス変形の上にサブディビジョンサーフェス(細分化)モディファイアを追加し、上記と同じ設定にします。

※バインド済みの場合は一旦バインドを解除し、サブディビジョンサーフェス(細分化)モディファイアを追加後にバインドし直します。

クロスシミュレーションのベイク

.VMDモーションをBlenderへインポートしてクロスシミュレーションのベイクを行います。
このページでは女の子がクルクル回るモーション(vmd) bowlrollを使わせてもらいます。



MMDモデルのエンプティ(足元にある十字のオブジェクト)を選択し、サイドバーのMMDタブ→モデル設定組み立て:から、SDEFボーンモーフプロパティをクリックします。
すべてや、物理演算はまだ押さないでください。


MMDモデルのエンプティを選択した状態でサイドバーのMMDタブ→シーン設定モーション:インポートから.vmdファイルを読み込みます。
※Blenderへの.vmdファイルのインポート方法の詳細やオプションについては【Blender 3.0】mmd_tools【UuuNyaa版】/ モーション(ポーズ)のインポートをご覧ください。


MMDタブ→シーン設定リジットボディ物理演算:ワールドを更新をクリックします。


サイドバーのMMDタブ→モデル設定組み立て:から物理演算をクリックしてMMDモデルの物理演算をビルドします。


クロスシミュを設定したオブジェクトの物理演算プロパティからクロスキャッシュシミュレーション開始終了の範囲を、MMDタブ→シーン設定リジットボディ物理演算:開始終了と同じ範囲に設定します。


サイドバーのMMDタブ→シーン設定からベイクします。

ベイク後、[Space]キーを押してアニメーションを再生してみて足にめり込んでないのかを確認します。


足などにめり込んでしまっている場合、クロスシミュを設定したオブジェクトの物理演算プロパティクロスキャッシュベイクを削除からクロスシミュのベイクをいったん削除します。


足などに設定したコリジョンの外側の厚さの数値を上げるか、
クロスシミュレーションするオブジェクトのクロスからコリジョンオブジェクトのコリジョン距離の値を上げてみます。


コリジョンなどを調整したら、再度ベイクします。
クロスシミュを設定したオブジェクトの物理演算プロパティクロスキャッシュベイク

クロスシミュレーションの各パラメーターの詳細(外部サイト)

[Blender 2.8] 布の表現 [クロスシミュレーション]/ ほろほろりドットコム
上記のサイトが非常に詳しいです。ご覧下さい。

アニメーション途中で脱衣させる場合

アニメーションの途中で脱衣させる場合は、モディファイアプロパティから頂点ウェイト合成モディファイアをClothの上に追加し、クロスシミュの固定グループに指定した頂点グループのウェイトを頂点ウェイト合成モディファイアで操作し、キーフレームを打ちます。
(アニメーションの途中でクロスシミュの固定グループに指定した頂点グループのウェイトを0にして脱衣させる)


クロスシミュを設定したオブジェクトのモディファイアプロパティから頂点ウェイト合成モディファイアを追加します。


頂点ウェイト合成モディファイアをClothの上に移動させます。(モディファイアの右上を掴んで移動させます)


頂点ウェイト合成モディファイアの頂点グループ Aにクロスシミュの固定グループに指定した頂点グループを設定します。


頂点セット頂点グループ AかつBとなっている所を頂点グループ AまたはBに変更します。


影響を開き、全体的な影響力0にします。
あとは脱衣させたいフレームの一つ前のフレームまで移動し、全体的な影響力0でキーフレームを打ち、脱衣させたいフレームで全体的な影響力1にしてキーフレームを打ちます。
(例えば50フレームから脱衣させたいなら、49フレーム目で全体的な影響力0でキーフレームを打って50フレーム以降で1になるようにキーフレームを打つ)

足などのコリジョンに引っかかって上手く脱衣させれない場合


このページで例として使わせてもらったハイフェンA2(HAT10服2.pmx)モデルのスカートにクロスシミュを設定してモデルの足などにコリジョンを設定した場合、クロスシミュの固定グループに指定した頂点グループを頂点ウェイト合成モディファイアでウェイト0にしても足などのコリジョンにスカートが引っかかって上手く脱衣させれません。

このため、コリジョンの影響を受けない頂点グループを新たに作成&クロスシミュに設定して、この頂点グループを頂点ウェイト合成モディファイアを使って脱衣させるフレームで有効状態にします。


Clothオブジェクトのオブジェクトデータプロパティから新規に頂点グループを作成し、[TAB]キーを押して編集モードからコリジョンの影響を受けない頂点を選択、割り当てます。

※コリジョンの影響を受けない頂点グループはウェイトの有無のみ考慮されるので、ウェイトペイントモードでグラデーション状に塗っても意味がありません。
(クロスシミュの固定グループのようにウェイト1ならクロスシミュされず、0.5ならアーマチュアとクロスシミュの半々...というわけではない)


物理演算プロパティのクロスからコリジョンオブジェクトのコリジョン頂点グループに先程作成したコリジョンの影響を受けない頂点グループを指定します。


モディファイアプロパティから頂点ウェイト合成モディファイアを新しく追加し、Clothの上に移動させ、頂点グループ Aに作成したコリジョンの影響を受けない頂点グループを指定します。
頂点セット頂点グループ AかつBとなっている所を頂点グループ AまたはBに変更します。


脱衣させたいフレームの一つ前のフレームまで移動し、頂点セット頂点グループ AまたはBの右隣のをクリックするか、右クリックメニューからキーフレームを挿入でキーフレームを打ちます。
(例えば50フレームから脱衣させたいなら、49フレーム目で頂点グループ AまたはBの状態でキーを打つ)


脱衣させたいフレームまで移動し、頂点セット頂点グループ AまたはB頂点グループ AかつBにしてキーを打ちます。
完成例
動画ファイルへのリンク

スカートを掴むような動作をさせたい場合

スカートを掴むような動作をさせたい場合は、フックモディファイアと頂点ウェイト合成モディファイアを使います。

例として次のようなモーションを用意しました。
適当ポーズ詰300種くらい/立ちポーズ(右手腰).vmd@あさぬを改変したモーションです。
動画ファイルへのリンク
このモーションの左手の動きに合わせてクロスシミュを設定したスカートを掴んで持ち上げてみます。


クロスシミュを設定したオブジェクト(このページの例ではcloth)にフックモディファイアの影響を受ける頂点グループを作成します。
オブジェクトデータプロパティから新規に頂点グループを作成し、名前をHookなど、わかりやすい物にします。


Hook頂点グループを選択した状態で[Ctrl]+[TAB]キーからウェイトペイントモードへ入ります。
掴みたい付近の頂点にウェイトを塗ります。
塗り終えたら[Ctrl]+[TAB]キーからオブジェクトモードへ戻ります。


[Shift]+[A]キーからエンプティ十字を選び、十字のエンプティを追加します。
テンキーの[5]から平行投影へ切り替え、テンキーの[1](真正面)や[3](横視点)などに切り替えながら[G]キーでエンプティをスカートのウェイトを塗った付近に移動させます。


エンプティのオブジェクトコンストレイントプロパティからチャイルドを追加し、ターゲットにモデルのアーマチュアを、ボーンに左手首のボーンを指定します。
エンプティの位置がおかしくなったら逆補正を設定または、逆補正を解除をクリックしてみてください。


モディファイアプロパティからフックモディファイアと頂点ウェイト合成モディファイアを追加し、Clothの上に上記画像のように並べ替えます。

フックモディファイアのオブジェクトにエンプティを、頂点グループにHookを指定します。

頂点ウェイト合成モディファイアの頂点グループ Aにクロスシミュの固定グループに指定した頂点グループを、頂点グループ BにHookを指定します。
頂点セット全てに、ミックスモード置き換えに変更します。

あとはクロスシミュをベイクします。
※ベイクし直さないと正常に動かない時がありました。
完成例
動画ファイルへのリンク


今回の例では最初から掴んでいますが、モーションの途中から掴みたい場合は頂点ウェイト合成モディファイアの影響から全体的な影響力0にして掴むフレームで1になるようにキーフレームを打てばモーションの任意のフレームで掴めます。

mmd_uuunyaa_tools Addonでクロスシミュ

mmd_uuunyaa_tools Addonを使うことで簡単にクロスシミュをセットアップできます。
mmd_uuunyaa_tools Addonでクロスシミュを行う場合はモデルのリジッドボディ(剛体)とリジッドボディコンストレイント(Joint)は削除してはいけません。(Addonの方で自動的にしてくれる)

詳しくは【Blender3.3】mmd_uuunyaa_tools【Addon】/ クロスシミュレーションをご覧ください。

(関係ないけど)クイック爆発エフェクトで服を吹き飛ばす

これはBlenderのクロスシミュレーションと関係ありませんが、Blenderのエフェクト、クイック爆発で服を吹き飛ばす事ができます。

モデルにクロスシミュの設定やモーションの読み込み、ベイク等を済ませたものとして進めます。


服を吹き飛ばし始めるフレームまで移動し、吹き飛ばしたい(クロスシミュを設定していない方の)服のオブジェクトを選択して3Dビュー上部のオブジェクトからクイックエフェクトクイック爆発を選択します。


モディファイアプロパティに追加された爆発モディファイアの辺をカットのチェックを外します。


パーティクルプロパティから、物理演算衝突接触時に消滅にチェックを入れます。
完成例
動画ファイルへのリンク

メモ


  • ボタンやリボンなど、クロスシミュを適用させたくないが追従させたいオブジェクトには頂点ペアレント機能を使う?

Menu

モデル/アクセサリ/素材など

Blender 2.9 LTS


※下記のページは古いものです

エンコード

コーデック

エンコード/動画編集ソフトウェアなど

その他

サウンド編集ソフト

管理人/副管理人のみ編集できます