Houdini 20.0 キャラクタ KineFX

物理ベースのモーション

On this page

概要

従来のキーフレームアニメーションでは、現実感のある軌道のモーションを実現するのは困難で、手間もかかります。 その現実感のある軌道を作るには、弧に沿わせていくつものキーフレームを設定する必要があるうえに、その軌道の特性(高さや距離など)を変更したら、その弧に沿わせて複数のポーズやキーフレームを更新しなければなりません。

物理ベースのモーションを使用すると、重要なポーズにおおまかにキーを設定すると、ポーズ間のモーションとスペーシング(間隔)が物理ベースの軌道に置換されます。 これによって、シーン内で軌道を扱うアニメーションワークフローが大幅に迅速化および簡略化することができます。

おおまかなポージングと軌道
物理ベースのモーションと軌道

HoudiniのProjectile Motion SOPおよびPendulum Motion SOPを使用することで、物理ベースのモーションを算出することができます。 これらのノードは、キャラクタのスケルトンアニメーションを入力として受け取り、アニメーション区間をProjectile(斜方投射)/Pendulum(振り子)モーションに置換します。 これらのノードによってキャラクタの位置は変更されますが、キャラクタのポーズは変更されません。

基本的なキーフレームアニメーションセットアップ

キーフレームアニメーションの基本セットアップでは、キャラクタアニメーションリグから始め、リグにキーフレームを設定し、Projectile(斜方投射)/Pendulum(振り子)モーションを追加して、そのモーションをリグに戻します。

以下の例では、ジャンプするキャラクタのシンプルなキーフレームアニメーションを使用しています。

ジャンプのキーフレームアニメーション
  1. ノードネットワークをセットアップします:

    • キャラクタアニメーションリグノード(アニメーションスケルトン出力)をProjectile Motion SOP(1番目の入力)に接続します。ジャンプモーションのキャラクタアニメーションリグにキーフレームが設定されます。

    • そのProjectile Motion SOP(1番目の出力)を、もう1つのコピーのキャラクタアニメーションリグノード(アニメーションスケルトン入力)に接続します。この2つ目のキャラクタアニメーションリグには、Projectile Motion(斜方投射)が加わったアニメーションが付くようになります。

  2. そのProjectile Motion SOPの Joint Group に、スケルトンのロコモーションジョイントを設定します。このロコモーションジョイントとは、スケルトン全体のモーションを定義しているジョイントのことです。通常、C_COGのような名前が付いています。

    特定のジョイントを使用して斜方投射/振り子のモーションパスを算出する方法については、How-toを参照してください。

  3. 初期設定のままでProjectile Motion SOPをネットワークに接続した時点では、 Projectile Sections マルチパラメータは空っぽになっているので、Projectile Motion(斜方投射)がアニメーションに追加されていません。Projectile Motion(斜方投射)を追加するには:

    • Projectile Sections マルチパラメータの横のをクリックします。これにより、Projectile Motionの各新規セクションにパラメータタブが追加されます。

    • Create Projectile Motion をオンにします。

    • Range to Replace には、Projectile Motion(斜方投射)に置き換えたい元のアニメーションのフレーム範囲を設定します。

      Tip

      1つ目のキャラクタアニメーションリグノードを選択して、キーフレームが設定されているフレームを確認してから、 Range to Replace にそれらのフレームを使用してください。

Projectile Motion(斜方投射)付きのジャンプアニメーション

開始/終了位置および軌道を調整する

開始位置と終了(ターゲット)位置、Projectile Motion(斜方投射)パスの軌道は、Projectile Motionビューアステートのハンドルを使用して調整します。

Note

Shift Animation After Projectile をオンにすると、Projectile Motion(斜方投射)後のアニメーションがその新しい終了位置から継続します。

Projectile Motion(斜方投射)の軌道を調整

