Houdini 19.0 キャラクタ KineFX

キャラクタにセカンダリモーションエフェクトを追加する方法

On this page

Secondary Motion SOPノードとそれに付随するワークフローで実際にキャラクタのシミュレーションを作成する必要なく、KineFXのジョイントやスケルトンにOvershoot/Lag、Jiggle、Springといったセカンダリモーションエフェクトを作成することができます。 これによって、キャラクタの既存のアニメーションに基づいて(ほぼ自動で)洗練された味わいのあるキャラクタモーションを作成することができます。

KineFXでキャラクタにセカンダリモーションをセットアップする方法は、いくつもあります。 このページでは、使用するドライバや設定に関係なく、セカンダリモーションエフェクトのセットアップに使用できる基本ワークフローを紹介します。 また、セカンダリモーションをセットアップする最も一般的な方法のいくつかを例を挙げて説明します。

基本ワークフロー

  1. アニメーションジョイントをインポートします。

    アニメーションスケルトン/キャラクタをKineFXに取り込むか、または、アニメーションスケルトン/キャラクタをKineFXで作成します。

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

  2. (任意) アニメーションジョイントに静止ポーズを定義します。

    セカンダリモーションのセットアップにローカルトランスフォームを使う予定で、ターゲットジョイント( Joint Group )の向きがソースジョイント( Source Joint Group )と 異なる 場合は、アニメーションスケルトン/キャラクタに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パラメータをオンにします。

    Tip

    多くのセカンダリモーションのセットアップでは、回転と移動の両方を制限できる Mode ▸ Rig Pose が理想的なモードです。

  4. ジョイントにセカンダリモーションエフェクトを作成します。

    • Secondary Motion SOPノードを作成します。

    • 作成したいセカンダリモーションの種類、エフェクトを駆動させたいジョイントのモーション、モーションエフェクトを伝搬させたいターゲットジョイントを特定します。

    • セカンダリモーションのすべての設定を指定します。

      次のパラメータは、セカンダリモーションのセットアップで最もよく使用する設定の一部です。

      Source Joint Group

      Effect が適用されるジョイント。アニメーションおよびモーションエフェクトで、 Joint Group のターゲットジョイントを駆動するジョイントでもあります。

      Joint Group

      Source Joint Group からアニメーションおよびモーションエフェクトを受け取るターゲットジョイント。

      Frame Range

      セカンダリモーションが生じる時間フレーム。現在のフレーム範囲と同じ時間フレームにすることをお勧めします。現在のフレーム範囲のサブセットを使用したい場合は、 Blend 設定を使用してください。

      Mode ▸ Local Transform

      これを選択すると、セカンダリモーションは Joint Group で指定したジョイントの ローカルトランスフォーム に影響します。

      Rest Pose Attribute

      オンの時、 Source Joint Group から Joint Group に適切にlocaltransformを適用するために使用される、ポイント静止トランスフォームアトリビュート(デフォルトではrest_transform)を指定します。 Joint Group ジョイントの向きが Source Joint Group と同じ場合、静止トランスフォームを使用する必要はあり ません

      (任意) Mode ▸ Other Attribute

      これを選択すると、セカンダリモーションは Joint Group のジョイントの カスタムアトリビュート に影響します。

      (任意) Attributes

      Source Joint Group から Joint Group に適切にlocaltransformを適用するために使用される、カスタムアトリビュート(デフォルトではP)を指定します。

      (任意) Configuration Attribute

      オンの時、 Source Joint Group および/または Joint Group のいずれかのジョイントがジョイント制限を定義した場合は、使用するジョイント構成アトリビュートを指定することができます(デフォルトではfbik_configurejoitns)。

      Extract Transform

      Effect が適用されるトランスフォーメーションチャンネルを指定します(Translation、Rotation、Scale)。

      (任意) Effect Multiplier

      Effect 値のスケール係数。

      Effects

      セカンダリモーションで使用したいエフェクトのタイプを決定します(Lag/Overshoot、Jiggle、Spring)。

      (任意) Gravity

      オンの時、Look At拘束タイプのセットアップを使用して重力を再現します。

      (任意) Blend

      エフェクトを適用する Frame Range のサブセットと、エフェクトのアニメーションをイーズイン/イーズアウトする方法を指定します。

    Note

    • Source Joint Group に指定できるのは 1つのジョイント だけです。

    • ソースジョイントはアニメートされている必要があります。アニメーションがないと、変更する動きがないため、エフェクトによる目に見える効果はありません。

  5. (任意) キネマティクスソルバを使用すると、モーションエフェクトの伝搬とジョイントの制御が容易になります。

    セカンダリモーションの作成では、モーションエフェクトをすべてのターゲットジョイントに伝搬したり、影響を受けるジョイントチェーンを制御するために、キネマティクスソルバの力を少し借りる必要がある場合があります。 セカンダリモーションで次のキネマティクスソルバを使用します。

  6. セカンダリモーションのセットアップの結果を確認します。

    Joint Deform SOPノードを使用して、セカンダリモーションのセットアップの結果をビューポートに表示します。

