ブログの女の子を作る #25 Magica Clothでスカートを動かす【Blender,Unity】
前回の記事で、Unityのシェーダーを変更してアウトライン線を入れました。
そして今回は、Unityのアセット「MagicaCloth(マギカクロス)」で3Dモデルのスカートや髪の毛を動かします。やっとここまで来ました!
このアセットは本当にすごい。スカートのひらひら感が最高です!!
目次
参考にさせて頂いたサイト
今回のモデリングで参考にさせて頂いたサイトです。
- 「Magica Soft」様の説明サイト
とても分かりやすい説明で、スムースに設定できました。
ありがとうございました!
(1) Magica Clothを入れる
UnityにMagica Soft様の「Magica Cloth」を入れていきます。
インストールする
アセットストアで購入します。
25ドルでした。
インストール方法は、公式のインストールガイドに書いてあります。事前に設定しておかないとコンパイルエラー出ますので、やっておきましょう。
すべて選択し、インポートします。
Magica Clothをセットアップする
セットアップ方法も、「基本セットアップガイド」と「それぞれのガイド(今回使うのはMeshClothスタートガイド)」に詳しく書いてあります。ここでは、セットアップの流れを紹介しておきます。
ガイドを見て気づいたんですが、「MeshClothはメッシュを直接動かすので、ボーンは必要ない」のですね。。。
頑張って入れたボーンはあとから消すとしましょう。
メッシュを直接動かせるのであれば、スカートなどの場合、かなりリアルな挙動になってくれそうです。これは期待が持てますよ!
Hierarchyウィンドウに「MagicaPhysicsManager」を配置します。
動かしたいオブジェクトに「Magica Render Deformer」をアタッチします。
今回は、スカートにアタッチしました。
Hierarchyウィンドウに「Magica Virtual Deformer」を配置します。
「Render Deformer List – Size」に「1」を入力し、増えた入力欄(Element 0)に「スカートのオブジェクト」をD&Dで登録します。
Createボタンを押すと、エラー表示が消えます。
仮想的に頂点数を減らす
シーンをWireframe表示に切り替えて、「Cloth Monitor」でいまの状態を確認してみます。
・Veltex: 4220
・Triangle: 7903
・Bone: 199
Blenderから持ってきたそのままなので、メッシュ数が細かいですね。ここから処理負荷を下げるため、「仮想的に頂点数を減らす」作業をしていきます。
まずは説明書通りに、「Merge Vertex Distance」を「0.0273」に変更してみます。
・Veltex: 195
・Line: 30
・Triangle: 291
・Bone: 106
かなり少なくなりましたね。
Mesh Clothを追加する
Hierarchyウィンドウに「Magica Mesh Cloth」を配置し、「Main Setup – Virtual Deformer」に「先ほど配置したMagica Virtual Deformer」をD&Dで登録します。
「Start Point Selection」ボタンを押せば、エディットモードになります。
動かしたいところは緑、固定するところは赤、それ以外は灰色で塗っていきます。
説明書にもありましたが、緑部分の上部には、必ず「赤」があることが大事ですよ。
質感をプリセットで登録する
Parametersで布の質感を調整できるんですが、いきなりは難しいので、準備されているプリセットを使います。
右側にある「Load」ボタンをクリックします。
スカートなので「MeshCloth_Skirt.json」を選択しました。
最後に「Create」ボタンをクリックします。
(2) Unityで動かして調整する
早速動かしてみましょう。
スカートがなめらかに動いた!
スカートがなめらかに動いてます!
これはスゴイ!!
激しい動きにもちゃんと追随してます。
まだコライダー入れてないので、足は貫通しまくりですが。
あと、重力でまっすぐ下に落ちるので、お尻が見えてしまいました。
いろいろと調整する必要がありそうです。
コライダーで突き抜けを防止する
突き抜けを防ぐため、体のオブジェクトにコライダーを入れていきます。
足の場合、「MagicaCapsuleCollider」が良いですね。
先端と末端のサイズ、長さを調整していきます。
同じ設定を両足分で2回するのは面倒。。。
片足の設定が終わったら、その設定値をコピー&ペーストするのが楽です。
「Copy Component」でコピーし、「Paste Component Values」で貼り付けます。
設定したコライダーを「スカート用のMagica Mesh Cloth」に登録します。
この設定をすることで、足のコライダーがスカートに干渉できるようになります。
Unityで動かしてみると、足がスカートを突き抜けなくなりました!
少しはみ出しがあったり、変な盛り上がりがありますね。
動かしてみないと分かりませんね。
微調整していく
あとは修正と動作確認を繰り返して、微調整していきます。
コライダーのサイズを小さくすると、変な盛り上がりは無くなりました。
ですが、小さくしすぎると、体がスカートを貫通してしまいます。
ちょうど良い設定を見つけるのが難しい。。。
動作中に値をコピーすると少し楽
そんな時は、Playボタンをクリックして動作してる時に、コライダーを良い位置に調整し、「Copy Component」で値をコピーしておきます。
Playを停止した後、コライダーに「Paste Component Values」で値を貼り付けると便利ですよ。
いろんな姿勢でも突き抜けないようにするのは、細かな調整は必要なんですけどね。。。
Meta Questの手にコライダーを入れる
コライダーはどこにでも入れることができます
Meta Quest(今回はOculus Link)のコントローラとして使ってる「手のオブジェクト」にも入れておけば、VR空間でスカートを触ることができます!
手の形には「MagicaCapsuleCollider」が良さそうです。
立方体のコライダーがあれば便利なんですけどね。
コライダーが入りました!
「スカート用のMagica Mesh Cloth」にコライダーを追加しておくのを忘れないように。
(3) Blenderでボーンとウェイトの最終調整
ここまで作業してみて、MagicaClothの使い方がだいぶん分かってきました。
このまま進んでも良いのですが、体をひねった時にオブジェクトがめり込んでしまったりする箇所が気になってました。Blender側で最終調整が必要ですね。
スカートのボーンを削除する
まずは必要なかったスカートのボーンを削除します。
これでスッキリです。
余分なボーンが無くなるので、Unity側での作業もしやすくなりそうです。
体をひねると吊り紐がめり込む
Unity側でアニメーションした時に気づいた「スカートの吊り紐」のめり込みです。
「Spine」ボーンを前方に曲げるとこうなるようです。いつもは「Chest」ボーンしか動かしてなかったので気づきませんでしたよ。
背中も同じくめり込んでます。
めり込んだ状態で、頂点位置を調整しておきます。
これでマシになったはず。
吊り紐の裏面を削除する
そういえば、ワイシャツを調整してる時も「裏面を削除」することで、変な挙動が減っていました。
吊り紐の裏面も削除しておきましょう。
再度動かしてみると、かなり前傾姿勢しても、めり込むことが無くなりました。
背中も大丈夫なようですね。
モデリングする時、「見えない部分の裏面は削除する」のは大事でした。
ついでにパンツの裏面も消しときます。
「特定の頂点」だけウェイトを削除する
調整していると、スカートに余分なウェイトがのってしまいました。
体を後ろに反らせたとき、スカートが変形して「スカートの裏面」が盛り上がってます。
ひねっても同じです。
今回の3Dモデルでは、MagicaClothに「スカートの制御」をまかせますので、Blender側でのウェイト設定は必要ありません。「スカートの腰部分以外」の頂点から、ウェイトを削除しておきましょう。
ウェイトを削除したい頂点をすべて選択して、頂点グループの一覧メニューで「全てのグループから除外」を選択します。
これで、体を動かしてもスカートが動かなくなりました。
完全に動きませんので、体の姿勢によってはおかしくなる場合もあります。
はみ出した場所は、別途調整しておきましょう。
個人的な設定メモです
今回の作業用のメモです。いまの3Dモデルにだけ有効な設定ですが、参考までに記載しておきます。
・脇腹の補助ボーン消した
体をひねった時、脇腹がカクカクしてしまったので。
・Unity側で耳がズレる
原因は良く分かりませんが、なんとなく耳の頂点に余分なウェイトがある気がする。
→「首から上の全頂点」を選択して、Headボーンにのみ頂点ウェイトを割り当てる。
→髪の毛にHead,Neckボーンのみを割り当てる。
・体のウェイト設定
→自動ウェイト後、Eye系ボーンのウェイトを手動で削除する。
・ワイシャツのウェイト設定
→自動ウェイト後、下から5列以外の頂点ウェイトを削除する。
・スカートのウェイト設定
→自動ウェイト後、吊り紐以外の頂点ウェイトを削除する。
→Neck,Head系ボーンのウェイトも削除する。胸リボンも同じ。
毎回必要な作業は、メモに書いておかないと忘れますね。。。
複数のシェーダーを一括設定する
Unity側のシェーダー設定を何回かやってたんですが、一括で設定できることが分かりました。知らなかった。。。
Projectウィンドウのテクスチャフォルダにある「マテリアル(丸いアイコン)」をすべて選択します。
あとは、いつものシェーダー設定をやっていくだけです。
「VRM/MToon」に変えると、全身のシェーダーが一気に変わります。
便利ですね。
(4) スカートに「Mesh Cloth」を入れる
Blender側の調整が終わりました!
少しくらいの変更なら、Unityプロジェクト内のFBXファイルを「上書きコピー」するだけで良いんですが、今回はかなり修正しましたので、スカートのMesh Clothを入れ直していきます。
Mesh Clothを設定する
やることは同じです。
2回目なので、操作に迷う事もありません。
・Veltex: 3091
・Line: 0
・Triangle: 6089
・Bone: 12
ボーン数が12に減ったのは良いんですが、12ってどこのボーンでしょうか。。。
気にしないことにしましょう。
頂点をばっさり減らしていきます。
足にコライダーを入れます。
今回は、スカートの固定ポイントは「2列」にしてみました。
追加で、腰専用のコライダーを入れてます。
これまでに入れたコライダーです。
前髪にも「Mesh Cloth」を入れて見る
Mesh Clothはメッシュを動かしますので、ボーンを入れてない箇所でも動かすことができます。
スカートのついでに、前髪と髪飾りにも入れておきましょう。
「赤色のポイント」を設定し忘れると、こんなことになるので注意です。
ボーンを設定しなくて良いのは楽ですね。
(5) ツインテールに「Bone Cloth」を入れる
ツインテールには既にボーンを入れてますので、「Bone Cloth」が使えます。
セットアップ方法は「BoneClothスタートガイド」に詳しく書いてあります。使い方は「Mesh Cloth」とほぼ同じですよ。
ツインテールのボーンはどこが良い?
ガイドには「最初に動かすべきボーンの構造から根元となるTransformを確認しておきます」と書いてありました。
「ツインテールの根本のボーン」となると、この3Dモデルの場合、「Head_L」と「Head_R」でしょうか?
Blender側で適当に入れたボーンなので、どうなるかは動かしてみないと分かりません。
まずは、プリセットには「BoneCloth_LongHair」を使ってみました。
挙動がイメージと違う
Unityで動かしてみましたが、なんか挙動がイメージと違います。
「ツインテールの根本」ではなく、「根本から少し離れたところ」から揺れてる感じです。
「赤いポイント」を一つ下にずらしても変わりません。
Blender側でボーンを増やす
いろいろと試した結果、ツインテールの根本から「少し角度を付けたボーン」を追加するとイメージ通りになりました。
ポイント設定はこんな感じです。
プリセットも「BoneCloth_LongHair_Soft」に変更しました。ツインテールは根本で縛っているので、挙動的にこちらの方が良かったのかも知れません。
頭にもコライダーを付ける
動作確認している時、ツインテールが頭を突き抜けてたので、コライダーを追加しておきます。
頭のコライダーは突き抜け防止だけでなく、ツインテールの形を調整する目的もあります。
試しにコライダーオフにしてみます。
ツインテールが下がり過ぎてますね。
オンにすると、ボリューム感でました。
(6) 動画で動作確認してみる
これで全ての設定が完了しました。
Unityちゃんの「UnityChanActionCheck」アニメーションを使って、動作確認してみました。動画はすべて、Oculus Mirrorのプレビュー画面を動画キャプチャーしてます。
一通りの調整後
Blender側でボーンやウェイト調整が一通り終わった後の状態です。
体をねじっても、スカートの吊りスカートが追随してます。かなり調整に時間がかかりました。
キックする動作
キック(回転蹴り)の動作です。
かなり足が激しく動いてますが、スカートを突き抜けているようには見えません。
しかもスカートの動きは自然でなめらか。素晴らしい!
ツインテールの動き
キックしてる時のツインテールの動きです。
振り回されてますが、キックが終わるとちゃんと元の位置に戻ってくれます。
走る動作
走る動作です。
両足がスカートを突き抜けることなく、動作しています。
まとめ
Unityのアセット「MagicaCloth(マギカクロス)」を使って、スカートや髪の毛を動かすことができました。
想像以上の挙動だったので正直感動しました!
プリセット設定でこれだけ動作できてますので、パラメータを調整すればもっと挙動が良くなるかも知れませんね。また試してみたいと思います。
コメント
トラックバックは利用できません。
コメント (0)
この記事へのコメントはありません。