セットアップ例 - nozoxa/Hagoromo GitHub Wiki

Hagoromo Demo

 上記のデモにおける Hagoromo の設定例をいくつか簡単に説明します。

 セットアップを行った作者は プログラマ のため、話半分程度で参考にしていただければ幸いです。

 またセットアップの方法は無数にあり、説明するやり方は完璧ではありません。

 デモを作成した後に気が付いた設定の反省点についても、簡単に記載しています。


胸 :

 ▼ 使用したコンストレイント一覧

    ● Rigid Vertical Structure Constraint

    ● Relative Limit Angle Constraint

 ▼ Rigid Vertical Structure Constraint

    これはボーンの元の長さを必ず維持する拘束です。

    

    ノードの Use Rigid Vertical Structure Constraint にチェックを入れるだけで有効になります。

    胸の縮みを防止しています。

 ▼ Relative Limit Angle Constraint

    胸が揺れすぎないように角度制限をしています。

    

    上記のようなカーブで根本のボーンのみ回転するように抑制しています。( ボーン単位でパラメータを調整する方法 )

    ( 1 )1.0 を打ち、根本は最大で 16° 揺れます。

    ( 2 )0.0 を打ち、根本以降は回転しません。

    胸にはそれぞれ繋がった 2 つのボーンがありましたが、この設定により単体のボーンのように扱えています。

    わざわざこのようにしている理由は Hagoromo が単体のボーンを扱っていないことが理由です。

    単体骨はおそらく、まったく別のノードとして分けて実装したほうが

    扱い易く処理効率も良いと考えているからです。

    デモのために全て Hagoromo で揺れ物の設定を行いましたが、

    もしかしたら 単体骨 については別のプラグインが良いかもしれません。

     [ プログラマ向けの補足 ]

       Hagoromo のメリットは 2 つの胸( チェーン ) SIMD で並列に計算していることによるパフォーマンスです。

       デメリットは SIMD の計算を簡単にするためにチェーンにダミーボーンを挿入し、

       内部で 4 の倍数に調整しているため、メモリ効率が良くないことです。

       実装当初はダミーボーンを挿入しない実装も検討しましたが、 SIMD を使ったコードが

       実装者以外が理解できない保守性の低い品質になりそうなことが分かり、見送りました。

       この判断により現在は比較的読みやすいコードになっているかと思われます。

       そのため、コンストレイントの追加などプラグインの改造も行い易いはずです。


ポニーテール :

 ▼ 使用したコンストレイント一覧

    ● Anim Pose Limit Angle Constraint

 ▼ Anim Pose Limit Angle Constraint

    髪が極端に反転しないように 120° の角度制限のみ入れています。

    しかし今なら、 Relative Limit Angle Constraint で調整するかもしれません。

 ▼ 当たり判定について

   

    シンプルにスフィアで構成しました。

    少しでもリアルにしようと格好つけて平面コライダを利用しなかった結果、

    腕にスフィアのコライダを取り付け忘れてデモの一部で腕に髪が貫通しています。

    保険として 平面コライダ を追加しておけばよかったと少し悔やんでいます。

 ▼ パラメータの調整について

   

    Master Damping0.01 を入れて髪にかかる力を減衰させています。

    これによりフワフワとした印象を得ることに成功しました。

    Master Damping は重力にも影響を与えるため、上げすぎると無重力空間にいるような結果になります。

    この場合は値を下げるか、上げた分だけ重力の値も増やすことで良い感じに調整できる可能性があります。


前髪 :

 ▼ 使用したコンストレイント一覧

    ● Anim Pose Movable Radius Constraint

    ● Anim Pose Limit Angle Constraint

    ● Anim Pose Planar Constraint

 ▼ Anim Pose Movable Radius Constraint

   基本的な方針として前髪は大きくアニメーションポーズから反れないように調整しました。

   様々試しましたが、アイドルが前髪を固めているように、あまり変化しないほうが見映えが良いようでした。

   ただ、これはキャラクターの方向性にもよるかもしれません。

   キャラクターの性格が "はつらつ" としている場合は、シミュレーションでおでこを見せたほうが

   印象が良くなるかもしれません。

   

   また、アニメーションポーズに戻る速度は一律ではなく根本は素早く、

   毛先に行くほど遅延するように Damping をカーブで調整しています。

   これにより根元があまり動かず、毛先に行くほど動くようになるため、自然で良い感じの挙動が得られます。

 ▼ Anim Pose Limit Angle Constraint

   ヘアスプレーで固めたかの如く全く動かないのも不自然なため、

   角度制限付きで前髪がわずかに揺れるように調整しています。

 ▼ Anim Pose Planar Constraint

    

    髪の可動域や角度を制約しても、髪がおでこを貫通することがありました。

    この問題を解決するためにボーンの Y軸 から成る平面に

    シミュレーション結果を固定しています。 ( アニメーションポーズからの平面制約 )

    このように設定することで髪は左右だけに揺れます。


