Houdini 19.5 キャラクタ KineFX

キャラクタのラグドールシミュレーションのセットアップ

On this page

Ragdoll Collision Shapes SOPノード、 Ragdoll Constraints SOPノード、 Ragdoll Solver SOPノードとそれらの関連ワークフローを使用した Bullet ソルバRBD(リジッドボディダイナミクス)シミュレーションを通じて、KineFXキャラクタのシミュレーションの動きと衝突効果を作成することができます。

基本ワークフロー

1. リグ付きキャラクタをインポートする

ラグドールシミュレーションをセットアップしたいKineFXにリグ付きキャラクタを取り込むか、または、KineFXでリグ付きキャラクタを作成します。

これらの工程の詳細は、アニメーションとキャラクタデータをKineFXに取り込む方法スケルトンの扱い方アニメーションの転送を参照してください。


2. (任意)ラグドールキャラクタの静止ポーズを定義する

キャラクタにTポーズまたは 静止ポーズ (rest_transform)を定義します。 ラグドールシミュレーションのセットアップ工程の手順毎にキャラクタを静止位置にする必要があります。

以下のいずれかを行ないます:

  • キャラクタに静止ポーズがあれば、手順3に進みます。

  • キャラクタに静止ポーズが ない 場合、 Rig Stash Pose SOPノードを作成し、それをキャラクタに接続して、キャラクタの新しい静止ポーズを作成します。


3. ラグドールキャラクタのスケルトンの主なジョイントにジョイント制限を設定する

ラグドール化の際、キャラクタの手足や体が自然な感じに曲がるようにするには、ジョイントの回転を制限する必要があります。 キャラクタのスケルトンのジョイント制限は、 Configure Joints SOPノードを使用して定義することができます。

キャラクタのスケルトンの すべて のジョイントにジョイント制限を定義する必要は ありません 。 多くの場合、腰、膝、足首、肩、膝、手首、背骨といったキャラクタのスケルトンの 主要ジョイント (主な連結ポイント)にのみジョイント制限を定義すれば十分です。

Important

ラグドールセットアップで Configure Joints SOP ノードを使用するには、 静止ポーズ が必要です。 Configure Joints SOP の上流に Rig Stash Pose SOP ノードを配置してrest_transformを作成してください。 また、 Configure Joints SOP ノードでRest Pose Attributeパラメータを オン にしてください。


4. ラグドールキャラクタのコリジョン形状を作成する

環境(ラグドールキャラクタが歩く地面とか環境ピース)で、ラグドールキャラクタが衝突オブジェクトと衝突できるようにするには、一連の コリジョン形状 が必要です。コリジョン形状はキャラクタの 衝突境界 を定義します。

Ragdoll Collision Shapes SOPノードを使用すれば、キャラクタから単純なプリミティブのコリジョン形状セットを自動的に作成することができます。

  1. Ragdoll Collision Shapes SOP ノードを作成して、それをラグドールキャラクタのネットワークの上流のノードに接続します。

  2. パラメータエディタ で、 Rest Pose Attribute パラメータをオンにして、それをキャラクタの静止位置アトリビュートに設定します。デフォルトはrest_transformです。

  3. その他の一般的な Ragdoll Collision Shapes SOP パラメータを自由に設定します。

  4. 作成したいコリジョン形状毎に Collision Shape マルチパラメータを作成します。

    Collision Shape マルチパラメータで以下の操作を行ないます:

    • Group フィールドの横にある矢印アイコンをクリックして、ビューポート内でコリジョン形状を作成したいジョイントを選択してからEnterを押します。コリジョン形状のために選択したラグドールスケルトンジョイントの@nameCollision Shape マルチパラメータの Group フィールドに表示され、新しいコリジョン形状がビューポート内のターゲットジョイントに表示されます。

    • Shape パラメータを使用してコリジョン形状のプリミティブシェイプを選択します。 CapsuleBoxSphere から選択することができます。

      コリジョン形状プリミティブ
    • トランスフォームパラメータ( TranslateRotationScale )を使用して、シェイプの位置とサイズを変更します。シェイプはキャラクタのスキンにできるだけ近付けます。

  5. すべての Collision Shape マルチパラメータとコリジョン形状の作成が完了したら、コリジョン形状を作成したすべてのジョイントの名前を、@name構文を使用して Group パラメータフィールドに入力します。例えば、@name=pelvisのようになります。これは、シミュレーションの計算時にどのコリジョン形状を使用すればよいかをラグドールソルバに伝えます。