セカンダリモーションの例

例1: ローカルトランスフォームによって駆動されるセカンダリモーション

この例のセカンダリモーションのセットアップでは、親ジョイントのアニメーションおよびモーションエフェクトが、子ジョイントのローカルトランスフォームを駆動します。

Tip

この種のローカルトランスフォームに基づくセカンダリモーションセットアップは、基本的に自動でジョイントチェーンにモーションを伝搬するため、階層に最適です。

このキャラクタでは、まずオオカミにTポーズまたは 静止ポーズ (rest_transform)を設定/作成します。 このようにするのは、このセットアップはローカルトランスフォームを使用し、 且つ オオカミのターゲットジョイント( Joint Group )の向きがソースジョイント( Source Joint Group )の向きとは異なるからです。 Rig Stash Pose SOPノードがrest_transformアトリビュートを作成します。

Secondary Motion SOPノードで、 Source Joint Group はオオカミの尾の根元にあるジョイントで、 Joint Group のメンバーは尾の残りのジョイントです。

オオカミモデル提供: Massimo Righi氏

Source Joint Group およびそのジャンプアニメーションが、セカンダリモーションを駆動します。 Lag/Overshoot タイプのモーションエフェクト( Effect ▸ Lag/Overshoot )が Source Joint Group に適用されます。

Note

  • Source Joint Group に指定できるのは 1つのジョイント だけです。

  • ローカルトランスフォームを使用する場合は特に、ソースジョイントがアニメートされている必要があります。アニメーションがないと、変更する動きがないため、エフェクトによる目に見える効果はありません。

Secondary Motion SOP ノードは、 アニメーション である Source Joint Group の元のローカルポイントトランスフォーム( Mode ▸ Local Transform )と、Lag/Overshootエフェクトの間の回転の差( Extract Transform ▸ Rotation )を特定の時間フレーム( Frame Range )で分析して、 モーションの差分(デルタ) を計算します。

次に、 Joint GroupSource Joint Group からのポイント静止トランスフォーム( Rest Pose Attribute )を使用して、 Secondary Motion SOP ノードが Joint Group のすべてのジョイントのあらゆるローカルトランスフォームにモーションの差分(デルタ)を適用または 伝搬 し、Lag/Overshootセカンダリモーションを生成します。

Lag/Overshootモーションエフェクトを尾に適用 しない でアニメートしたオオカミ。オオカミモデル提供: Massimo Righi氏。モーションキャプチャアニメーション提供: Qualisys社

Lag/Overshootモーションエフェクトを尾に適用 して アニメートしたオオカミ。オオカミモデル提供: Massimo Righi氏。モーションキャプチャアニメーション提供: Qualisys社

例2: ワールド空間のポイントトランスフォームとキネマティクスによって駆動される、セカンダリモーション

この例のセカンダリモーションのセットアップでは、 Secondary Motion SOPノードはオオカミの尾の 根元 にあるジョイントのPワールドトランスフォームポジションを使用して、オオカミの尾の 先端 のジョイントに Spring エフェクトを適用します。次に Solver Curve VOPノードを使用して、そのエフェクトを尾の残りの部分に伝搬し、キネマティクスで尾の動きを駆動します。

