On this page |
|
概要 ¶
従来のキーフレームアニメーションでは、現実感のある軌道のモーションを実現するのは困難で、手間もかかります。 その現実感のある軌道を作るには、弧に沿わせていくつものキーフレームを設定する必要があるうえに、その軌道の特性(高さや距離など)を変更したら、その弧に沿わせて複数のポーズやキーフレームを更新しなければなりません。
物理ベースのモーションを使用すると、重要なポーズにおおまかにキーを設定すると、ポーズ間のモーションとスペーシング(間隔)が物理ベースの軌道に置換されます。 これによって、シーン内で軌道を扱うアニメーションワークフローが大幅に迅速化および簡略化することができます。
HoudiniのProjectile Motion SOPおよびPendulum Motion SOPを使用することで、物理ベースのモーションを算出することができます。 これらのノードは、キャラクタのスケルトンアニメーションを入力として受け取り、アニメーション区間をProjectile(斜方投射)/Pendulum(振り子)モーションに置換します。 これらのノードによってキャラクタの位置は変更されますが、キャラクタのポーズは変更されません。
基本的なキーフレームアニメーションセットアップ ¶
キーフレームアニメーションの基本セットアップでは、キャラクタアニメーションリグから始め、リグにキーフレームを設定し、Projectile(斜方投射)/Pendulum(振り子)モーションを追加して、そのモーションをリグに戻します。
以下の例では、ジャンプするキャラクタのシンプルなキーフレームアニメーションを使用しています。
-
ノードネットワークをセットアップします:
-
キャラクタアニメーションリグノード(アニメーションスケルトン出力)をProjectile Motion SOP(1番目の入力)に接続します。ジャンプモーションのキャラクタアニメーションリグにキーフレームが設定されます。
-
そのProjectile Motion SOP(1番目の出力)を、もう1つのコピーのキャラクタアニメーションリグノード(アニメーションスケルトン入力)に接続します。この2つ目のキャラクタアニメーションリグには、Projectile Motion(斜方投射)が加わったアニメーションが付くようになります。
-
-
そのProjectile Motion SOPの Joint Group に、スケルトンのロコモーションジョイントを設定します。このロコモーションジョイントとは、スケルトン全体のモーションを定義しているジョイントのことです。通常、
C_COG
のような名前が付いています。特定のジョイントを使用して斜方投射/振り子のモーションパスを算出する方法については、How-toを参照してください。
-
初期設定のままで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ビューアステートのハンドルを使用して調整します。
Note
Shift Animation After Projectile をオンにすると、Projectile Motion(斜方投射)後のアニメーションがその新しい終了位置から継続します。
Projectile Motion(斜方投射)の開始位置または終了位置に変更を加える場合、 Shift Animation Before Projectile または Shift Animation After Projectile をオンにしないと、アニメーションがカクつきます。
Projectile Motion SOPのパラメータエディタからでも、 Positions セクションの Start Position および Target Position の値を編集することで、開始位置および終了位置を変更することができます。 弧の高さを変更するには、 Life パラメータを調整します。
複数のキー間にProjectile Motion(斜方投射)を追加する ¶
以下の例では、サッカーボールをリフティングするアニメーションを使用しています。
ball_positions
HDAで、ボールの様々な位置にキーフレームが設定されています。
ball_positions
のDisplayフラグをオンにして、元のキーフレームアニメーションを表示します(soccer_juggler
は以下のアニメーションでテンプレート化されています)。
-
Projectile Motion SOPの Joint Group に、ボールの中心のジョイントを設定します。
-
複数のキーフレーム間にProjectile Motion(斜方投射)を簡単に追加するには、Projectile Motion SOPの Bake オプションを使用します:
Bake ボタンをクリックします。Projectile Motion Bakingウィンドウで:
-
Bake To のデフォルトは、現在のProjectile Motion SOPです。
-
Bake From には、位置にキーが打たれているキャラクタアニメーションリグを設定します。この例では
ball_positions
です。 -
Frame Start と Frame 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_positions2
のDisplayフラグをオンにして、Projectile Motion(斜方投射)が加えられたアニメーションを表示します。
Projectile(斜方投射)とPendulum(振り子)のモーションを組み合わせる ¶
以下のアニメーションでは、キャラクタアニメーションリグにキーを設定して、スイングアニメーションを作成しています:
元のアニメーションのおおよそのパスに基づいて、以下の物理ベースのモーションがアニメーションに追加されています:
-
フレーム1-40: Pendulum(振り子)
-
フレーム40-50: Projectile(斜方投射)
-
フレーム50-100: Pendulum(振り子)
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つ目のPendulum Motion SOPで、 Pendulum Sections マルチパラメータの横のをクリックします。これにより、Pendulum Motionの新規セクションのパラメータタブが追加されます。
-
Create Pendulum Motion をオンにします。
-
Range to Replace を
1
および40
に設定します。 -
振り子モーションのセクションを追加すると、振り子のピボット位置はデフォルトで原点になります。Pendulum Motionビューアステートでピボット位置を変更するか、 Pivot パラメータを調整します。
-
End at Target をオンにして、キャラクタが振り子のスイングの終点に到達後、後方にスイングしないようにします。
フレーム40-50: Projectile Motion ¶
-
Projectile Motion SOPで、 Projectile Sections マルチパラメータの横のをクリックします。これにより、Projectile Motionの新規セクションのパラメータタブが追加されます。
-
Create Projectile Motion をオンにします。
-
Range to Replace を
40
および50
に設定します。 -
Projectile Motionビューアステートで弧の高さを変更するか、 Life パラメータを調整します。
フレーム50-100: Pendulum Motion ¶
-
2つ目のPendulum Motion SOPで、 Pendulum Sections の横のをクリックしてPendulum Motionの新規セクションを追加します。
-
Create Pendulum Motion をオンにします。
-
Range to Replace を
50
および100
に設定します。 -
ピボット位置を変更します。
-
End at Target をオンにして、キャラクタが振り子のスイングの終点に到達後、後方にスイングしないようにします。
-
Post Behavior を Hold に設定して、キャラクタが振り子のスイングの終点に到達後、元のアニメーションの終了位置にポップする(カクつく)のではなく、その位置に留まるようにします。
振り子のピボット位置と斜方投射の高さを微調整したら、アニメーションは以下のようになります:
手の位置を調整する ¶
振り子のスイング時の手が常にピボットを向くようにその手の位置を変更したい場合:
-
Pendulum Motion SOPで、 Pivot Group の横のをクリックします。
-
ビューポートまたはRig Treeウィンドウで手および指のジョイントをすべて選択し、 Accept をクリックします。
遷移を滑らかにする ¶
アニメーションでは、Projectile Motionと2番目のPendulum Motionの間の遷移がカクついています。
遷移を滑らかにするには:
-
2つ目のPendulum Motion SOPの Transitions セクションで、 Transition In をオンにします。
-
Transition In 値は、滑らかな遷移領域を作成するために、Pendulum Motionの開始前後に削除されるフレームの数です。滑らかな遷移になるまで、 Transition In 値を調整します。
速度を調整する ¶
1つ目のPendulum Motion SOPで Speed パラメータを大きくして、振り子が上方にスイングする初期速度を上げます。これにより、上方向(重力の逆)の速度が上がります。 それでもキャラクタを前に進めるには、 Reverse Direction をオンにします。
アニメーションの初期速度を上げると、2つ目のPendulum Motionの冒頭にかけてキャラクタが浮かび、速度が落ちているように見えます。 2つ目のPendulum Motion中も速い速度を維持するには、2つ目のPendulum Motion SOPで Maintain Input Speed をオンにします。 Reverse Direction もオンにして、下方向のスイングでも速度が上がるようにします。
モーションリターゲットに物理ベースのモーションを追加する ¶
以下の例では、物理ベースのモーションをモーションリターゲットワークフローに追加します。 まず、カピバラジオメトリに転送されたおおまかなジャンプアニメーションから始めます。
おおまかなジャンプアニメーションは、モーションクリップとして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 パラメータはpendulummotion1
とpendulummotion2
と同じ区間に設定されています。
ノードの使い方 |
利点 |
---|---|
異なる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パスのデフォルトセットアップが作成されます。
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区間を作成します。 |
入力アニメーションモーションパスからのカスタムのフレーム範囲を使用する |
これらのパラメータは、Motion Path入力(2番目の入力)に何も接続されていない場合にのみ利用可能です。 |
特定のジョイントを使用して、Projectile/Pendulumモーションパスを算出する |
Joint Group で、スケルトンの重心に寄与させたいジョイントを指定します:
Joint Group のすべてのジョイントが、スケルトンの重心に均等に寄与します。その重心からProjectile/Pendulumモーションパスが算出されます。 Note Joint Group で指定されたジョイントとその子ジョイントのみが、Projectile/Pendulumモーションパスに沿って移動します。 ロコモーションジョイントはスケルトン全体と共に移動する親ジョイントのため、常に Joint Group に含まれるジョイントの1つでなければなりません。 子ジョイントが Joint Group で指定され、ロコモーションジョイントが指定されていない場合、子ジョイントはProjectile/Pendulumモーションパスに沿って移動しますが、ロコモーションジョイントは元のアニメーションのモーションパスに追従します。 Note 多くのスケルトンには、単一位置(通常は原点)に留まるルートジョイントがあります。 このルートジョイントは通常、(ロコモーションジョイントとは異なり)残りのスケルトンと共に移動しません。 そのため、これをスケルトンの重心に寄与させるのは一般的ではありません。 Joint Group でどのジョイントも指定されていない場合、ルートジョイントを含むスケルトン内のすべてのジョイントが重心に寄与しますが、これは通常望ましいことではありません。 そのため、 Joint Group を空っぽのままにせず、重心に寄与させたいすべてのジョイントを明示的に指定することを推奨します。 一部のジョイントをスケルトンの重心にさらに寄与させたい場合:
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モーションの開始を滑らかにするには:
Projectile/Pendulumモーションの終了を滑らかにするには:
Projectile/Pendulumモーションの開始または終了位置を変更したために、アニメーションにポップ(カクつき)が発生している場合:
|
入力モーションパスから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(斜方投射)の高さを調整する |
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 パラメータを調整します。 |