Projectile Motion(斜方投射)の開始位置または終了位置に変更を加える場合、 Shift Animation Before Projectile または Shift Animation After Projectile をオンにしないと、アニメーションがカクつきます。

Shift Animation Before Projectileがオンになっていない場合のポップ(カクつき)

Projectile Motion SOPのパラメータエディタからでも、 Positions セクションの Start Position および Target Position の値を編集することで、開始位置および終了位置を変更することができます。 弧の高さを変更するには、 Life パラメータを調整します。

複数のキー間にProjectile Motion(斜方投射)を追加する

以下の例では、サッカーボールをリフティングするアニメーションを使用しています。 ball_positions HDAで、ボールの様々な位置にキーフレームが設定されています。

サッカーボールのリフティングのノードネットワーク

ball_positionsDisplayフラグをオンにして、元のキーフレームアニメーションを表示します(soccer_jugglerは以下のアニメーションでテンプレート化されています)。

ボールの位置にキーフレームが設定されています
  1. Projectile Motion SOPの Joint Group に、ボールの中心のジョイントを設定します。

  2. 複数のキーフレーム間にProjectile Motion(斜方投射)を簡単に追加するには、Projectile Motion SOPの Bake オプションを使用します:

    Bake ボタンをクリックします。Projectile Motion Bakingウィンドウで:

    • Bake To のデフォルトは、現在のProjectile Motion SOPです。

    • Bake From には、位置にキーが打たれているキャラクタアニメーションリグを設定します。この例ではball_positionsです。

    • Frame StartFrame End の値には、デフォルトでアニメーションのフレーム範囲が入力されます。

    • Bake All をクリックします。

そのProjectile Motion SOPでは、その Bake From ノード内の各キー間でProjectile Motion区間が作成されます。 それぞれのProjectile Motion区間毎に、 Projectile Sections マルチパラメータ内にパラメータタブが追加されます。 Projectile Motion区間を削除するには、その削除したいタブ内にあるをクリックします。

Note

Bake オプションは、初期セットアップ手順として使用してください。 Projectile Sections内のパラメータを既に調整していた場合、 Bake を再度使用すると、すべてのProjectile Motion区間が再生成されるので、その変更が失われます。

そのProjectile Motion SOPの出力をボールアニメーションリグのball_positions2に接続します。 ball_positions2Displayフラグをオンにして、Projectile Motion(斜方投射)が加えられたアニメーションを表示します。

キーフレーム間に追加されたProjectile Motion(斜方投射)

Projectile(斜方投射)とPendulum(振り子)のモーションを組み合わせる

以下のアニメーションでは、キャラクタアニメーションリグにキーを設定して、スイングアニメーションを作成しています:

キーフレームが設定されたスイングアニメーション

元のアニメーションのおおよそのパスに基づいて、以下の物理ベースのモーションがアニメーションに追加されています:

  • フレーム1-40: Pendulum(振り子)

  • フレーム40-50: Projectile(斜方投射)

  • フレーム50-100: Pendulum(振り子)

PendulumとProjectileを含んだノードネットワーク

Note

複数のProjectile Motion SOPとPendulum Motion SOPを接続するときは、1つのSOPの2つの出力を、次のSOPの2つの入力に接続します。 アニメーションに物理が追加されると、斜方投射/振り子のモーション中、元のアニメーションのタイムラインが収縮または延長されます。 これは、斜方投射/振り子のモーションの後のアニメーションが、斜方投射/振り子モーションなしの場合と同じになるようにするためです。 このタイムワープ情報は、Motion Path入力および出力を介して渡されるため、下流にあるProjectile Motion SOPやPendulum Motion SOPは、元のアニメーションのタイムラインに基づいて Range to Replace パラメータを定義することができます。

Projectile(斜方投射)とPendulum(振り子)のモーションを追加する

