パラメータの設定

はじめに


理想的な動きを実現する為にはパラメータの調整が欠かせません。
ここではパラメータに深く関係するベースラインの概念と各パラメータの役割について解説します。

ベースラインを理解する


パラメータを設定する上で理解する必要があるのがベースラインの概念です。
ベースラインはプロキシメッシュの固定頂点を始点とし、サーフェスの接続に沿って末端の移動頂点までの経路です。

例えば次のようなTransformの階層構造があるとします。

この構造の[Fixed]ボーンを起点としてBoneClothを作成すると、次のようにベースラインが割り当てられます。

このラインはギズモの[Base Line]にチェックを入れることで確認が可能です。

MagicaClothではこのベースラインに沿って形状の復元が行われます。
これにより物理的にリアルな動きを残しつつ、さらに2D的な動きを組み合わせる2.5D的な挙動を実現しています。

始点と終点と深さ

ベースラインには始点(Start Point)と終点(End Point)、それに深さ(Depth)の情報が入っています。
これはギズモ設定の[Base Line]と[Depth]をONにすることで確認できます。
先程のTransform構造を例に見てみましょう。
白い数字は深さを表し始点が(0.0)、終点が(1.0)となり各頂点がどの深さに該当するか確認できます。
この深さの数値がパラメータ設定に欠かせない指標となります。

深さはプロキシメッシュ内で最も長いベースラインの終点が(1.0)になるように自動で割り振られます。

Bone Clothでのベースライン

BoneClothではベースラインは単純にTransformのツリー構造から構築されます。
そのためTransform階層と同じです。

Mesh Clothでのベースライン

MeshClothではやや複雑でベースラインは固定頂点を中心にサーフェスの接続に従い自動的に計算されます。
例えばKAGURAのスカートでは次のようにベースラインが自動形成されます。

MeshClothのベースラインはサーフェスの接続状態や固定頂点の分布により様々に変化することを覚えておいてください。

深さとパラメータの関係


前述の通りベースラインが作成されると各頂点に深さが設定されます。
この頂点の深さがパラメータ調整時の重要な指標になります。
MagicaClothでは多くのパラメータがこの深さに基づいて数値を決定するようになっています。

一例として角度の制限を行うAngle Limitの動きを見てみましょう。
Angle Limitはベースラインのエッジが折れ曲がることができる角度を制限します。
このAngle Limitの設定パネルは次のようになっています。

現在はカーブ設定がOFFになっているため深さに関係なく一律で60度が設定されています。
ここで右にある[C]を押してみましょう。

そうするとインスペクターが拡張されカーブが設定できるようになります。
この操作により各頂点の深さにより別々の制限角度を設定できるようになります。
設定されているカーブの中身を見てみましょう。

これは横軸が深さ(0.0~1.0)、縦軸がパラメータの強さ(0.0~1.0)になっています。

深さ(0.0)のときは強さが0.2なので制限角度は60x0.2=12度になります。
深さ(0.5)では強さが0.6なので制限角度は60 x 0.6 =36度になります。
深さ(1.0)では強さが1.0なので制限角度は60 x 1.0 = 60度になります。

これを先程のBoneClothの深さの図と組み合わせてみてください。
頂点の深さ(0.0~1.0)がそのままカーブの横軸に対応します。
各頂点が受ける制限角度がどのように決定されるか理解できると思います。

このようにカーブパラメータは深さと連動して最終値が計算される仕組みになっています。
これが深さとパラメータの関係です。
[C]ボタンが付いたパラメータはすべてこれに該当することを覚えておいてください。

パラメータの種類


ここでは実際にどういったパラメータが存在するのかを種類別に紹介します。
パラメータの1つ1つの機能を詳細に説明するとページの量が膨大になってしまうため、ここではパラメータの概要と設定の目安に解説を絞ります。
パラメータの詳細については別途コンポーネントリファレンスを参照してください。

Force