Tip

ラグドールシミュレーションセットアップでカスタムのコリジョン形状を使用する方法を知りたい場合は、例3: カスタムのコリジョン形状ジオメトリを参照してください。


5. ラグドールキャラクタの拘束を作成する

ラグドールキャラクタに使用できる拘束には、 内部拘束外部拘束 の2種類があります。 内部拘束はキャラクタのスケルトンを結束して、ラグドールシミュレーション中にコリジョン形状をスケルトン上に維持します。 外部拘束を使用すると、キャラクタのスケルトン内のジョイントを他のジョイントまたは外部衝突オブジェクトに拘束することができます。

Ragdoll Constraints SOPノードを使用すれば、コリジョン形状を持つラグドールキャラクタのすべてのジョイントに対して自動的に拘束を生成することができます。

  1. Ragdoll Constraints SOP ノードを作成して、その 1番目の入力 Ragdoll Collision Shapes SOPノードの 1番目の出力 に接続したら、 Ragdoll Constraints SOP ノードの 2番目の入力Ragdoll Collision Shapes SOP ノードの 2番目の出力 に接続します。

  2. ラグドール拘束に使用したい外部衝突オブジェクトを Ragdoll Constraints SOP ノードの 3番目の入力 に接続します。

  3. パラメータエディタ で、 Rest Pose Attribute パラメータをデフォルト設定のままにします。拘束を作成する時、キャラクタは 静止位置 である必要があります。

  4. ラグドールキャラクタのジョイントにジョイント制限を設定したため、 Configure Attribute パラメータをオンにして、内部拘束がConfigure Joints SOPノードでセットアップしたジョイントの角度制限を使用できるようにする必要があります。

  5. ジョイント制限を定義して いない ラグドールキャラクタのスケルトン内のすべてのジョイントに対して自動的に内部拘束を作成したい場合は、 Missing Rotation Limits パラメータ設定のいずれかを使用します。

  6. すべての Internal Constraint パラメータを、望ましい拘束の挙動になるように設定します。

  7. External Constraints セクションで、他のジョイントまたは( Ragdoll Constraints SOP ノードの3番目の入力で指定した)外部衝突オブジェクトにピン留めしたいラグドールキャラクタのスケルトン内のジョイント毎に Constraints マルチパラメータを作成します。

    Constraintsマルチパラメータ設定

    Constraints マルチパラメータで、以下の操作を行ないます:

    • Joint Group パラメータの横にある矢印アイコンをクリックして、ビューポート内で拘束したいジョイントを選択してからEnterを押します。選択したジョイントの名前が Joint Group フィールドに表示されます。

    • 拘束の Target を選択します。外部衝突オブジェクト( Collision Geometry )または別のジョイント( Skeleton )を選択できます。

    • Target ▸ Collision Geometry を選択した場合、さらに Constrain To パラメータオプションを使用して、拘束が Target を検索する方法を選択する必要があります。

    • 拘束がターゲットを検索する方法を特定のプリミティブグループまたはジョイントセットに制限する場合は、 Target Points Group または Target Primitives Group のドロップダウンリストを使用して、検索を絞りたいプリミティブグループまたはジョイントセットを選択します。

    • 拘束の向きをターゲットのトランスフォームに合わせるには、 Use Target Transform をオンにします。

    • Constraint Type パラメータを使用して、拘束の タイプ を選択します。 HardSoftGlue のいずれかを選択することができます。

      Hard 拘束は、ラグドールスケルトンジョイントの位置および/または回転を厳しく拘束し、逸脱した動きは一切許容されません。 Soft 拘束は、ラグドールスケルトンジョイントの位置および/または回転を強く拘束しますが、( Stiffness パラメータで決められた)少しの動きが許容されます。 Glue 拘束は、ラグドールスケルトンジョイントに適用された(物理ソルバによって生成された)フォースが指定した Strength パラメータ値よりも大きくなり、結合が解除されるまで、ラグドールスケルトンジョイントを外部衝突オブジェクトまたは他のジョイントに強く拘束します。

    • Constraint Type 関連のパラメータを自由に設定します。