フレーム1-40: Pendulum Motion

  1. 1つ目のPendulum Motion SOPで、 Pendulum Sections マルチパラメータの横のをクリックします。これにより、Pendulum Motionの新規セクションのパラメータタブが追加されます。

  2. Create Pendulum Motion をオンにします。

  3. Range to Replace1および40に設定します。

  4. 振り子モーションのセクションを追加すると、振り子のピボット位置はデフォルトで原点になります。Pendulum Motionビューアステートでピボット位置を変更するか、 Pivot パラメータを調整します。

    Pendulum Motionビューアステートでピボットを移動
  5. End at Target をオンにして、キャラクタが振り子のスイングの終点に到達後、後方にスイングしないようにします。

フレーム40-50: Projectile Motion

  1. Projectile Motion SOPで、 Projectile Sections マルチパラメータの横のをクリックします。これにより、Projectile Motionの新規セクションのパラメータタブが追加されます。

  2. Create Projectile Motion をオンにします。

  3. Range to Replace40および50に設定します。

  4. Projectile Motionビューアステートで弧の高さを変更するか、 Life パラメータを調整します。

    Projectile Motionビューアステートで弧の高さを調整

フレーム50-100: Pendulum Motion

  1. 2つ目のPendulum Motion SOPで、 Pendulum Sections の横のをクリックしてPendulum Motionの新規セクションを追加します。

  2. Create Pendulum Motion をオンにします。

  3. Range to Replace50および100に設定します。

  4. ピボット位置を変更します。

  5. End at Target をオンにして、キャラクタが振り子のスイングの終点に到達後、後方にスイングしないようにします。

  6. Post BehaviorHold に設定して、キャラクタが振り子のスイングの終点に到達後、元のアニメーションの終了位置にポップする(カクつく)のではなく、その位置に留まるようにします。

振り子のピボット位置と斜方投射の高さを微調整したら、アニメーションは以下のようになります:

ProjectileとPendulumのモーションが加えられたアニメーション

手の位置を調整する

振り子のスイング時の手が常にピボットを向くようにその手の位置を変更したい場合:

  1. Pendulum Motion SOPで、 Pivot Group の横のをクリックします。

  2. ビューポートまたはRig Treeウィンドウで手および指のジョイントをすべて選択し、 Accept をクリックします。

手が振り子のピボットを向くように調整

遷移を滑らかにする

アニメーションでは、Projectile Motionと2番目のPendulum Motionの間の遷移がカクついています。

ProjectileとPendulumのモーション間のカクついた遷移

遷移を滑らかにするには:

  1. 2つ目のPendulum Motion SOPの Transitions セクションで、 Transition In をオンにします。

  2. Transition In 値は、滑らかな遷移領域を作成するために、Pendulum Motionの開始前後に削除されるフレームの数です。滑らかな遷移になるまで、 Transition In 値を調整します。

ProjectileとPendulumのモーション間の滑らかな遷移

速度を調整する

1つ目のPendulum Motion SOPで Speed パラメータを大きくして、振り子が上方にスイングする初期速度を上げます。これにより、上方向(重力の逆)の速度が上がります。 それでもキャラクタを前に進めるには、 Reverse Direction をオンにします。

振り子モーションの元の速度
初期速度を上げた1つ目の振り子モーション

アニメーションの初期速度を上げると、2つ目のPendulum Motionの冒頭にかけてキャラクタが浮かび、速度が落ちているように見えます。 2つ目のPendulum Motion中も速い速度を維持するには、2つ目のPendulum Motion SOPで Maintain Input Speed をオンにします。 Reverse Direction もオンにして、下方向のスイングでも速度が上がるようにします。

2つ目のPendulum Motion開始時も速度を維持

モーションリターゲットに物理ベースのモーションを追加する

以下の例では、物理ベースのモーションをモーションリターゲットワークフローに追加します。 まず、カピバラジオメトリに転送されたおおまかなジャンプアニメーションから始めます。

モーションクリップアニメーションと軌道

おおまかなジャンプアニメーションは、モーションクリップとしてStash SOPに格納されています。 そして、Full Body IK SOPからのモーションがカピバラに転送されています。