[力の制御]
重力(Gravity)や空気抵抗(Damping)などの力を制御します。
重力はある程度入れたほうがリアルな動きになります。
空気抵抗を下げると頂点はなかなか静止しなくなります。
逆に空気抵抗を上げると頂点はゆったりとした動きになります。

Gravity Falloffはクロスの向きにより重力の影響を削減します。
例えばFalloffが1.0ならばクロスが初期姿勢と同じ角度ならば重力が一切かからなくなります。

Angle Restoration

[角度復元]
ベースラインの各エッジを本来の姿勢に戻すように回転させます。
このAngle Restorationが動きを制御する上でもっとも重要なパラメータとなります。
動きの大部分がここで決定されると言っても過言ではありません。

Stiffnessは1回で補正する回転角度の量です。
Stiffnessを上げると復元が早くなります。

Velocity Attenuationは復元時に頂点にかかる速度の減衰量です。
下げると加速が強くなりバネのように弾むようになります、逆に上げるとゆったりとした復元になります。

この2つのプロパティの調整はある程度の慣れと経験が必要となります。
最初はプリセットをロードしてその内容を真似てみると良いでしょう。

Angle Limit

[角度制限]
ベースラインの各エッジが本来の姿勢から曲がることができる角度を制限します。
前髪などのようにあまり曲がってほしくない場合に有効です。
またスカートなどでも形状を維持するためにある程度の角度制限を付けるのも良いでしょう。

Shape Restoration

[形状復元]
プロキシメッシュの形状を維持するために3つの動きを行います。

Distance

メッシュの伸びやすさ。
各頂点が接続する頂点との距離を一定に保つ動きをします。
通常は1.0のままで問題ありません。

ただ回転するスカートのように外側が多少伸びた方が見栄えが良くなる場合は、カーブを使い終点付近の復元力を弱めるのも有効です。

Tether

頂点が自身のベースラインの始点に近づける距離を制限します。
設定できるのは縮小範囲のみです。
Compressionを下げると頂点は自身の始点に近づけなくなります。
逆に上げると頂点は自由に移動できるようになります。

値を下げるとメッシュの形状が変形しにくくなります。
これはクロスが極端に縮む現象を回避できます。
しかし移動の自由度が減るため場合によってはぎこちない動きになる場合もあります。
通常は0.8以上に設定し限定的に下げることをお勧めします。

Triangle Bending

メッシュの曲がりにくさ。
隣接するトライアングル同士を元の角度に戻す働きをします。
これはメッシュの形状を保つ重要な働きをします。
通常は1.0で問題ありません。
プロキシメッシュにトライアングルが存在しない場合は何もしません。

Inertia

[慣性]
ここではキャラクターの移動やアニメーションの動きが布に与える影響を制御できます。
例えばキャラクターが移動した際に布が予想外に大きく揺れる場合はパラメータを下げることでその影響を弱くすることが可能です。

慣性はキャラクターの移動に紐づくワールド慣性とキャラクターのアニメーションに紐づくローカル慣性に分かれており、それぞれ個別に影響範囲を設定可能です。

[自動テレポート判定]
またキャラクターのテレポートを自動的に判定してシミュレーションをリセットするかそのまま継続するかを選択できます。

慣性およびテレポートについての詳細な説明はInertiaのページを参照してください。

Movement Limit

[移動制限 (バックストップ)]
プロキシメッシュの頂点法線方向に対して頂点の動きを制限します。
これはバックストップとも呼ばれます。

仕組みについては上の図を見てください。
簡単に説明すると頂点はMaxDistanceの範囲内かつBackstopCollisionの外側でしか移動できなくなります。

例えばTシャツなどで頂点法線がすべて人体の外側を向いているとします。
ここでバックストップの機能を使い法線の逆方向に頂点が一定距離以上侵入できないように制限します。
これにより衝突コライダーを使用しなくともTシャツが人体に食い込むのを防止できます。
同じ原理で前髪などが頭の内側に食い込むのを簡単に防止することも可能です。