Tip

Ragdoll Constraints SOP のパラメータの Guide Geometry セクションで Display Constraint Geometry をオンにすると、ラグドールキャラクタの内部拘束および外部拘束をビューポート内に表示することができます。

Guide Geometryパラメータ
Display Constraint Geometryがオン

6. キャラクタのラグドールシミュレーションを実行する

これで、ラグドールキャラクタのシミュレーションに必要なコンポーネント(ジョイント制限、コリジョン形状、拘束)をすべて作成し、カスタマイズすることができました。次は、シミュレーションを計算するBullet物理 ソルバ を作成および設定します。

このソルバは、 Ragdoll Solver SOPノードを使用して作成することができます。

  1. Ragdoll Solver SOP ノードを作成して、 1番目2番目3番目 の入力を Ragdoll Constraints SOPノードの 1番目2番目3番目 の出力に接続します。

  2. Ragdoll Constraints SOP ノードの3番目の入力に外部衝突オブジェクトを指定した場合は、 Ragdoll Solver SOP ノードの4番目の入力を Ragdoll Constraints SOP ノードの4番目の出力に接続します。その4番目の入力を接続しなかった場合でも、シミュレーションで Collision Geometry として外部オブジェクトを使用したいのであれば、外部衝突オブジェクトを Ragdoll Solver SOP ノードの4番目の入力に接続します。

  3. パラメータエディタ で、ラグドールシミュレーションで希望どおりの動作をさせるのに必要なパラメータ設定をすべて設定します。

    • 一般的な Solver パラメータでは、ソルバによって使用されるタイムステップのスケール値( Time Scale )、シミュレーションの解像度( Number of Substeps )、ラグドール拘束の精度( Constraint Iterations )、シミュレーションでの重力の有無( Gravity )など、ソルバの設定を指定することができます。

      一般的なSolverパラメータ
      • Ground Plane パラメータを使用すると、ラグドールシミュレーションの衝突用の地面を作成して( Add Ground Plane ▸ Ground Plane )、そのトランスフォーム( PositionRotation )、弾性( Bounce )、滑りやすさ( Friction )を設定することができます。

        Ground Planeパラメータ

        Ragdoll Solver SOP のパラメータの Guide Geometry セクションで Display Ground Plane Geometry をオンにすると、ビューポート内に地面を表示することができます。

        Display Ground Plane Geometryをオン
      • Collision Geometry パラメータでは、Ragdoll Constraints SOPノードの3番目の入力またはRagdoll Solver SOPノードの4番目の入力に接続されている外部衝突オブジェクトの設定を指定することができます。

        これらの設定は、衝突オブジェクトの初期状態( Initial Object Type )、衝突オブジェクトがタイムステップ毎にインポートまたは更新される方法( Overwrite* パラメータ)、オブジェクトの質量( Density )、オブジェクトの慣性テンソルの乗数( Rational Stiffness )、オブジェクトの弾性( Bounce )、オブジェクトの滑りやすさ( Friction )を決定します。

        Collision Geometryパラメータ

        Ragdoll Solver SOP のパラメータの Guide Geometry セクションで Display Collision Geometry をオンにすると、ビューポート内に外部衝突ジオメトリを表示することができます。

        Guide Geometryパラメータ
        Display Collision Geometryをオン
    • 一般的な Ragdoll パラメータでは、シミュレーションに使用される静止ポーズ( Rest Pose Attribute )、シミュレーションの範囲( Frame Range )、拘束がタイムステップ毎にインポートされる方法( Overwrite* パラメータ)、初期化時に回転制限の違反を無視するかどうか( Allow Initial Violation of Limits )、シミュレーション内で部分的なラグドール化を使用するかどうか( Partial Ragdoll )などの設定を指定することができます。

      一般的なRagdollパラメータ
      • Stiffness パラメータ設定は、ソルバがポイントを現在の向きから(アニメーションまたはシミュレーションした)ターゲットの向きに動かそうするときに、抵抗を追加します。

        Stiffnessパラメータ
      • Motors パラメータ設定は、ポイントをアニメーションクリップに追従させるのにソルバが費やす労力を決定します。これは、ラグドールキャラクタのジョイントを静止位置に近づけておきたい場合に便利です。

        Motorsパラメータ
      • Transitions パラメータ設定は、キャラクタのラグドールシミュレーションへのトランジションをトリガする基準を定義します。

        Transitionsパラメータ
        • Locomotion パラメータは、ワールド空間で移動または回転するキャラクタによってトリガされる Transitions ▸ Type を使用する場合のみ使用できます。スケルトンがトリガ条件を満たす場合に、計算を正確にするには、これらのトランジションタイプではキャラクタのロコモーション(およびロコモーションジョイント)が必要です。このセクションには、 Ragdoll Solver SOP ノード内でロコモーションを計算する内部ロコモーション設定がありますが、外部の Extract Locomotion SOPノードを使用すると、上流でこれらの設定を計算することができます。

          Locomotionパラメータ

