BoneSpringの使い方

はじめに


ここではBoneSpringの使い方について説明していきます。
このガイドはBoneClothの使い方の続きとなります。
そのためすでに説明された項目は省略して進めますので、このガイドの前にBoneClothの使い方を読むようにしてください。

BoneSpringとは?


BoneSpringはTransformに対してスプリングによる揺れの機能を提供します。
これはキャラクターの胸の揺れなどに最適です。
機能が単純なため処理負荷が低いのも利点です。

BoneSpringの導入


それではBoneSpringを導入していきましょう。
ここではサンプルにあるUnityChanKAGURAの胸揺れを例にセットアップを解説します。

まずBoneClothと同じくHierarchyの右クリックメニューからMagicaClothコンポーネントを追加します。

そしてClothTypeを[Bone Spring]に変更してください。
これでBoneSpringを利用する準備が整いました。

Transformの登録


最初にシミュレーション対象となるTransformを登録する必要があります。
KAGURAでは胸のTransformとして始点と終点のペアが左右にあり、合計4つのTransformの構成となっています。

BoneSpringにはこのうち階層の起点となるTransformを登録する必要があります。
KAGURAでは[DB_Bust_01_L][DB_Bust_01_R]の2つのTransformになります。
この2つのTransformをRootBonesに追加してください。

起点のTransformを登録すると、その子のTransformもすべて自動的に登録されます。
この時点でSceneビューには次のようにギズモが可視化されます。

BoneClothと同じくRootBonesに登録されたTransformが赤の固定属性に、それ以外は白の移動属性に自動的に割り当てられます。

この設定は頂点ペイントを行うことで変更することも可能です。
頂点ペイントは緑のペンマークから利用できます。

スプリングと振り子


パラメータを設定する前にBoneSpringの重要な概念を説明します。
それはスプリングと振り子の関係です。
まず最も重要となるスプリングの機能は固定属性の頂点のみでしか機能しません。
つまりギズモの赤いTransformだけです。

BoneCloth/MeshClothの固定頂点は原点から移動しませんが、BoneSpringでは揺らすことができます。

そして固定頂点から接続される白いギズモの移動頂点にはスプリングの効果は働きません。
その代わり移動頂点には振り子としての重要な役割があります。
これは下の動画のように動きにより移動頂点が揺さぶられ、そのゆらぎにより固定頂点が回転するという仕組みです。

逆に言うと振り子がない場合は固定頂点は回転しなくなります。
そのため、ゆらぎ用の移動頂点があったほうが動きがより自然に見える場合があります。

サンプルのUnityChanKAGURAではスプリング用に固定属性頂点が2つ、そしてそこから伸びる振り子用に2つの移動属性頂点が設定されています。

プリセット


後はパラメータを設定して動きを調整していくことになります。
ただこの作業はある程度の慣れが必要なため、まずはプリセットを使い簡単にセットアップしてみましょう。
プリセットはパラメータ設定をファイル化したものです。
MagicaClothには予めBoneSpring用に3つのプリセットが用意されています。

  • SoftSpring
  • MiddleSpring
  • HardSpring

プリセットを利用することで用途に合わせた動きをある程度簡単にセットアップできます。
プリセットは[Preset]ドロップダウンメニューから簡単に追加可能です。

まずは[MiddleSpring]を設定してみましょう。
これで中強度のスプリングパラメータが展開されました。

動作確認


設定が終われば実行して確認してみましょう!
実行中にキャラクターを動かして胸が揺れていれば成功です!
あとは実際に動作させながらパラメータを調整し、理想の動きに近づけていきましょう。

パラメータ設定


理想の動きに近づけるにはパラメータの理解が不可欠です。
ここでは各パラメータがBoneSpringに与える影響を解説します。

スプリング

固定頂点のスプリングの動きを制御します。
[Spring Power]でスプリングの強さを設定できます。
[Limit Distance]は原点から移動できる最大移動範囲です。
移動範囲は[Normal Limit Ratio]により頂点の法線方向に対してさらに制限可能です。
これにより移動範囲を楕円にできます。
頂点の法線方向は次のパラメータで変更可能です。

また[Spring Noise]により複数のスプリングをノイズにより非同期にさせることもできます。
スプリングパラメータの詳細についてはSpringを参照してください。

振り子

移動頂点である振り子部分の振る舞いは[Angle Restoratio]と[Angle Limit]の2つのパネルで制御します。
振り子部分の復元力や角度制限を設定できます。
この2つのパネルについてはこれまでのBoneCloth/MeshClothと動作は同じです。
詳細についてはAngleRestorationAngleLimitを参照してください。

抵抗力

[Damping]を上げることで頂点の抵抗力が増しブレーキがかかるようになります。
このパラメータを上げることでスプリングや振り子の振動を早く収束させることが可能です。

慣性

慣性パネルはBoneSpringにおいても重要な働きをします。
キャラクターの動作により揺れが大きすぎる場合は、慣性パラメータを下げて動きの影響を軽減させることも大切です。
詳細はInertiaを参照してください。

衝突判定

BoneCloth/MeshClothと違いBoneSpringでは基本的に頂点は衝突判定を受けません。
もし頂点に衝突判定を追加したい場合は、別途[Collision Bones]に対象となるTransformを登録する必要があります。
TransformはRootBones以下の階層に存在する必要があります。

登録するとギズモが塗りつぶされた球形に変化し、コライダーによる衝突判定を行うことができます。

また、BoneSpringの衝突判定は特殊で原点から移動できる距離が制限されます。
これは[Limit Distance]で調整可能です。
そして距離に応じてコライダーへの反発力が自動的に減少するようになります。

BoneSpringは風の影響を受けます。
風の影響を減らしたい場合は[Influence]を下げてください。
詳細はWindを参照してください。

回転制御

固定頂点と移動頂点の各Transformが最終的にどの方向に回転させるかを制御できます。
この2つはBoneSpringにおいてとても重要です。
詳細はRotationControlを参照してください。

機能制限


BoneSpringはスプリングの動作を除けばこれまでのBoneCloth/MeshClothと同じですが、一部の機能が制限されています。
また、一部のパラメータは隠蔽され自動的に値が設定されるようになっています。

  • Transformの接続はLineに固定されます
  • 重力は自動的に無効化されます
  • カスタムスキニングの機能は利用できません
  • バックストップの機能は利用できません
  • セルフコリジョンの機能は利用できません
  • コライダーコリジョンはPointモードに固定されます
  • Transformは基本的に衝突判定が無効となります
  • 衝突判定を行いたいTransformは別途登録する必要があります。
  • 形状復元のパラメータは隠蔽されBoneSpring用に自動設定されます