Meshを直接操作するMesh Cloth
MeshClothの特徴はMeshの頂点をそのままクロスシミュレーションできる点です。
これはSkinningMeshにも適用可能です。
MeshClothはスカートなどの複雑な動きと衝突判定をシミュレーションする場合に最適です。
ただしメッシュの頂点単位の制御と結果をスキニングメッシュに書き戻すなどの処理が発生するため、その分計算負荷は高くなります。
またMeshClothにはメッシュを変形させるデフォーマ(Deformer)と呼ばれるものが必要となります。
従ってMeshClothを構築する前には、まずDeformerの設定を行う必要があります。
モデルインポータの設定
設定前に使用するモデルのインポート設定を確認する必要がります。
次の設定が有効になっている必要があります。
項目 | 説明 |
Read/Write Enabled | メッシュへの読み書きを許可します。 ONになっている必要があります。 |
Render Deformerのセットアップ
まず最初にMeshClothを適用するRendererにレンダーデフォーマ(RenderDeformer)をセットアップする必要があります。
RenderDeformerはRendererにアタッチされているメッシュを自在に変形させる機能をもっています。
それではUnityちゃんモデルを例としてデフォーマの設定を行ってみます。
今回はUnityちゃんのスカート部分を揺らしたいので、モデルから揺らしたい箇所のレンダラーを選びます。(赤範囲)
レンダーデフォーマを適用するレンダラーは次の3つとなりました。
この3つのRenderer(MeshRenderer / Skinned Mesh Renderer)にMagica Render Deformerをアタッチします。
各レンダラーのインスペクタを開き、[Add Comonent]ボタンを押します。
検索キーに[magica]を入力するとMagicaClothのコンポーネント一覧が表示されますので、そこからMagica Render Deformerをアタッチしてください。
他のコンポーネントと違い、Render Deformerはアタッチと同時に自動でデータを作成するため、別途[Create]ボタンを押す必要はありません。
この作業をすべてのレンダラーに対して行えばRender Deformerのセットアップは完了です。
Virtual Deformerのセットアップ
次に複数のRender Deformerを1つの仮想メッシュとして制御するバーチャルデフォーマー(Virtual Deformer)を設定します。
バーチャルデフォーマはレンダーデフォーマを結合し頂点削減(リダクション)を行い、高ポリゴンのメッシュを低ポリゴンに変換する機能を持っています。
仮想メッシュはUnityのMeshコンポーネントを持たない、メモリ上のみのメッシュとして扱われます。
そしてMeshClothはこのバーチャルデフォーマの頂点を制御することで実行されるため、リダクションされたある程度少ない頂点数のクロスシミュレーションでハイポリゴンのメッシュを制御することが可能となります。
仮想メッシュはあくまでクロスシミュレーション用のメッシュとなるため、実際のメッシュがリダクションされる訳ではありません。
まずVirtual Deformerオブジェクトを作成します。
Hieraruchyウインドウで「右クリック」し、メニューから以下のように「Magica Virtual Deformer」を選択してください。
Virtual Deformerオブジェクトが生成されます。
インスペクタからVirtualDeformerの設定が行えます。
まず結合するRenderDeformerを登録します。
先程アタッチした[button][Shirts][uwagi]のRenderDeformerをRender Deformer Listへ登録してください。
次にリダクション(頂点削減)の設定を行いますが、まずは確認のため一度[Create]ボタンを押してデータを作成してみましょう。
[Create]が完了したらSceneビューを見てください。
仮想メッシュのポリゴン形状が紫のラインで描かれています。
(※ワイヤーフレーム表示にすると確認が容易です)
初期状態ではほとんどリダクションされないため、このように仮想メッシュも高ポリゴンとなっています。
このままでは負荷が高く、またパーティクルが細かすぎてシミュレーションが安定しないため、ある程度のポリゴン数になるまでパラメータを調整してリダクションしていきましょう。
リダクションには次の2つのパラメータを調整します。
項目 | 説明 |
Merge Vertex Distance | メッシュの連結を無視してこの距離に設定された範囲内の頂点を結合させます。 |
Merge Triangle Distance | メッシュの連結を考慮してこの距離に設定された範囲内の頂点を結合させます。 メッシュの形状をあまり変えたくない場合に有効です。 |
この数値は扱うメッシュとクロスの動きを見ながら状況に応じて調整する必要があります。
今回は[Merge Vertex Distance]を0.0273(m)に設定して作成してみます。
結果として頂点が大幅に削減された次の仮想メッシュが作成されました。
仮想メッシュが低ポリゴンとなっても、実際のメッシュ頂点へは逆スキニングにより滑らかに補間されるため、見た目の違和感はほとんどありません。
この仮想メッシュの頂点に対してMeshClothを適用していきます。
調整の目安としては次のポイントがあげられます。
- ポリゴン数が少ないほど負荷は軽減されます
- ポリゴン数が少ないほうがクロスシミュレーションが安定します
Mesh Clothのセットアップ
ここまでくれば後はBoneClothの設定と大差ありません。
キャラクタにMeshClothを追加します。
Hierarchyウインドウで「右クリック」し、メニューから以下のうように「Magica Mesh Cloth」を選択してください。
MeshClothオブジェクトが生成されます。
インスペクタもBoneClothとほとんど同じです。
[Traignel Bend]の項目が追加されている程度です。
まず動作させるVirtualDeformerを設定してください。
次にBoneClothと同じく仮想メッシュ内のどの頂点を移動させ、どの頂点を固定させるかをエディットする必要があります。
[Start Point Selection]ボタンを押してエディットモードに入ります。
(※エディットモードについては「BoneClothスタートガイド」を参照してください)
BoneClothと同じようにSceneビュー内で固定パーティクルと移動パーティクルをマウスの「左ドラッグ」により設定していきます。
注意としては移動パーティクルは必ず連結する固定パーティクルが必要なことです。
ただこの連結は自動で行われるため、実際には移動させないパーティクルを「固定」としてマークしておけば問題ありません。
そして、クロスシミュレーションとして本当に不要なパーティクルは無効[Invalid]としてマークしてください。
こうすることでパーティクル計算から除外され負荷が下がります。
Unityちゃんのスカートにおいては最終的に次のような設定となりました。
クロスの振る舞いを制御するパラメータの設定を行います。
まずはプリセットを読み込み簡単にセットアップしてみましょう。
[Parameters]の右にある[Preset]ボタンを押します。
Presetボタンはv1.8.4から実装されたため、もしPresetボタンが無い場合は右にある[Load]ボタンを押し、MagicaCloth/Presetフォルダから[MeshCloth_Skirt.json]を読み込んでください。
これでスカートの大体のパラメータが設定されました。
(※実際には利用するモデル形状に合わせて調整が必要です)
以上で一連の設定が完了したので[Create]ボタンを押してデータを作成します。
問題がなければMeshClothのステータスアイコンが「白」に変わり、クロス情報が表示されます。
実際にUnityを実行してテストしてみましょう。
Unityちゃんのスカートが本体の移動(アニメーションなど)に連動して物理制御されていれば成功です。
当たり判定(Collider)を設定する
スカートは動きましたがまだ当たり判定が無いため、スカートが体を突き抜けてしまいます。
BoneClothと同じくColliderを設定することでパーティクルの侵入を防ぐことができます。
Colliderの設定はBoneClothの場合と全く同じですので、設定方法は「BoneClothスタートガイド」を参照してください。
Unityちゃんでは最終的に次のようにColliderを設定しました。
Colliderは他のクロスコンポーネントと重複設定しても問題ありません。
各パーティクルの当たり判定の半径を調整します。
MeshClothオブジェクトをHierarchyで選択すると、シーンビューにパーティクルが黄色(固定)、白(移動)として表示されています。
このときの球の大きさが各パーティクルの当たり判定サイズとなります。
BoneClothと同じくパラメータの[Radius]パネルのRadiusカーブのスライダーを動かして当たり判定球のサイズを調整します。
※ギズモが見ずらい場合はクロスモニターを使い、不要なギズモを非表示にすると見やすくなります
最後にBoneClothと同じように[Collision]パネルにチェックを入れることを忘れないようにしてください。
最後に[Create]ボタンを押してデータを更新することを忘れないようにしてください。
Unityを実行させ確認してみましょう。
今度はスカートが足を突き抜けずに衝突するようになったはずです。
以上でMeshClothのセットアップは完了です。