7. ラグドールシミュレーションの結果を表示する

Joint Deform SOPノードを使用して、ビューポート内にラグドールシミュレーションの結果を表示します。

ラグドールの例

例1: 外部拘束とMotorsを使用したラグドールセットアップ

例1のラグドールシミュレーションネットワーク

この例のラグドールセットアップでは、Erikはアニメーションするバイクの外部衝突オブジェクトに拘束されています。 彼は姿勢良く保ちながら、バイクのアニメーションに追従しようとします。

例1の最終的なラグドールシミュレーション。キャラクタモデル提供: Christophe Desse氏


このキャラクタで、Erikに最初に作成したのが 静止位置 です。 ジョイント制限を設定したり、ラグドールのコリジョン形状を作成したり、ラグドール拘束をセットアップしたり、ラグドールシミュレーションを実行するとき、Erikを静止ポーズにする必要があるからです。

Rig Stash Pose SOPノードはrest_transformアトリビュートを作成して、Erikの現在のポーズ(バイクにまたがるErik)をシミュレーション用の静止ポーズ( Attribute Name )として保存します( Mode ▸ Store )。

Rig Stash Pose SOPのビューポートステートで、静止位置のポーズを付けたErikのスケルトン

Configure Joints SOPノードでErikのスケルトンを静止位置( Rest Pose Attribute )にします。Ericのスケルトンの主なジョイントすべて(膝、肘、腰、肩など)の 回転制限 ( Configurations マルチパラメータ)を定義したら、制限をfbik_jointconfigアトリビュート( Output Configuration )に保存します。 ここで設定した制限は、ラグドールシミュレーション中、ジョイントが静止位置から移動する 距離 を制限して、Erikの手足や背骨が変な角度で折れ曲がるのを防ぎます。 このセットアップでは 回転 のジョイント制限のみが必要なので、 ModeRagdoll に設定します。

Configure Joints SOPのビューポートステート内のErikのスケルトン

Ragdoll Collision Shapes SOPノードで、Erikのスケルトンを 静止位置 ( Rest Pose Attribute )にしてから、 Collision Shapes マルチパラメータ設定に基づいてラグドールシミュレーションの コリジョン形状 を作成します。 これらの形状を使用すると、Erikは バイク などの外部衝突オブジェクトと衝突できますが、バイクをErikに衝突させることは できません

Tip

独自のラグドールシミュレーションセットアップでカスタムのコリジョン形状に変更する方法を知りたい場合は、例3: カスタムのコリジョン形状ジオメトリを参照してください。

各コリジョン形状は、Erikのスケルトンの特定のジョイント(または複数のジョイント)にリンクされたシンプルなカプセルプリミティブです。 これらはErikのモデルの全体的なボリュームに追従して最適なトポロジを表現します。

Ragdoll Collision Shapes SOPのビューポートステート内のErikのスケルトンとコリジョン形状

Group にリストされたすべてのジョイントは、コリジョン形状上のポイントグループ( Group Name )にも出力( Output Group )されます。