このキャラクタでは、 Source Joint Group はオオカミの尾の根元にあるジョイントで、 Joint Group は、オオカミの尾の先端にあるジョイントです。

オオカミモデル提供: Massimo Righi氏

Source Joint Group およびそのワールド空間での動きが、セカンダリモーションを駆動します。 Spring タイプのモーションエフェクト( Effect ▸ Spring )が Source Joint Group に適用されます。

Note

  • Source Joint Group に指定できるのは 1つのジョイント だけです。

  • ソースジョイントはアニメートされている必要があります。アニメーションがないと、変更する動きがないため、エフェクトによる目に見える効果はありません。

Secondary Motion SOP ノードは、 Source Joint Group のワールドトランスフォーム ポジション ( Mode ▸ Other Attribute ▸ Attributes ▸ P )とSpringエフェクトの間のトランスフォームの差( Extract Transform )を特定の時間フレーム( Frame Range )で分析して、 モーションの差分(デルタ) を計算します。

次に、 Secondary Motion SOP ノードは スケールされた ( Effect Multiplier )モーションの差分(デルタ)を Joint Group に適用し、Springセカンダリモーションを生成します。

P ワールドトランスフォームのみを使用してエフェクトを適用した場合、完全なSpringモーションエフェクトは尾全体には作成されません。オオカミの尾の残りのジョイントに、エフェクトがまだ伝搬されていないからです。ここで大変役立つのが、 Solver Curve VOPノードです。

Springモーションエフェクトを尾の先端のジョイントに適用 した が、カーブソルバなしでアニメートしたオオカミ。オオカミモデル提供: Massimo Righi氏。モーションキャプチャアニメーション提供: Qualisys社

オオカミのネットワークには Rig Stash Pose SOPノードがあります。このノードには、カーブソルバのキネマティクスをセットアップする3つのVOPが含まれています。 尾の先端のジョイント( Joint Group )とSpringエフェクトを使用して、尾全体の動きを駆動し、尾のジョイントチェーンの長さを維持します。 VOPは、 Get Point Transforms VOP Solver Curve VOP Set Point Transforms VOPです。

Get Point Transforms VOP は、オオカミの尾のすべてのポイントのポイントトランスフォームを取得します。これらの Group ポイントが、キネマティクスの解決の ターゲット になります。

次に、 Solver Curve VOP はそれらのターゲットポイントをカーブソルバの Control Points に接続します。 この例では、コントロールポイントはポイント38(尾の最初のジョイント)、ポイント40(尾の中間のジョイント)、ポイント43(尾の先端のジョイント)です。 ポイント43は重要です。 Secondary Motion SOP によって元のトランスフォームから変更され、伝搬するモーションの差を作成する唯一のジョイントであるからです。 また、コントロールポイントが( 1つ でなく) 3つ あるのは、カーブソルバの安定性を高め、十分なひねりを加えたいからです。

Tip

または、 Full Body IK SOPノードを使用して、尾のセットアップのキネマティクスを解決することもできます。

オオカミモデル提供: Massimo Righi氏

最期に、 Set Point Transforms VOPSolver Curve VOPControl PointsGet Point Transforms VOPGroup ターゲットポイントに接続して、Springモーションエフェクトを尾のすべてのジョイントに伝搬し、カーブのキネマティクスの解決によって動きを制御します。

Springモーションエフェクトとカーブソルバを尾に適用してアニメートしたオオカミ(ジョイントを表示)。オオカミモデル提供: Massimo Righi氏。モーションキャプチャアニメーション提供: Qualisys社

Springモーションエフェクトとカーブソルバを尾に適用してアニメートしたオオカミ(ジョイントは非表示)。オオカミモデル提供: Massimo Righi氏。モーションキャプチャアニメーション提供: Qualisys社

例3: ジョイント制限と重力を使用したセカンダリモーション

この例では、セカンダリモーションのセットアップ、オオカミの頭の動き、 Gravity が、耳のタグのセカンダリモーションを駆動します。 タグのジョイントの ジョイント制限 によって、オオカミが頭を振るアニメーション中、タグが回転しすぎないようにします。