肩パッド :

 ▼ 使用したコンストレイント一覧

   ● Rigid Vertical Structure Constraint

   ● Anim Pose Movable Radius Constraint

   ● Anim Pose Planar Constraint

 ▼ コンストレイントについて

   これまでに紹介したものを組み合わせています。

   肩パッドは固い材質に思えたため、ボーンの長さを Rigid Vertical Structure Constraint で固定しました。

   肩パッドが想像よりも大きく回転したり、腕を貫通しないように

   可動域を Anim Pose Movable Radius Constraint で調整しました。

   Anim Pose Planar Constraint で回転軸を固定しました。

 ▼ 当たり判定について

    

   上腕のボーンに平面コライダを割り当てて、腕の動きに合わせて肩パッドが押し上げられるようにしています。

    

   また、現時点の平面コライダはノードに登録している全てのボーンに影響があるため、

   実際には肩パッドの左右でノードを 2 つに分割して、別々の平面コライダを設定しています。

 ▼ パラメータの調整について

    

   デモで使用したダンスモーションでは Hips が大きく動き、それにより肩パッドが想像よりも

   ダイナミックな挙動をしていました。

   この問題を改善するために HipsSimulation Root Bone に設定し、 Damping1.0 にしました。

   Damping1.0 の場合、完全に Hips の姿勢変化の影響を物理計算に取り込まないようになります。


帯 :

 ▼ 使用したコンストレイント一覧

   ● Relative Limit Angle Constraint

 ▼ Relative Limit Angle Constraint

   

   これは親ボーンからどれだけ曲げられるかを制約します。

   帯のシミュレーションにおいては 30° を指定しました。

   画像のようにデバッグ描画に対応しており、ボーンは青色の円錐の範囲で曲がります。

 ▼ 当たり判定について

   

   帯に丸みを与え、かつ体の正面に向かって侵入しないように、大きいスフィアコライダを

   物理アセットで設定しました。

   また、ほぼ常に帯がスフィアコライダに擦れることで摩擦が発生します。

   これによりフワフワとした挙動を再現しようとしました。

   しかし、やりすぎてしまったため、デモでは少し宙に浮いたように見える瞬間があります。

   今から再設定するとしたら、摩擦ではなく Master DampingGravity の調整に切り替えるかもしれません。


スカート :

 ▼ 使用したコンストレイント一覧

   ● Horizontal Structural Constraint ( Loop あり )

   ● Shear Constraint

  クロスシミュレーション用の拘束については クロスシミュレーションのやり方 をご確認ください。

 ▼ 当たり判定について    

   

   基本的には脚に沿わせてカプセルを配置しているだけです。

   スカートが完全にめくり上がることがないように、保険として大きめのスフィアをスカートの上に配置しています。

   これについては当たり判定ではなく、角度制限のコンストレイントでもよかったかもしれません。

 ▼ パラメータの調整について

   デモで使用したアニメーションはダンスのみキーが入っているため、

   スカートは物理計算によるプロシージャルアニメーションになります。

   

   スカートは 腰骨 の姿勢変化の影響で破綻することが多かったため、 Simulation Root Bone を設定しています。

   Simulation Root Bone によって発生する力を Damping で完全に消してしまうと、

   スカートが固く見えるため、 見た目が破綻しない範囲で細かく調整しています。

   また、ダンスの回転動作でスカートがめくれあがってしまうことがあったため、

   Ignore Simuation Angular Velocity で設定値よりも大きい回転については、

   物理計算に取り込まないようにしました。

   振り返って思えば、 Solver Iterations を上げてソルバーを安定させれば、

   腰骨の影響をより大きく受けた、リアルなスカートを作れたかもしれません。

   

   Master Damping も調整しており、スカートの下に行くほど動きやすくしています。