Ragdoll Constraints SOPノードで、Erikのスケルトンを 静止位置 ( Rest Pose Attribute )にしてから、 Configure Joints SOP で設定した回転制限( Configuration Attribute )を使用して、コリジョン形状を持つErikのスケルトンのすべてのジョイントに 内部 拘束を作成します。 これらのラグドール拘束が、ラグドールシミュレーション中もErikのボディをまとめ、手足を適切な位置に保ちます。

また、Erikのスケルトン内のコリジョン形状を持って いない すべてのジョイントに対してCone Twist Constraintが自動で作成されます( Missing Rotation Limits ▸ Constrain Position )。

Guide Geometry ▸ Display Constraint Geometryがオン の場合、( Configure Joints SOPノードを使用してセットアップされた ジョイント制限 を反映した) 内部拘束 の円錐角と、各 外部拘束 を表す白い球体の両方が表示されます。

Ragdoll Constraints SOPのビューポートステートのErikのスケルトン
Ragdoll Constraints SOPのビューポートステートのErikのスケルトン

Erikの Internal Constraints はデフォルト値に設定されていますが(デフォルト設定のままで、良い結果になることが多い)、 External Constraints はカスタマイズされています。 Ragdoll Constraints SOPノードの3番目の入力に 外部衝突オブジェクト (バイク)を接続したので、Erikの外部拘束をセットアップすることができました。

Ragdoll Constraint SOP ノードの3番目の入力に接続されたバイクの外部衝突オブジェクト

Guide Geometry ▸ Display Collision Geometry がオン の場合、シーン内の外部衝突ジオメトリ(バイクなど)が青いメッシュで表示されます。

Ragdoll Constraints SOPのビューポートステート内のバイクの衝突ジオメトリ

External Constraints ▸ Constraints のマルチパラメータは、 Joint Group で指定したジョイントにハード拘束、ソフト拘束、接着拘束( Constraint Type )を作成します。 Erikには、ハード拘束とソフト拘束のみが使用されています。 アニメーション中にErikをバイク上に留めているのは、これらの拘束のみです。

ハード拘束 は位置と回転を厳しく制限し、動きを許容しないので、ハード 拘束を使用して手のジョイント( Joint Group )をバイクのハンドルにピン留めしました。 そして、 ソフト拘束 は位置と回転を強く制限しますが( Stiffness で設定した)少しの動きを許容するので、ソフト拘束を使用して足と骨盤のジョイント( Joint Group )をバイク上に留めました。 さらに、手足のジョイントに Target Primitives Group パラメータを使用して、手足の拘束が、指定したジオメトリグループの最も近いプリミティブを拘束先として探すようにしました。

最後に Ragdoll Solver SOPノードがBullet物理ソルバを使用して、Erikのラグドールシミュレーションを計算します。

Erikの Solver 設定はすべてデフォルトに設定されており、 Collision Plane はありません。 しかし、外部衝突ジオメトリ(バイク)はアニメーションし、且つ、静的ジオメトリなので、シミュレーションのタイムステップ毎にトランスフォームを更新しながら、オブジェクトがErikに衝突(反応) しない ようにする必要がありました( Collisions Geometryタブ ▸ Initial Object Typeパラメータ ▸ Create Animated Static Objectsパラメータオプション )。 Erikは(コリジョン形状であるため)バイクに 衝突します が、バイクは 衝突せず 、接触するすべてのオブジェクトを無視します。

Erikを静止位置にしてからシミュレーションを計算する必要があるので、 Ragdoll セクションの Rest Pose Attribute Rig Stash Pose SOPノードで作成された静止ポーズアトリビュート(rest_transform)に設定します。 また、 Frame Range はラグドールシミュレーションに必要な範囲に設定します。 Erikの場合、これはバイクのアニメーションの時間と同じです。

Allow Initial Violation of Limitオン にして、シミュレーションを始める前から回転制限を超えていた場合でも、シミュレーションの開始時にErikのジョイントがカクつかないようにします。 これには、初期化時に回転制限を超えているすべてのジョイントが適切な設定範囲内で回転するように促す効果もあります。

Partial Ragdoll ▸ Joints With Collision Shapes は、 コリジョン形状 を持つジョイントのみでシミュレーションを実行するようにソルバに指示します。 ほとんどの場合、補助ジョイントの多くは一緒についてくるので、キャラクタのスケルトン全体に対してラグドールシミュレーションを実行する必要はありません。

