Contents
はじめに
ここではキャラクターの衣服をシミュレーションする場合に欠かすことのできない人体との衝突判定について解説します。
衝突判定の設定はBoneClothとMeshClothで共通です。
衝突判定の種類
MagicaClothには4つの衝突制御の仕組みが備わっています。
コライダー衝突判定 | 球、カプセル、平面などのコライダーとの衝突判定。 最も多用する一般的な手法です。 本ページで解説します。 |
バックストップ | 頂点法線の方向に対して浸透できる距離と半径を設定することにより人体へのクロスの侵入を防ぐ方式。 |
セルフコリジョン | 自己衝突。 クロスがそれ自体に食い込むのを防止します。 |
相互衝突 | 相互衝突。 クロスが他のクロスに食い込むのを防止します。 |
このページではコライダー衝突判定についてのみ説明します。
それ以外の衝突判定については専用のガイドページを参照してください。
コライダー衝突の原理
コライダー衝突判定の原理は単純で、球やカプセルといったコライダーの形状に対して頂点が侵入しないように押し出しを行います。
このコライダーを人体の形状に合わせて配置することでクロスが侵入するのを防ぐ仕組みです。
コライダーのタイプ
コライダーには幾つかの形状が用意されています。
Sphere Collider
球形のコライダーです。
Capsule Collider
カプセル型のコライダーです。
始点と終点の半径と長さを変えることができます。
Plane Collider
平面コライダーです。
大きさは設定できません。
無限平面として扱われます。
衝突モード
コライダーに対してプロキシメッシュをどのように判定するかを選ぶことができます。
頂点球モード
プロキシメッシュの頂点を球として扱いコライダーと衝突判定を行います。
球のサイズは調整が可能です。
処理負荷が軽いため気にせず使える利点があります。
ただ、次のようにコライダーが小さい場合には球と球の間をすり抜けてしまう問題がありますので注意してください。
エッジモード
プロキシメッシュのエッジとコライダーの衝突判定を行うモードです。
エッジの厚みは調整が可能です。
エッジモードでは球モードにあったすり抜けの問題が発生しないという大きな利点があります。
ただし、球モードに比べて処理負荷が高いため慎重に使用してください。
頂点球モードで問題がある場合のみ利用を検討するのが良いでしょう。
コライダーの配置
それではKAGURAのスカートを例にコライダーを設定してみましょう。
スカートはすでにMeshCloth使い方によりセットアップが完了しているものとします。
スカートの場合に必要となるのは脚のコライダーと腰回りのコライダーです。
まず、左足のボーンを選択します。
KAGURAでは[CH_Thigh_L]になります。
次に右クリックメニューを開きCreate Other/Magica Cloth2/Magica Capsule Colliderを選択します。
次のようにCapsule Colliderコンポーネントが追加されました。
そしてシーンビューにギズモが表示されるようになります。
配置について重要な点は、コライダーのスケールがXYZ軸で一様である必要があることです。
これはローカルスケールではなく、親を含めたグローバルなスケールです。
スケールが不一様の場合は、正しく衝突判定が行われなくなるので注意してください。
カプセルコライダーのインスペクターを使い位置と大きさを調整します。
カプセルコライダーは方向と長さ、および始点と終点の半径を別々に設定可能です。
それぞれのパラメータを変更してみてください。
シーンビューのギズモがそれに合わせて変形するのが分かるはずです。
カプセルコライダーの始点と終点を別々の大きさにしたい場合は次のようにインスペクターの[S]ボタンを押してください。
これにより始点と終点の半径を個別に設定できるようになります。
またReverseDirectionにより方向を逆にしたり、AlignedOnCenterをOffにすることで中心を始点合わせにすることもできます。
これらのプロパティを使いコライダーを脚に合わせて調整してください。
調整するときはシーンビューをワイヤーフレームモードに変更すると視認性がよくなります。
また位置調整はCenterプロパティではなくコライダーのGameObjectを移動させたほうが楽な場合が多いです。
コライダーを調整して次のように配置します。
同じ要領でヒップにSphereColliderを追加しましょう。
腰ボーンの[CH_Hips]を選択し右クリックメニューからSphereColliderを選択してください。
Sphere Colliderが追加されます。
Sphere Colliderのプロパティは単純で半径のみです。
カプセルコライダーと同じように左のヒップラインに合わせて半径と位置を調整します。
この作業を右側に対しても行い、最終的に4つのコライダーを画像のように配置します。
左右対称(シンメトリー)機能
v2.15.0から左右対称(シンメトリー)機能が追加されました。
この機能を利用することで簡単に対称コライダーを設定できます。
例えば、次のように片側だけセットアップしたコライダーのSymmetryModeを”Automatic Human Body”に設定してみてください。
人体の構造に合わせて対称コライダーが自動で設定されます。
シンメトリーモード
シンメトリー機能にはいつくかモードがあります。
自動設定は便利ですが、いくつか使える条件があります。
自動設定ができない場合は手動で対称方法を選択する必要があります。
Automatic Human Body | 人体の構造に合わせてすべて自動で設定します。 ただし、キャラクターにAnimatorが存在し、HumanoidRigが設定されている必要があります。 またコライダーが人体の主要ボーンの直下に配置されている必要があります。 |
Automatic Target | 指定Transformの下に自動で対称コライダーを作成します。 |
X-Symmetry | 指定Transformの下にX軸を反転させたコライダーを作成します。 |
Y-Symmetry | 指定Transformの下にY軸を反転させたコライダーを作成します。 |
Z-Symmetry | 指定Transformの下にZ軸を反転させたコライダーを作成します。 |
XYZ-Symmetry | 指定Transformの下にXYZ軸を反転させたコライダーを作成します。 |
コライダーを登録する
最後に作成したコライダーをクロスコンポーネントに登録しましょう。
登録を行わないとコライダーは機能しませんので注意してください。
コライダーの登録はCollider Collisionパネルで行います。
Collider Listに生成したコライダーを登録してください。
これでコライダーの設定は完了です!
頂点半径と摩擦の設定
最後に前述した衝突モードとその厚み(Radius)、そして摩擦力(Friction)を設定します。
厚みはカーブを使いプロキシメッシュ頂点の深さに応じて半径を変化させることもできます。
Radiusスライドバーを操作してみてください。
シーンビューに設定した半径がリアルタイムに反映されるはずです。
このシーンビューを見ながら配置したコライダーに適した頂点球の大きさを調節してください。
今回は頂点球の大きさを一律0.02としました。
摩擦(friction)はコライダーと頂点が接触したときの滑りにくさです。
値を大きくすると滑りにくくなります。
動作確認
さあ、これですべての設定が完了しました!
実際に実行して動きを確認してみましょう。
次のように設定したコライダーとプロキシメッシュの頂点が衝突して突き抜けが防止できていれば成功です!
この次は?
これまでにBoneClothとMeshClothの使い方、そして衝突判定の設定方法を解説しました。
しかし理想の動きを行うにはあの数の多いパラメータを調整する必要があります。
次のパラメータの設定ガイドではそれらの仕組みについて説明していきます。