バックストップ

はじめに


バックストップとは頂点の法線方向を基準に侵入できる距離を制限する衝突判定の一種です。
これを利用すれば前髪などが頭に侵入するのを簡単に防ぐことができます。
またTシャツなどが人体に侵入するのを防ぐこともできます。
仕組みが簡単で処理負荷も低く、かつ人体への侵入を強力に防止できるシステムです。

バックストップは[Movement Limit]パネルにより設定します。

このガイドでは最初にバックストップの原理を説明し、次に前髪とスカートの2つの例を元にその使い方を解説していきます。

仕組み


バックストップの原理は簡単です。
プロキシメッシュの各頂点について法線方向を基準に移動できる範囲を制限します。

上図は設定プロパティとその制限範囲です。
プロキシメッシュの頂点と法線は現在の移動位置ではなくアニメーション姿勢、つまり原点を示しています。
まず頂点は原点を中心としたMax Distanceの半径を持つ球の内部でしか移動できません。
これが制限の1つ目です。

次に頂点は原点法線の逆方向に対してBackstop Distance離れたBackstop Radiusの半径を持つBackstop Collision球の外側でしか移動できません。
これが制限の2つ目です。

この2つの制限により頂点はMax Distanceの範囲内かつBackstop Collisionの外側でしか移動できなくなります。
この制限は両方使うこともどちらか片側だけ使うこともできます。

前髪の設定例


では具体的に前髪を例に解説します。
バックストップを利用して前髪が頭に侵入できないように設定していきます。

前髪には予めBoneClothを設定して揺れるようにしてあります。

法線方向の確認

最初に現在のプロキシメッシュの法線方向がどうなっているのか確認してみましょう。
これはギズモパネルのAxisをNormalにすることで表示されるようになります。

緑のラインが法線方向です。
視認性のため頂点球は非表示にしました。

BoneClothでは単純にTransformのY軸が使われるのでこのモデルではめちゃくちゃな方向になっています。
この状態ではバックストップは利用できません。

法線方向の調整

法線方向を調整してみましょう。
理想なのはすべての法線が頭の外側を向くことです。
調整はNormal AxisとNormal Alignmentプロパティで行います。

Normal AlignmentをTransformに設定します。

そして頭の中心のTransformを登録します。
頭の中心にTransformがない場合は新しいGameObjectを作成してそれを登録すると良いでしょう。

Transformモードでは指定したTransformの座標から放射状に法線を変更します。
この変更はプロキシメッシュに対して行われるので元のTransfromやMeshには影響しません。
結果として次のようになりました。

法線がすべて頭の外側を向きバックストップを設定する準備が整いました。

バックストップ設定

あとは侵入できる距離を設定するだけです。
今回は次のようにしました。

カーブを使い始点から終点にかけて0cmから5cmほど侵入できるようにしてあります。
Max Distanceは今回は利用しませんでした。
Stiffnessは反発の強さです。
値を下げることで頂点が少し柔らかく戻るようになります。

完成

実行してみましょう!

※キャラクターを左右に動かしています。
コライダーを使用しなくとも髪が頭に侵入するのを防止できました。

スカートの設定例


ここではスカートを例により高度なバックストップの設定を解説します。
バックストップは主に人体に頂点が侵入することを防止します。
しかし人体は常にアニメーションしており姿勢も様々に変化します。
このため前述した前髪のように単純ではなくなります。

アニメーション姿勢の重要性

ここで重要となるのがアニメーション姿勢です。
これはMagicaClothを利用しない状態でTransformもしくはMeshがアニメーションに対して変形する姿勢です。

例えば次のキャラクターはスカートが左右の脚に対してスキニングされています。
そのため、スカートが脚に追従してアニメーションします。
これが理想であり、この場合はバックストップを設定できます。

しかし次のキャラクターはスカートが脚に対してスキニングされていません。
そのためアニメーションを行うと脚がスカートを素通りしてしまいます。
この状態ではバックストップは設定できません。

バックストップはアニメーション姿勢に対して制限を行います。
そのため下のような状態ではバックストップが正しく機能しません。
バックストップを機能させるためにはアニメーションに対してTransformもしくはMeshが追従していることが重要です。

アニメーション姿勢の調整