Erikの場合、 Stiffness 設定はデフォルトのままで十分でしたが、背骨と頭のジョイントには Motors を使用しました。 指定したモータージョイント( Group )に関しては、ソルバは計算中に常に( Strength Value ▸ Constant )、それらのジョイントを(Erikはアニメーションしないので)静止ポーズで設定されたトランスフォームの方へ押そうとします。 これは、物理を用いて Group ジョイントに影響を与えるようソルバに指示する方法の1つですが、可能な限り( Motor Strength )元の静止位置を維持することにもつながります。これにより、Erikを元の姿勢を維持させつつ弾ませることができます。

Motorsを オン にしたErik。キャラクタモデル提供: Christophe Desse氏

Motorsを オフ にしたErik。キャラクタモデル提供: Christophe Desse氏

最後に、Erikのラグドールへのトランジションは特定の条件に依存して いない ため、 Transitions は無効になっています。


例2: 外部拘束ジオメトリとトランジションを使用したラグドールセットアップ

例2のラグドールシミュレーションネットワーク

この例のラグドールセットアップでは、Erikが前方に走ると、RBD野球バット外部衝突オブジェクトにぶつかります。 その結果、後方にひっくり返り、地面にばったり倒れます。

例2の最終的なラグドールシミュレーション。キャラクタモデル提供: Christophe Desse氏


このキャラクタに対して、Erik用に最初に作成したのが 静止位置 です。 ジョイント制限を設定したり、ラグドールのコリジョン形状を作成したり、ラグドール拘束をセットアップしたり、ラグドールシミュレーションを実行するとき、Erikを静止ポーズにする必要があるからです。

Rig Stash Pose SOPノードはrest_transformアトリビュートを作成して、Erikの現在のポーズ(通常のTポーズ)をシミュレーション用の静止ポーズ( Attribute Name )として保存します( Mode ▸ Store )。

Rig Stash Pose SOPのビューポートステート、Tポーズを付けたErikのスケルトン

Configure Joints SOPノードでErikのスケルトンを静止位置( Rest Pose Attribute )にします。Ericのスケルトンの主なジョイントすべて(膝、肘、腰、肩など)の 回転制限 ( Configurations マルチパラメータ)を定義したら、それらの制限をfbik_jointconfigアトリビュート( Output Configuration )に保存します。 ここで設定した制限は、ラグドールシミュレーション中、ジョイントが静止位置から移動する 距離 を制限して、Erikの手足や背骨が変な角度に折れ曲がるのを防ぎます。 このセットアップでは、 回転 のジョイント制限のみが必要なので、 ModeRagdoll に設定します。

Configure Joints SOPのビューポートステートのErikのスケルトン

Ragdoll Collision Shapes SOPノードで、Erikのスケルトンを 静止位置 ( Rest Pose Attribute )にします。 そして、 Collision Shapes マルチパラメータ設定に基づいてラグドールシミュレーションの コリジョン形状 を作成します。 これらの形状を使用して、Erikを RBD野球バット などの外部衝突オブジェクトに衝突させることができますが、RBD野球バットをErikに衝突させることは できません (この衝突の挙動はソルバでセットアップします)。

Tip

独自のラグドールセットアップでカスタムのコリジョン形状に変更する方法を知りたい場合は、例3: カスタムのコリジョン形状ジオメトリを参照してください。

各コリジョン形状は、Erikのスケルトンの特定のジョイント(または複数のジョイント)にリンクされたシンプルなカプセルプリミティブです。 これらはErikのモデルの全体的なボリュームに追従して最適なトポロジを表現します。

Ragdoll Collision Shapes SOPのビューポートステートのErikのスケルトン

Group にリストされたすべてのジョイントは、コリジョン形状上のポイントグループ( Group Name )にも出力( Output Group )されます。

Ragdoll Constraints SOPノードで、Erikのスケルトンを 静止位置 ( Rest Pose Attribute )にしてから、Configure Joints SOPで設定した回転制限( Configuration Attribute )を使用して、コリジョン形状を持つErikのスケルトンのすべてのジョイントに 内部拘束 を作成します。 これらのラグドール拘束が、ラグドールシミュレーション中もErikのボディをまとめ、手足を適切な位置に保ちます。