モーションリターゲットワークフロー

Full Body IK SOPとBone Deform SOPの間にProjectile Motion SOPを接続して、物理ベースのモーションを追加します。 必要に応じて、Projectile Motion SOPの2番目の出力をMerge SOPに接続し、最終出力でProjectile Motionのパスを表示します。

モーションリターゲットワークフローでの物理ベースのモーション

Projectile Motion SOPで:

  • Projectile Sections マルチパラメータの横のをクリックして、Projectile Motionの新規セクションを追加します。

  • Create Projectile Motion をオンにします。

  • Range to Replace を元のアニメーションのフレーム範囲に設定して、Projectile Motion(斜方投射)に置き換えます。

  • 必要に応じて、 Start Position を調整します。 Shift Animation Before Projectile をオンにして、Projectile Motion区間前のアニメーションが、そのProjectile Motionへ滑らかに遷移するようにします。

  • 必要に応じて、 Target Position を調整します。 Shift Animation After Projectile をオンにして、Projectile Motionが滑らかに後のアニメーションに遷移するようにします。

物理ベースのモーションが付けられたアニメーションと軌道

ネットワーク管理

複数のProjectile/Pendulum Motion区間を、1つのProjectile Motion SOPまたはPendulum Motion SOPに配置したり、異なる区間を別々のノードに配置することもできます。

以下のノードネットワークでは、左側のProjectile Motion SOPとPendulum Motion SOPそれぞれに、Projectile Motion/Pendulum Motionの1区間が含まれています。 右側のpendulummotion3には、2区間のPendulum Motionが含まれており、 Range to Replace パラメータはpendulummotion1pendulummotion2と同じ区間に設定されています。

個別のノードと組み合わせのノード

ノードの使い方

利点

異なるProjectile/Pendulum Motion区間を、1つのProjectile/Pendulum Motion SOPに組み合わせる

管理するノードが少なくなります。

Projectile/Pendulum Motion区間毎に別々のノードを使用する

アニメーション全体を簡単に調整することができます。最初のProjectile/Pendulum Motionを変更して、それ以降の各ノードの Maintain Input Speed をオンにすることで、最初のProjectile/Pendulum Motion SOPでの変更が、残りのノードチェーンに伝搬されます。

How to

To...Do this

アニメーション区間をProjectile/Pendulum Motion区間に置き換える

Range to Replace に、Projectile/Pendulum Motionに置き換えたい元のアニメーションのフレーム範囲を設定します。

複数のキーフレームが付けられたアニメーションに対してProjectile/Pendulum Motionを作成する

Bake ボタンを使用すると、各キーの間にProjectile/Pendulum Motionパスのデフォルトセットアップが作成されます。

  1. Bake ボタンをクリックします。

  2. Projectile/Pendulum Motion Bakingウィンドウで:

    • Bake To のデフォルトは、現在のProjectile/Pendulum Motion SOPです。

    • Bake From には、位置をキーフレーム設定したキャラクタアニメーションリグを設定します。

    • キーが検索されるフレーム範囲を設定します。これらのキー間で、Projectile/Pendulum Motion区間が作成されます。

      • Use Frame Range from Playbar をオンにします。

        または

      • Frame Start 値と Frame End 値を設定します。

    • Bake All をクリックします。

Projectile/Pendulum Motion SOPで、 Bake From ノードの各キー間にProjectile/Pendulum Motion区間が作成されます。 Projectile/Pendulum Sections マルチパラメータには、それぞれの新しいProjectile/Pendulum Motion区間毎にパラメータタブが追加されます。

Note

Bake Current Section オプションは、現在いるアニメーション区間にProjectile/Pendulum Motionを作成します。 例えば、フレーム18にいて、アニメーションのフレーム10と20にキーが設定されている場合、 Bake Current Section はフレーム10と20の間にProjectile/Pendulum Motion区間を作成します。