重要なのはプロキシメッシュの頂点法線で計算されることです。
レンダーメッシュの頂点法線は一切関係しないことを覚えておいてください。
また制限の基準となる頂点の位置と法線はシミュレーション前のスキニングされたプロキシメッシュの姿勢から取得されます。
そしてプロキシメッシュの法線は調整することも可能です。

バックストップの説明は少し長くなるため、詳細はバックストップの解説ページを参照してください。

Collider Collision

[コライダー衝突判定]
クロスが人体などに侵入できないように球やカプセルなどのコライダーを使い制限を行う最も多用する衝突制御です。
コライダー衝突判定については衝突判定の設定で詳しく説明していますのでそちらを参照してください。

Self Collision

🚧ベータ版🚧

[セルフコリジョン+相互衝突]
ここではクロスが自身に食い込むのを防止するためのセルフコリジョンと、クロスが他のクロスに食い込むのを防止するための相互衝突を設定できます。

セルフコリジョンを利用すると画像のようにクロスがクロス自身と相互衝突するようになります。
ただセルフコリジョンは大量の衝突計算が必要なため大変負荷が高くなります。
そのためデスクトップPCやハイエンドコンソール機での使用が推奨されます。

また現在セルフコリジョンは実験的機能、つまりベータ版であることに留意してください。
そのため今後挙動や設定が変更される可能性があります。
セルフコリジョンについての詳細は専用ページを参照してください。

Spring

[スプリング]
固定属性頂点に対してスプリングの効果を与えます。
これはキャラクターの胸揺れなどに最適です。
スプリングパネルはBoneSpringのみで利用可能です。

調整のヒント


さて、ここまで各パラメータの役割について解説してきました。
あとは試行錯誤を繰り返して理想の動きに近づけるだけです。
とは言えこの作業はとても大変であるため幾つか調整のヒントを載せておきたいと思います。

重要なパラメータを先に調整する

パラメータの数は多いですが実際に動きを決定づける項目は僅かです。
まずはこれらを中心に調整してみてください。

Force  重力と空気抵抗
これは頂点の動きに大きく関係します。
Angle Restoration 回転復元
全体の動きを決定づける最も重要なパラメータです。
まずはここから調整すると良いでしょう。
Inertia キャラクターが走ったりジャンプしたりした場合にクロスが動きすぎる場合はここを調整します。
実行中にも調整可能

パラメータは実行中にもインスペクターから調整が可能です。
実際のゲームプレイを行いながら調整することで試行錯誤が楽になります。

プリセットを活用する

プリセットはパラメータ設定の近道です。
まずはプリセットをロードして理想の動きに近いか確認してみましょう。
理想の動きに近いプリセットがあれば、そこから独自にパラメータを調整していくことで時間を短縮できます。

プリセットの保存

パラメータはオリジナルのプリセットとして簡単に保存ができます。

苦労して調整したパラメータはプリセットとして保存しましょう。
保存したプリセットはPresetボタンから簡単にセットアップ可能です。
こうすることで同じような動きを設定する場合に大幅に作業を短縮できます。
プリセットの保存は実行中にも利用できます。

コンポーネントのコピーを活用する

調整時に苦労するのが実行中に調整したインスペクターの内容が実行を終了するとすべて元に戻ってしまうことです。
これを回避するためにコンポーネントのコピー機能を活用しましょう!
これは実行中にコンポーネントの「︙」ボタンを押すことでインスペクターの内容をコピーできる機能です。

実行中にパラメータの調整がうまくいったらこの機能で内容をコピーしましょう。
そして実行終了後に同じくコンポーネントの「︙」メニューからペーストを選択します。

この操作により実行中のパラメータを停止後のインスペクターに復帰させることが可能です。

この次は?


ここまでMagicaClothの基本的なセットアップについて解説しました。
これらを応用することで、もう大部分のクロスはセットアップが可能です。
そのためあまり複雑な事をしないのであれば、これ以上のガイドを読み進める必要はありません。

しかしバックストップやセルフコリジョンの設定など、まだ詳しく説明していない機能が幾つかあります。
それらの詳細を知りたい場合は引き続き他のガイドを読み進めてください。