このキャラクタでは、まずオオカミにTポーズまたは 静止ポーズ (rest_transform)を設定、作成します。 このようにするのは、このセットアップはローカルトランスフォームを使用し、 且つ オオカミのターゲットジョイント( Joint Group )の向きがソースジョイント( Source Joint Group )の向きとは異なるからです。 Rig Stash Pose SOPノードがrest_transformアトリビュートを作成します。

次に、 Configure Joints SOPノードが、オオカミの耳のタグが付いているジョイントに Rotation Limits と適切な Rotation Order (Zはひねりで、この軸を中心にタグが回転します)を定義し、それをfbik_jointconfigアトリビュートに保存します。 これにより、セカンダリモーション中、耳のタグが静止位置から どれくらい 移動できるかを制限することができます。 この回転のジョイント制限によって、耳のタグがオカミの頭の中まで回転したり、耳を一周するなど、過度に回転するのを防ぐことができます。

ModeRagdoll に設定します。このセットアップでは、 回転 のジョイント制限のみが必要だからです。 しかし、多くの場合、セカンダリモーションのジョイント制限のセットアップでは、 Mode ▸ Rig Pose が最適なモードです。

下流の Secondary Motion SOP ではlocaltransformを使用するので、 Rest Pose Attribute パラメータも オン にします。

オオカミモデル提供: Massimo Righi氏

Secondary Motion SOP ノードは、オオカミの耳のタグにモーションエフェクトをセットアップします。 セカンダリモーションの Source Joint Group はオオカミの頭のジョイント、 Joint Group はタグがオオカミの耳に差し込まれているポイントです。

オオカミモデル提供: Massimo Righi氏

Source Joint Group および頭を振るアニメーションが、セカンダリモーションを駆動します。 Lag/Overshoot タイプのモーションエフェクト( Effect ▸ Lag/Overshoot )が Source Joint Group に適用されます。

Note

  • Source Joint Group に指定できるのは 1つのジョイント だけです。

  • ローカルトランスフォームを使用する場合は特に、ソースジョイントがアニメートされている必要があります。

アニメーションがないと、変更する動きがないため、エフェクトによる目に見える効果はありません。

セカンダリモーションだけでは、オオカミの耳のタグはそれほどリアルに見えません。 衝突やフォースが適用されていないからです。これを解決するには、 Secondary Motion SOP ノードの Gravity 設定で2つの軸のLook At拘束タイプのセットアップを使用し、重力を 再現 します。 このキャラクタでは:

  • Gravity Joint Group は、オオカミの耳のタグが付いているジョイントです。

  • Gravity Force Direction は、 Gravity Joint Group ジョイントを向けたい方向です。Y軸の-1度に設定されています。

  • Lookat Axis は、 Gravity Force Direction と同じ方向に向けたい軸です。オオカミの耳のタグが移動する平面でもあります。-Zに設定されています。

  • Lookup Axis は、オオカミの耳のタグのジョイントのひねりの軸です。耳のタグが回転する平面でもあります。Xに設定されています。

  • Blend 値は、どれくらい強く Gravity がオオカミの耳のタグに影響するかを決定します。この値を調整して、オオカミの耳のタグの理想の静止位置を設定します。

オオカミの耳のタグの重力のブレンドを調整。Massimo Righi氏によるオオカミモデル提供

Secondary Motion SOP ノードは、 アニメーション である Source Joint Group の元のローカルポイントトランスフォーム( Mode ▸ Local Transform )と、Lag/Overshootエフェクトの間の回転の差( Extract Transform ▸ Rotation )を特定の時間フレーム( Frame Range )で分析して、 モーションの差分(デルタ) を計算します。

次に、 Joint GroupSource Joint Group からのポイント静止トランスフォーム( Rest Pose Attribute )を使用して、 Configuration Attribute (fbik_jointconfig)によって引かれるジョイント制限、現在の Gravity 設定、 Secondary Motion SOP ノードが、スケールされた( Effect Multiplier )モーションの差分(デルタ)を Joint Group のすべてのジョイントのローカルトランスフォームに適用または 伝搬 し、重力のセカンダリモーション付きのLag/Overshootエフェクトを生成します。

KineFX

プロシージャルリギング

互換性

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

ペイン