mmd_toolsで読み込んだMMDモデルにBlenderのクロスシミュレーション機能を使ってみます。
このページではハイフェンA2モデルを例として利用させてもらいます。
モデルの規約によっては改造だけでなくMMDとその派生型以外のソフトウェアにモデルを持っていくこと自体を禁止しているものもあります。ご注意ください!!
MMDではモデルに設定された剛体とJointで物理演算を行ってボーンを動かし、それによってボーンに設定されたウェイトに従って頂点が移動します。
Blender上でもリジッドボディ(剛体)とリジッドボディコンストレイント(Joint)で似たような物理演算ができます。
Blenderへmmd_toolsで読み込んだMMDモデルも剛体/JointはBlenderのリジッドボディとリジッドボディコンストレイントへ変換されます。(物理演算エンジンが違うため演算結果は完全に同一にはなりません)
MMDには無いBlenderの機能の一つとしてクロスシミュレーションがあります。
これは剛体とJointで演算して頂点(正確にはボーンとそれに乗っているウェイト頂点)を動かすのではなく、頂点と重力やコリジョンを演算して直接(剛体やボーンを介さず)頂点を動かし、布、衣服などをシミュレーションする機能です。
そのためローポリモデルでは望んだ結果にはならないかもしれません。


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

いくつか方法がありますがこのページではサーフェス変形モディファイアーを利用する方法を取ります。
スカートのオブジェクトを複製後編集し、それに対してクロスシミュレーションを行い、サーフェス変形で元のオブジェクト(材質)に演算結果を反映させる方法です。
Blender上でもリジッドボディ(剛体)とリジッドボディコンストレイント(Joint)で似たような物理演算ができます。
Blenderへmmd_toolsで読み込んだMMDモデルも剛体/JointはBlenderのリジッドボディとリジッドボディコンストレイントへ変換されます。(物理演算エンジンが違うため演算結果は完全に同一にはなりません)
MMDには無いBlenderの機能の一つとしてクロスシミュレーションがあります。
これは剛体とJointで演算して頂点(正確にはボーンとそれに乗っているウェイト頂点)を動かすのではなく、頂点と重力やコリジョンを演算して直接(剛体やボーンを介さず)頂点を動かし、布、衣服などをシミュレーションする機能です。
そのためローポリモデルでは望んだ結果にはならないかもしれません。
- ローポリモデルにクロスシミュレーションを使った例(球体はコリジョン)

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

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

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

モデルを読み込み、プロパティシェルフからMMDタブ→Separate By Materialsでモデルの材質ごとにオブジェクトを分割します。

スカートの材質(オブジェクト)をShiftキーを押しながら選択し、Ctrl+Jキーで結合します。

結合したオブジェクトを選択した状態でShift+Dキーを押してオブジェクトを複製します。
複製元オブジェクト名.001というオブジェクトが作成されます。
この複製したオブジェクトに対してクロスシミュレーションを行います。
このページではハイフェンA2モデルを例として使わせてもらいます。
このモデルのスカートにクロスシミュレーションを使ってみます。

モデルを読み込み、プロパティシェルフからMMDタブ→Separate By Materialsでモデルの材質ごとにオブジェクトを分割します。

スカートの材質(オブジェクト)をShiftキーを押しながら選択し、Ctrl+Jキーで結合します。

結合したオブジェクトを選択した状態でShift+Dキーを押してオブジェクトを複製します。
複製元オブジェクト名.001というオブジェクトが作成されます。
この複製したオブジェクトに対してクロスシミュレーションを行います。
サーフェス変形モディファイアにはいくつかの制限があり、下記のようなメッシュにはターゲットに指定できません。(バインドが成功しない)
これらを回避するためメッシュを編集します。

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

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

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

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

オブジェクトデータタブの頂点グループから、+ボタンをクリックして新規頂点グループを作成し、スカートの上の方の頂点を選択して割り当てボタンをクリックします。
この頂点グループに割り当てた頂点はクロスシミュレーションの際、移動しません。(ウェイト1の場合)
設定しないとスカート全体が重力に従って落ちてしまいます。

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

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

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