前述の問題を解決する一番の方法はMeshが脚に対して追従するようにスキニングウエイトを設定することです。
もしくはスカートにボーンを追加し走る、ジャンプ、攻撃などの行動ごとにボーンをアニメーション制御してある程度の姿勢制御を行うことです。
これは通常Blenderなどの外部ツールによってアーティストが行います。

このアーティストが作成したアニメーション姿勢の上にクロスシミュレーションを重ねる方式が人体に対しての侵入防止が最も堅牢になります。
この方法が推奨されます。

もしこの方式が取れない場合は代替案として後述するカスタムスキニング機能を利用することもできます。

アニメーション姿勢の確認

現在のアニメーション姿勢がどのような状態なのかギズモにより表示できます。
次のようにアニメーション姿勢のチェックをONにすることで確認可能です。

例えばサンプルに含まれているUnityChanKAGURAのスカートは脚に対してスキニングされていません。
ギズモによりそれが確認できます。

カスタムスキニングの利用

何らかの理由でアーティストによる修正方法が取れない場合は、その代替案としてカスタムスキニングの機能があります。
これは指定したボーンに対してプロキシメッシュを自動スキニングする機能です。
すでにアニメーション姿勢が正しく設定されている場合は不要です。

Custom SkinningパネルのチェックをONにし、Skinning Bonesにスキニングに必要なボーンを登録します。
KAGURAのスカートでは次のように胸から両足にかけてのボーンを登録しました。

この登録ボーンはギズモにより黄色の球で確認できます。

この状態で実行してみましょう。
カスタムスキニングによりプロキシメッシュが脚に追従するようになりました。

これによりバックストップが機能するようになります。
カスタムスキニングはBoneClothでも利用可能です。

ただし、カスタムスキニングはあくまで代替機能であることを忘れないでください。
そのためあまり精度が高くありません。

有効頂点のペイント

バックストップは頂点ごとに機能の有無を設定できます。
これにはパネルにある青いペンマークから頂点ペイントを起動して行います。

 

メッシュの特定部分にはバックストップを機能させたくない場合などに利用できます。

バックストップの設定

ここまでくれば後は前髪の例と同じくバックストップの設定をするだけです。
今回はKAGURAのスカートに対してカスタムスキニングを設定した状態で行います。
効果をわかり易くするため侵入禁止距離を0cmにしました。

完成

実行してみましょう!

これはコライダー衝突を一切使用しないバックストップだけの制御です。
脚の動きに対してバックストップの制限がかかり頂点が脚に侵入することが防げていることがわかると思います。
また、腰まわりに頂点が侵入していない点にも注目してください。

この状態でコライダーを追加し補強することで、どんなに激しく動いてもスカートが脚を貫通しないように制御できます。

アニメーション姿勢割合


この項目はバックストップには直接関係しませんが、揺れの制御に重要なので解説しておきます。

これまでアニメーション姿勢について解説してきました。
MagicaClothは内部で初期状態の姿勢とアニメーション姿勢の両方を保持しています。
この内バックストップは常にアニメーション姿勢から計算されます。

しかし一部の制約は初期姿勢とアニメーション姿勢のどちらを元に復元を行うか指定することができます。
これがアニメーション姿勢割合です。
これは基本パネルにある Animation Pose Ratioから行います。

この値が1.0に近いほどアニメーション姿勢を元に復元が計算されます。
初期値は0.0で初期姿勢から復元が計算されます。
つまり初期姿勢と現在のアニメーション姿勢のどちらを目標に復元を行うかの割合です。

割合が0.0なら初期姿勢に戻るように復元力が発生します。
割合が1.0なら現在のアニメーション姿勢に戻るように復元力が発生します。
割合が0.5なら両方の姿勢が1:1でブレンドされます。

影響する制約

このアニメーション姿勢割合により影響を受ける制約は次の3つです。

  1. Angle Restoration
  2. Angle Limit
  3. Shape Restoration
設定の目安

基本的には0.0のままで問題ありません。
これはだいたいのケースにおいてその方がクロスの動きが安定するからです。

しかし、アニメーション姿勢が大きく変形する場合は割合を上げたほうが安定する場合もあります。
また、アニメーション姿勢が完全にアーティストによりコントロールされている場合は値を上げたほうが安定します。
その場合は0.5程度の設定から動きを見ながら調整してみてください。