入力アニメーションモーションパスからのカスタムのフレーム範囲を使用する

  1. Motion Path セクションで、 Create Motion Path from Input Animation をオンにします。

  2. Clip RangeCustom Frame Range に設定します。

  3. Frame Range を開始フレームおよび終了フレームに設定します。

これらのパラメータは、Motion Path入力(2番目の入力)に何も接続されていない場合にのみ利用可能です。

特定のジョイントを使用して、Projectile/Pendulumモーションパスを算出する

Joint Group で、スケルトンの重心に寄与させたいジョイントを指定します:

  1. Joint Group の横のをクリックします。

  2. ビューポートまたはRig Treeウィンドウでジョイントを選択し、 Accept をクリックします。

Joint Group のすべてのジョイントが、スケルトンの重心に均等に寄与します。その重心からProjectile/Pendulumモーションパスが算出されます。

Note

Joint Group で指定されたジョイントとその子ジョイントのみが、Projectile/Pendulumモーションパスに沿って移動します。 ロコモーションジョイントはスケルトン全体と共に移動する親ジョイントのため、常に Joint Group に含まれるジョイントの1つでなければなりません。 子ジョイントが Joint Group で指定され、ロコモーションジョイントが指定されていない場合、子ジョイントはProjectile/Pendulumモーションパスに沿って移動しますが、ロコモーションジョイントは元のアニメーションのモーションパスに追従します。

Note

多くのスケルトンには、単一位置(通常は原点)に留まるルートジョイントがあります。 このルートジョイントは通常、(ロコモーションジョイントとは異なり)残りのスケルトンと共に移動しません。 そのため、これをスケルトンの重心に寄与させるのは一般的ではありません。

Joint Group でどのジョイントも指定されていない場合、ルートジョイントを含むスケルトン内のすべてのジョイントが重心に寄与しますが、これは通常望ましいことではありません。 そのため、 Joint Group を空っぽのままにせず、重心に寄与させたいすべてのジョイントを明示的に指定することを推奨します。

一部のジョイントをスケルトンの重心にさらに寄与させたい場合:

  1. Projectile/Pendulum Motion SOPの Physical Properties セクションで、 Configuration Attribute をオンにすると、fbik_jointconfigのデフォルト値に設定されます。fbik_jointconfig (Configure Joints SOPから)には、フルボディIKやラグドールなど、様々なモードでのスケルトンの挙動のジョイント設定が含まれています。

  2. Projectile/Pendulum Motion SOPの前にConfigure Joints SOPを追加します。

  3. Configure Joints SOPで、設定を行なうジョイントを選択します。

    • ビューアステートでジョイントを選択すると、それが Configurations マルチパラメータに追加されます。

      または

    • Configurations マルチパラメータの横にあるをクリックしてジョイント設定を追加し、 Group パラメータでジョイントを指定します。

  4. ジョイントのセットをモーションパスに影響させるには、Configure Joints SOPで Mass をオンにしてゼロ以外の値に設定します。

  5. 必要であれば、ジョイントの Local Center of Mass をオンにして設定し、ジョイントの重心の位置をオフセットします。

Configure Joints SOPは、 Configurations マルチパラメータのジョイントに基づいて、重心ジョイントを作成します。 Projectile/Pendulum Motion SOPは、この重心ジョイントを使用してProjectile/Pendulumモーションパスを算出します。

Projectile/Pendulumモーションの開始位置と終了位置を変更する

Projectile/Pendulum Motionビューアステートで、Projectile/Pendulumモーションパスの始点または終点にあるボックスを選択し、そのハンドルを使用して位置を調整します。

または

Positions セクションで、 Start Position および Target Position をオンにして、値を調整します。

Projectile/Pendulumモーション前後の遷移を滑らかにする