また、Erikのスケルトン内のコリジョン形状を持って いない すべてのジョイントに対してCone Twist Constraintが自動で作成されます( Missing Rotation Limits ▸ Constrain Position )。

Erikの Internal Constraints はデフォルト値に設定されていますが(デフォルト設定のままで、良い結果になることが多い)、 External Constraints は定義されていません。

Guide Geometry ▸ Display Constraint Geometryがオン の場合、( Configure Joints SOPノードを使用してセットアップされた ジョイント制限 を反映した)内部拘束の円錐角が表示されます。

Ragdoll Constraints SOPのビューポートステート内のErikのスケルトン

最後に Ragdoll Solver SOPノードは、Bullet物理ソルバを使用して、スイングしたバットが、走るErikキャラクタにぶつかるラグドールシミュレーションを計算します。 RBD野球バット外部衝突オブジェクトは、 Ragdoll Solver SOP ノードの 4番目の入力 に接続されています。

Ragdoll Solver SOPノードの4番目の入力に接続されたRBD野球バット外部衝突オブジェクト

重要事項

衝突ジオメトリは パック ジオメトリである必要があります。 通常の Pack SOPまたは RBD Pack SOPで構いません。 この例では、RBD野球バットは3個のパックジオメトリで構成されており、各パックジオメトリはマテリアルの粉砕から生じるピースに該当します。

一般的な Solver 設定はすべてデフォルト設定ですが、 Ground Plane を有効にし、 Collision Geometry 設定をカスタマイズしています。

Ground Plane 設定は、Erikの足元に衝突地面を生成して( Add Ground Planeパラメータ ▸ Ground Planeパラメータ設定 )、彼が走ったり、RBD野球バットの打撃の後に倒れる際に衝突可能な平面サーフェスを用意します。

ビューポート内に地面を表示するには、 Guide Geometry ▸ Display Ground Plane Geometry パラメータを オン にします。

Ragdoll Solver SOPのビューポートステートのErikのスケルトンと地面

Collision Geometry を設定することで、RBD野球バットがシミュレーションに含まれ、シミュレーション中にErikに反応するようになります( Initial Object Type ▸ Create Active Objects )。 また、RBD野球バットのactiveおよびanimatedアトリビュート(RBD Packed Object DOPを参照)もアニメーションの各フレームで更新されるようになります( Override Attributes from SOP )。

ラグドールシミュレーションの衝突ジオメトリ( Ragdoll Solver SOP ノードの4番目の入力または Ragdoll Constraints SOPノードの3番目の入力で指定)をビューポート内に表示するには、 Guide Geometry ▸ Display Collision Geometry パラメータを オン にします。

Ragdoll Solver SOPのビューポートステートのErikのスケルトン、RBD野球バット、地面

Erikを静止位置にしてからシミュレーションを計算する必要があるので、 Ragdoll セクションの Rest Pose Attribute は、 Rig Stash Pose SOPノードで作成された静止ポーズアトリビュート(rest_transform)に設定されています。 また Frame Range はラグドールシミュレーションに必要な範囲に設定されています。

Allow Initial Violation of Limitオン にして、シミュレーションを始める前から回転制限を超えていた場合でも、シミュレーションの開始時にErikのジョイントがカクつかないようにします。 これには、初期化時に回転制限を超えているすべてのジョイントが適切な設定範囲内で回転するように促す効果もあります。

Transitions パラメータは、ラグドールをアクティブにするための基準( Type ▸ RBD Impact Data )や、インパクトとして考慮されるRBDオブジェクト( DOP Impact Objects )を定義します。 Erikのラグドールへの切り替えは、RBD野球バットによるインパクトの強さ( Impact Threshold )によってトリガされます。 この例では、Ragdoll Solver SOPノードの4番目の入力に接続された外部衝突オブジェクト(RBD野球バット)にcollision_objectアトリビュートが自動的に与えられます。

Erikの最終的なラグドールシミュレーション。キャラクタモデル提供: Christophe Desse氏