画面右上のアウトライナーからFilter.をクリックしてカメラのアイコン(レンダーで無効)をクリックします。
アウトライナーの一覧にカメラのアイコン(レンダーで無効)が追加されるのでクロスシミュレーションを設定した材質を選択し、目玉のアイコン(ビューポートで隠す)とカメラのアイコン(レンダーで無効)をクリックしてビューポート、レンダー共に表示されないようにします。
- 3つ以上の面を持つ辺
- 凹面
- 頂点が重複している
- 同一直線上のエッジを持つ面
これらを回避するためメッシュを編集します。

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

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

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

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

オブジェクトデータタブの頂点グループから、+ボタンをクリックして新規頂点グループを作成し、スカートの上の方の頂点を選択して割り当てボタンをクリックします。
この頂点グループに割り当てた頂点はクロスシミュレーションの際、移動しません。(ウェイト1の場合)
設定しないとスカート全体が重力に従って落ちてしまいます。

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

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

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


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


スカートオブジェクトを選択し、モディファイアータブからサーフェス変形モディファイアーを追加します。

サーフェス変形モディファイアーのターゲット:にクロスシミュレーションを設定したオブジェクトを指定します。
オブジェクトを指定したらその下のバインドボタンをクリックします。
上手くバインドできれば下図のようになります。

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

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

モディファイアータブからmmd_bone_order_overrideのカメラのアイコン(レンダー)とモニターのアイコン(リアルタイム)アイコンをクリックしてoffにします。
これによりボーンを動かしてもスカートオブジェクトが追従しなくなりますが、先程設定したサーフェス変形モディファイアによりクロスシミュレーション用オブジェクトに設定されているmmd_bone_order_overrideでクロスシミュレーション用オブジェクトがボーンに追従して動き、それがサーフェス変形を通してスカートを動かすので問題ありません。
クロスシミュレーションの確認の為にアニメーションを再生したため、数フレームかはベイク済みかと思いますが、正しく計算するためにちゃんとベイクします。


クロスシミュレーション用オブジェクトの物理演算タブからクロスのキャッシュタブを開き、ベイクを削除をクリックして既存のベイクを削除します。
削除後にベイクボタンをクリックしてベイク後、[space]キーを押してアニメーションを再生して足にめり込んでないのを確認します。
足などにめり込んでしまっている場合、一旦ベイクを削除してから足などに設定したコリジョンの外側の厚さの数値を上げるか、
クロスシミュレーションするオブジェクトのクロスからコリジョン→オブジェクトのコリジョン→距離の値を上げてみます。




クロスシミュレーション用オブジェクトの物理演算タブからクロスのキャッシュタブを開き、ベイクを削除をクリックして既存のベイクを削除します。
削除後にベイクボタンをクリックしてベイク後、[space]キーを押してアニメーションを再生して足にめり込んでないのを確認します。
足などにめり込んでしまっている場合、一旦ベイクを削除してから足などに設定したコリジョンの外側の厚さの数値を上げるか、
クロスシミュレーションするオブジェクトのクロスからコリジョン→オブジェクトのコリジョン→距離の値を上げてみます。
- 外側の厚さ

- オブジェクトのコリジョン-距離

- mmd_toolsからモーション(.vmd)を読み込んでモデルに当てる際は、モデルへモーション読み込み→MMDタブからPhysics:Build→シーンプロパティからリジッドボディワールド→キャッシュ→シミュレーション終了フレームを確認→クロスシミュレーション用オブジェクトの物理演算タブからキャッシュ→終了フレームをリジッドボディワールドのと同じにして全物理演算をベイク
- 途中で脱衣させる場合は、頂点ウェイト合成モディファイアをClothの上に追加し、キーフレームを打つ。
タグ
最新コメント