Projectile/Pendulumモーションの開始を滑らかにするには:

  1. Projectile MotionまたはPendulum Motion SOPで、 Transitions セクションの Transition In をオンにします。

  2. Transition In 値は、滑らかな遷移領域を作成するために、Projectile/Pendulumモーションパスの開始前後に削除されるフレームの数です。滑らかな遷移になるまで、 Transition In 値を調整します。

Projectile/Pendulumモーションの終了を滑らかにするには:

  1. Projectile MotionまたはPendulum Motion SOPで、 Transitions セクションの Transition Out をオンにします。

  2. Transition Out 値は、滑らかな遷移領域を作成するために、Projectile/Pendulumモーションパスの終了前後に削除されるフレームの数です。滑らかな遷移になるまで、 Transition Out 値を調整します。

Projectile/Pendulumモーションの開始または終了位置を変更したために、アニメーションにポップ(カクつき)が発生している場合:

  • 開始位置を変更した場合は、 Shift Animation Before Projectile をオンにします。

  • 終了位置を変更した場合は、 Shift Animation After Projectile をオンにします。

入力モーションパスからProjectile/Pendulumモーションへの速度を維持する

Maintain Input Speed をオンにします。

Note

Projectile Motionでは、 Maintain Input Speed がオンの場合、入力モーションパスの速度が弧の高さを決定します( Life パラメータが自動的にオフになります)。 弧の高さをビューポートで調整すると、自動的に Life パラメータがオンになり、 Maintain Input Speed がオフになります。

ビューアステートに表示されているアクティブなProjectile/Pendulumモーションパスを変更する

ビューアステートツールバーで、 Projectile フィールドを異なるProjectile/Pendulumモーション区間(パラメータエディタの Projectile Sections の数に相当)に変更するか、バリューラダーを使用して Projectile フィールドをスクロールします。

Projectile Motion(斜方投射)

To...Do this

Projectile Motion(斜方投射)の高さを調整する

  1. Projectile Motionビューアステートで、変更したいProjectile Motionを選択します。

  2. 弧の上部に表示される高さ平面(height plane)をクリックし、ハンドルを使用して高さを調整します。

Note

高さ平面(height plane)を選択し、Rを押すとトランスフォームハンドルが回転モードに切り替わります。 これにより、平面を回転させて、Projectile Motionパスがある高さに到達するのではなく、高さ平面をかすめるようにすることができます。

Projectile Motionパスに空気抵抗の効果を追加する

Physical Properties セクションで、 Mass および Drag は連携して動作します。 Drag は、Projectile Motionパスに作用する空気抵抗です。 Drag の値が高いほど、モーションパスを進むにつれてキャラクタの速度が低下します。

Mass の値が高いほど、Projectile Motionに対する Drag の効果が軽減します。

Projectile Motionパスに風の効果を追加する

Physical Properties セクションで、 Gravity 値を変更します。

Pendulum Motion(振り子)

To...Do this

アニメーションがスイングの終点に到達したら、Pendulum Motionのスイングを停止する(アニメーションが後方にスイングしないようにする)

Pendulum Motionセクションで、 End at Target をオンにします。

Pendulum Motionのスイングの開始速度を変更する

Pendulum Motionセクションで、 Speed パラメータを変更します。正の Speed はキャラクタを上方(スイングの軌道に沿って重力の逆)に放ち、負の Speed はキャラクタを下方(スイングの軌道に沿って重力と同じ方向)に放ちます。

Note

開始速度が低すぎてターゲット位置に到達しない場合、速度はターゲットに到達するのに必要な最低速度まで上げられます。

Tip

速度に負の値を使用せずに、 Reverse Direction をオンにすると、同じ速度が維持されますが、キャラクタは逆の方向に放たれます。

Pendulum Motionのスイングの平面を垂直でない方向に傾ける

Tilt パラメータを調整します。

KineFX

リグ入力の準備

プロシージャルリギング

変形

アニメーション

別表

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

KineFX19.5の機能

互換性

ペイン