最後に、Erikには姿勢の維持、部分ラグドール、カスタム剛性設定の必要が ない ため、 Partial RagdollMotors は無効にして、 Stiffness 設定をデフォルト値のままにします。


例3: カスタムのコリジョン形状ジオメトリ

例3のカスタム形状ネットワーク

この例では、既存のラグドールシミュレーションSOPネットワークを編集して、カスタムコリジョン形状を挿入します。 Ragdoll Collision Shapes SOPノードによって生成されたコリジョン形状の1つを、独自のカスタムプリミティブで置き換えます。


  1. Null SOPノードを作成して、 Ragdoll Constraints SOP’sの2番目の出力に接続します。

    このノードは、コリジョン形状ジオメトリデータを収集します。

    ビューポート内のNull SOPのコリジョン形状ジオメトリデータ
  2. Split SOPノードを作成して、Null SOPの出力に接続します。

    Split SOP を使用して、単一のコリジョン形状を引き出し、それを置き換えられるようにします。

  3. Split SOP を選択し、Displayフラグをオンにして、ビューポート内をクリックしてからEnterを押します。

    これで、 Split SOP ノードのビューポートステートになります。

  4. パラメータエディタ で、以下の操作を行ないます:

    • Group パラメータの横の矢印をクリックして、ビューポートで置き換えたいコリジョン形状をクリックしてからEnterを押します。

    • Group Type ▸ Primitives を選択します。

    • Invert Selection をオンにします。

    Split SOP が、ビューポート内で選択した1つの衝突オブジェクトのみを分割しました。

    ビューポート内のSplit SOPのコリジョン形状ジオメトリデータ
  5. カスタム衝突オブジェクトを作成します。これは、パックプリミティブでなければ なりません

    この例では、シンプルな Box SOPを使用し、それを Pack SOPノードによってパックプリミティブにしました。

  6. Attribute Transfer SOPノードを作成し、以下の操作を行ないます:

    • Attribute Transfer SOP ノードの1番目の入力を、カスタム形状のノード(既にパックプリミティブである場合)または Pack SOP ノードの出力に接続します。

    • Attribute Transfer SOP ノードの2番目の入力を、Split SOP ノードの2番目の出力に接続します。

    これがこの工程で最も重要な手順です。 元のコリジョン形状のアトリビュートを新しいカスタムコリジョン形状に転送する必要があるので、この Attribute Transfer SOP を接続した後に Ragdoll Constraints SOPノードを接続します。

    重要事項

    Ragdoll Collision Shapes SOPノードは、アトリビュート付きの形状を作成します。 形状はいずれも独自のカスタム形状に置換することができますが、元の形状のnameおよびPアトリビュートを置換先の新しい形状 転送する必要があります。

  7. パラメータエディタ で、 Attribute Transfer SOP の以下のパラメータを調整します:

    • Primitivesオン にします。

    • Pointsオン にします。

    これにより、nameおよびPアトリビュートが元の形状から新しい形状に転送されます。

  8. Merge SOPノードを作成して、以下の操作を行ないます:

    • Split SOP ノードの1番目の出力を Merge SOP に接続します。

    • Attribute Transfer SOP の出力を Merge SOP に接続します。

    これで、元のコリジョン形状のジオメトリデータが新しいカスタムコリジョン形状のジオメトリデータ(ボックス)に結合されます。

  9. Merge SOP ノードの出力をRagdoll Constraints SOPノードの2番目の入力に接続します。

    これで、コリジョン形状データがラグドールSOPネットワークのメインストリームに戻ります。

  10. Ragdoll Solver SOPノードを選択し、Displayフラグをオンにして、ビューポート内をクリックしてEnterを押します。

    これで、 Ragdoll Solver SOP のビューポートステートになります。

  11. パラメータエディタ で、以下の操作を行ないます:

    • Reset Simulation をクリックします。

    • Guide Geometry セクションで、 Display Collision Shapes をオンにします。

    ビューポートにカスタムコリジョン形状が表示されていれば、通常のコリジョン形状がカスタム形状に正常に置換されています。

KineFX

プロシージャルリギング

互換性

アニメーションのリターゲット

ペイン