Houdini 20.0 群衆シミュレーション

SOPモーションパス

SOPモーションパスを使用して少数のエージェントの挙動を変更する方法。

On this page

概要

群衆DOPワークフローはシミュレーションベースの手法を採用しています。 エージェントは常に特定のステート(状態)にあり、それがエージェントの動きや再生されるアニメーションクリップを定義します。 特定のステートになると、エージェントは例えばゴールに向かって歩いたり、ぶらついたり、他のエージェントを避けたりします。 エージェントに作用したり、その動きを誘導するフォースは、トリガーで常に評価され、エージェントの周囲で起こっていることを特定し、ある時点でエージェントを別のステートに遷移させます。 この手法は、いくつかの簡単なルールをセットアップして群衆全体の全般的な挙動を制御できるため、大規模な群衆には強力です。

DOPシミュレーションワークフローの課題は、少数のエージェントを正確に制御することです。 例えば、1つのエージェントのパスを変更したい場合、他のエージェントに影響を与えずにそのエージェントの挙動を更新するように、群衆セットアップの変更方法を考える必要があります。 群衆シミュレーションのエージェントはすべて相互に反応するので、このDOPシミュレーションワークフローだと困難です。

SOPモーションパスを使用することで、ユーザは群衆全体を再シミュレーションすることなく、少数のエージェントのモーションパスまたはアニメーションを簡単に変更することができます。 SOPモーションパスツールにはシミュレーションは含まれません。 タイムステップを1つも進めずに、フォースとトリガーを評価して、エージェントを別のステートに切り替えるかどうかを決定します。 エージェントのモーションパスが、時間の経過と共に変化するエージェントの全体的な位置を描画し、パス上で操作を実行してエージェントがどこに移動するかを決定します。

エージェントの群衆のSOPモーションパス

SOPモーションパスツールを使用すれば、ユーザは別の方法で群衆ショットをセットアップすることができます。 SOPモーションパスツールとDOPシミュレーションワークフローをうまく組み合わせることで、目的の群衆の挙動を実現することができます。

基本セットアップ

SOP群衆モーションパスツールセットはCrowd MotionPath SOPから始めます。 これはエージェントの群衆からモーションパスを生成します。 Crowd MotionPath Evaluate SOPは、そのCrowd MotionPath SOPと併用するノードです。 Crowd MotionPath Evaluate SOPは、特定のフレームでパスに沿ってエージェントの位置を決定し、エージェントでアニメーションを再生します。

Crowd MotionPath SOPとCrowd MotionPath Evaluate SOP間では、以下の操作が行なわれます:

  • エージェントのパスを操作して、パスが移動する場所を指示します。

  • 様々なトリガーに基づいて異なるアニメーションクリップ間で遷移させます。

群衆モーションパスを生成する

SOP群衆モーションパスツールの入力は、エージェントの群衆です。

Note

SOPモーションパスとDOPシミュレーションのどちらの入力群衆の作成にも、同じセットアップを使用することができます。

以下は、エージェントの群衆を作成する基本セットアップの一例です。これらのノードを群衆で使用する方法の詳細は、セットアップを参照してください。

SOPモーションパスツールを使用するための基本セットアップの例

Crowd MotionPath SOPによって生成されたモーションパスは、特定のフレーム範囲内の時間軸における各ポイントでのエージェント位置を示したカーブによって表現されます。 エージェントの正面には、時間範囲全体のパスが配置されます。 デフォルトでは、エージェントのパスは、エージェントに割り当てられているアニメーションクリップから生成されます。 モーションデータはアニメーションクリップから取得され、順再生を繰り返すことで、時間軸における各ポイントでのエージェントの位置を生成します。

Crowd MotionPath Evaluate SOPによって再生されるアニメーション

Note

Crowd MotionPathツールは、時間の経過と共にスケルトンのポーズを配置するMotionClipツールと似ています。

To...Do this

パスの生成に使用されるフレーム範囲を変更する

Crowd MotionPath SOPで、 Start/End/Inc 値を変更します。

エージェントパスの生成に使用されるアニメーションクリップ(s)を変更する

Crowd MotionPath SOPの Clip Assignment セクションの Clip Names にクリップの名前を設定します。 アニメーションクリップのライブラリがある場合、異なるクリップをいくつか指定して、エージェントが再生するクリップがランダムに選択されるようにすることができます。

  1. それぞれの Clip Names パラメータで、複数のクリップを指定することができます。

    Note

    Clip Names ドロップダウンメニューからクリップを選択する場合、クリップ名は Clip Names 内の既存のエントリのリストに追加されます。

  2. Clip Names のクリップのグループに Weight を設定します。ウェイト値を上げるほど、エージェントがこれらのクリップを再生する確率が高くなります。

  3. Clip Groups の横にあるをクリックして、様々なウェイトのクリップを追加します。

シミュレーションからエージェントパスを構築する

アニメーションクリップのモーションに基づいてエージェントパスを構築するのではなく、シミュレーションからパスを生成することもできます。

以下の例では、群衆シミュレーションDOPネットワークによって、エージェントがぶらついたり互いに避けたりします。DOPシミュレーションからパスを生成するには:

  1. DOPネットワークの出力をCrowd MotionPath SOPの入力に接続します。

    エージェントパスを生成するためのDOPシミュレーションネットワーク
  2. Crowd MotionPath SOPの Source ModeSimulation に設定します。

群衆シミュレーションを使用してエージェントパスを生成する

このサンプルでは、シミュレーションした群衆からモーションパスを生成する方法を説明しています。

アニメーションクリップの速度を変更する

Crowd MotionPath SOPで、 Clip Speed を調整します。

Clip Speed の横にあるドロップダウンメニューで Set Varying を選択し、 Variance および Variance Seed 値を調整することで、様々なエージェント間でクリップ速度に変化を付けます。

時間軸における各ポイントでのパスに沿ったエージェントの位置を表示する

右側のビューポートツールバーで Display pointsをオンにします。

エージェントパスを操作する

以下のノードは、エージェントが時間に追従するパスを変化させます:

Crowd MotionPath Follow

ビューポートに描画されたカーブ(s)に追従するように元のエージェントパスを変形させます。

Crowd MotionPath Edit

エージェントが移動する位置を正確に決定できるようにパスを直接操作することができます。 Crowd MotionPath Followよりも細かなレベルの制御が可能です。

Crowd MotionPath Avoid

エージェント間の衝突の検出と回避を実行します。

エージェントパスが追従するガイドカーブ

エージェントが追従するガイドカーブを素早く描画できるため、エージェントを道に沿って進ませたい場合などに便利です。 Crowd MotionPath Follow SOPは、描画されたカーブに追従するように元のエージェントパスを変形させます。 パスに沿ってポイントの位置と方向を変更しますが、アニメーションクリップは変更しません。

  1. Crowd MotionPath Follow SOPを、Crowd MotionPath SOPとCrowd MotionPath Evaluate SOPの間に接続します。

  2. Curve SOPの出力をCrowd MotionPath Follow SOP(3番目の入力)に接続します。

  3. Curve SOPを使用してビューポートにカーブ(または複数のカーブ)を描画します。デフォルトでは、エージェントパスは最も近いカーブに追従します。

    Note

    Construction Planeを表示して、カーブがコンストラクション平面に自動的にスナップするようにします。 右側のビューポートツールバーでDisplay Construction Planeをクリックします。

以下の例では、カーブが描画されている間(Curve SOPが選択されています)、Crowd MotionPath Follow SOPが表示され、パスがどのように変形されるのか確認することができます。 カーブが描画されると、Crowd MotionPath Evaluate SOPが選択および表示され、更新されたパスに沿って移動するエージェントのアニメーションを確認することができます。

ビューポートで描画されたカーブに追従するエージェント

このサンプルでは、ガイドカーブに追従するようにモーションパスを変形させる方法や、エージェントが閉じたループを辿るようにさせたり、アトリビュートを使用して各エージェントが辿るカーブを制御するといった高度なオプションを説明しています。

MotionPathFollowCurve

To...Do this

Curve SOPを使用して描画したカーブをすべて削除する

Curve SOPで、 Reset Operations をクリックします。

エージェントパスを直接操作する

Crowd MotionPath Edit SOPを使用すると、パスを直接操作して、エージェントが移動する位置を正確に決定することができます。 このノードでは、Crowd MotionPath Follow SOPよりも細かなレベルでパスの操作を制御できます。

  1. Crowd MotionPath Edit SOPを、Crowd MotionPath SOPとCrowd MotionPath Evaluate SOPの間に接続します。

  2. Crowd MotionPath Edit SOPを選択して表示します。

  3. ビューポートで、カーブに沿ってポイントをドラッグし、パスを変形させます。これらのポイントは ピン と呼ばれます。

Note

Construction Planeをオンにして、平坦な地形でポイントをドラッグすると、ポイントがコンストラクション平面に沿ってドラッグされるようにします。

エージェントパスを直接編集する

注意:

  • モーションパス上にピン留めされた各ポイントにはウェイトがあり、それが、パスがピンから受ける影響の強度を決定します。各ピンのウェイトは、HUDスライダPin Weight パラメータを使用して変更することができます。

  • 変形されたカーブがピン留めポイントを通過しない時、点線が表示され、そのピンとカーブ上の元のポイントの関係を示します。

  • デフォルトでは、モーションパスが変更されても、カーブの長さは通常維持されます。

このサンプルでは、Crowd MotionPath Edit SOPを使用して、特定のエージェントのパスをインタラクティブに調整する方法を説明しています。

To...Do this

複数のピンをドラッグする

  1. 複数のピンをボックス選択または⇧ Shift選択します。

  2. ドラッグします。

選択したピンを削除する

Deleteを押します。

選択したピンのウェイトを変更する

を使用するか、HUDスライダの Pin Weight パラメータを変更します。

新しいピンのデフォルトのウェイトを設定する

Default Pin Weight パラメータを設定します。

モーションパスの開始ポイントのウェイトを変更する

Start Point Weight パラメータを設定します。

選択したパス上のすべての編集を削除する

Uを押して、選択したピンを含むすべてのパス上の編集を削除します。

すべての編集を削除する

パラメータエディタで Reset All Changes をクリックします。

衝突の検出と回避

Crowd MotionPath Avoid SOPは、エージェント間の衝突の検出と回避を実行します。

  1. Crowd MotionPath Avoid SOPを、Crowd MotionPath SOPとCrowd MotionPath Evaluate SOPの間に接続します。

  2. Crowd MotionPath Avoid SOPを選択して表示します。

    デフォルトで、 Visualize Collisions はオンになっており、モーションパスの衝突が含まれる部分をハイライト表示します。球のガイドジオメトリは、衝突検出に使用されるエージェントのサイズを示します。

    衝突の視覚化
  3. Steering タブのパラメータと Iterations の数を調整し、衝突の解決を試みます。 Iterations は、衝突を解決するためにカーブ上に作成される回避パスの数です。 Steering のパラメータで制限をあまりに厳しくした場合、後のイテレーションにあまり効果が見られなくなる場合があります。

Note

エージェントがどこに移動するかをより細かく制御したい場合は、Crowd MotionPath Follow SOPまたはCrowd MotionPath Edit SOPを使用してください。

To...Do this

起こり得る衝突を表示する

Visualize Collisions をオンにします。モーションパスの衝突が含まれる部分がハイライト表示されます。

Avoidance がオフの場合でも、 Visualize Collisions は衝突が発生する場所を特定するのに便利です。

特定のパスで衝突回避を実行する

  1. Group パラメータの横にあるをクリックします。

  2. ビューポートで、他のエージェントや障害物を回避するように変形されるパスを選択します。

  3. Enterをクリックします。

Group で指定したエージェントは、 Group でリストされていないエージェントと衝突する可能性があります。

エージェントが、どのくらい前から起こり得る衝突を回避し始めるのか特定する

Max Collision Time を調整します。

Max Collision Time の値が高いほど、エージェントは早く起こり得る衝突の回避を試み始めます。

エージェントの衝突検出のサイズを変更する

Particle Scale Multiplier を調整して、すべてのエージェントの衝突サイズを変更します。

各エージェントは、例えばAttribute Adjust Float SOPを使用して、上流で設定されたpscalemultiplierアトリビュートを継承することもできます。 pscalemultiplierアトリビュートは、 Particle Scale Multiplier によってスケールされます。

衝突回避を適用するフレーム範囲を設定する

Start Frame および End Frame をオンにして指定します。

パスの開始時に初期の回転角度を設定する

Max Initial Rotation をオンにして設定します。

これは、モーションパスの開始時にエージェントが非常に接近していて、エージェント同士を遠ざけたい時に便利です。 Max Initial Rotation を使用すると、開始時だけ即座にエージェントが反対方向を向くように設定することができます。 これにより、時間範囲全体のTurn Rateに影響する Max Turn Rate を調整する必要がなくなります。

パスの元の終了位置を維持する

Goal Position Weight を上げます。

近接エージェントを回避する

  1. Neighbors をオンにします。

  2. Neighbor Distance を上げ、エージェントの回避をより早く開始します。

障害物を回避する

  1. 障害物のジオメトリをCrowd MotionPath Avoid SOPの3番目の入力に接続します。

  2. Obstacles をオンにします。

  3. Obstacle Distance を上げ、障害物の回避をより早く開始します。

  4. Collision Padding を上げ、エージェントが障害物に近づかないようにします。

  5. Horizontal FOV を調整し、エージェントが障害物を見ることができるビュー角度に変更します。障害物との衝突パス上にあるエージェントのみに対して障害物回避を実行するには、 Horizontal FOV を下げます。

障害物回避なし
障害物回避がオン

このサンプルでは、Crowd MotionPath Avoid SOPを使用して障害物を回避する方法を説明しています。

他のグループとの衝突を無視する特定のエージェントグループを指定する

このサンプルでは、Crowd MotionPath Avoid SOPを使用して、近接エージェント間に回避を適用する方法を説明しています。 collisionignoreおよびcollisiongroup文字列アトリビュートを使用して、異なるエージェントグループ間により複雑な回避ルールと衝突フィルターを構築します。

エージェントのcollisionignore文字列パターンが、近接エージェントが属するcollisiongroupと一致する場合、エージェントはその近接エージェントとの衝突を無視します(近接エージェントの回避を試みません)。

エージェントのcollisionignoreパターン = *の場合、エージェントは衝突の回避を試みません。この場合、Crowd MotionPath Avoidance SOPは何の作用も持ちません。

エージェントのcollisionignore文字列が空の場合、エージェントは衝突を無視しません(すべてに対して衝突します)。

エージェントが追従するパスを設定する

Crowd MotionPath Avoid SOPを使用すると、障害物としてラインジオメトリを入力することで、エージェントにパスを追従させることができます。このラインジオメトリは、エージェントが回避を試みるチューブ形状として扱われます。

衝突するポイントを含むジオメトリ上のポイントグループを出力する

Collision Point Group をオンにし、ポイントグループの名前を指定します。

アニメーションクリップ間のトランジション(遷移)

以下のノードは、アニメーションクリップ間のトランジション(遷移)を制御します:

Crowd MotionPath Transition

異なるアニメーションクリップに切り替えます。

Crowd MotionPath Trigger

別のアニメーションクリップへのトランジションをトリガーする条件を設定します。

Crowd MotionPath Layer

エージェントのベースアニメーション上に様々なアニメーションクリップをレイヤ化します。 レイヤ化されたクリップは、スケルトンの特定のパーツに適用することができます。

クリップの遷移ポイントを手動で選択する

Crowd MotionPath Transition SOPを使用して、新しいアニメーションクリップに遷移させます。

  1. Crowd MotionPath Transition SOPを、Crowd MotionPath SOPとCrowd MotionPath Evaluate SOPの間に接続します。

  2. Crowd MotionPath Transition SOPで、 Clip Name を新しいアニメーションクリップに設定します。

デフォルトで、Crowd MotionPath Transitionはフレーム範囲の開始フレームでエージェントのアニメーションクリップを切り替えます。

フレーム範囲の開始フレームで新しいアニメーションクリップに遷移

パス上の後のポイントで新しいアニメーションクリップに遷移させるには:

  1. Crowd MotionPath Transition SOPで、 Trigger Group の横にあるをクリックします。

  2. ビューポートで、トランジションを開始するパス上のポイントを選択します。⇧ Shiftを押したまま、様々なパスでポイントを選択します。単一のパスに沿って複数のポイントを選択した場合、パス上の最初に選択したポイントでトランジションが発生します。

  3. Enterをクリックします。 Trigger Group パラメータは選択したポイントに設定されます。

手動で選択したポイントで新しいアニメーションクリップに遷移

このサンプルでは、Crowd MotionPath Transition SOPを使用してアニメーションクリップ間をブレンドする方法や、Clip Transition Graphで定義された中間遷移クリップを使用する方法を説明しています。

To...Do this

複数のトリガーに基づいて新しいアニメーションクリップに切り替える

Combine Triggers セクションで、ブール論理を使用して様々な組み合わせのトリガーを指定します。

少し時間をずらして、エージェントを新しいアニメーションクリップに遷移させる

  1. Random Delay をオンにします。

  2. Random Delay セクションで、 Max Random Delay および Random Seed パラメータを調整します。

異なるアニメーションクリップに遷移させる

アニメーションクリップのライブラリがある場合、異なるクリップをいくつか指定することで、トランジション(遷移)先の次のクリップとしてランダムに選択できます。

  1. Randomize Clips をオンにします。

  2. トランジション(遷移)先の Clip Names を設定します。それぞれの Clip Names パラメータで、複数のクリップを指定することができます。

  3. Clip Names のクリップのグループに Weight を設定します。ウェイト値を上げるほど、これらのクリップが次のクリップとして選択される可能性が高くなります。

  4. Clip Groups の横にあるをクリックして、様々なウェイトのクリップを追加します。

トランジションのシーケンスを使用して新しいクリップに遷移させる

Clip Transition Graphを使用すると、クリップトランジションをより細かく制御することができます。Clip Transition Graphは、ペアのクリップの間でトランジション領域を自動的に見つけ、現在のクリップが新しいクリップにうまくブレンドするポイントを決定します。また、現在のクリップから新しいクリップへの、トランジションのシーケンスを指定することもできます。

  1. Agent Clip Transition Graph SOPエージェントの定義に追加します(Agent SOPの後、Crowd Source SOP|Node:sop/crowdsource]の前の任意の場所に配置します)。

  2. エージェントが受け取ることのできる様々なトランジションを指定します。Agent Clip Transition Graph SOPで、 Filters の横にあるをクリックしてクリップトランジションを追加します。

    例えば、以下のクリップトランジションを指定することができます:

    • Clip A : idleClip B : walk

    • Clip A : walkClip B : run

    • Clip A : runClip B : run_turn_left

    • Clip A : runClip B : run_turn_right

  3. トリガー条件とトランジション(遷移)先のクリップを設定します。オプションで、ランダムなクリップのコレクションをトランジション(遷移)先に指定することもできます(“異なるアニメーションクリップに遷移させる”How-toを参照してください)。

  4. Crowd MotionPath Transition SOPで、 Use Clip Transition Graph をオンにします。

例として上記のクリップトランジションを使用して、以下を指定する場合:

  • 初期クリップとしてidleおよびwalk(Crowd MotionPath SOPで)

  • トランジション(遷移)先のクリップとしてrun_turn_leftおよびrun_turn_right(Crowd MotionPath Transition SOPで)

その後、初期idleクリップを再生するエージェントは、Clip Transition Graphで以下のトランジションに追従し、run_turn_leftなどに遷移します:

  • idlewalk

  • walkrun

  • runrun_turn_left

初期walkクリップを再生するエージェントは、Clip Transition Graphで適切なトランジションにも追従し、run_turn_rightなどに遷移します:

  • walkrun

  • runrun_turn_right

Note

Crowd Source SOPまたはCrowd MotionPath SOPのいずれかでクリップを初期化することができます。 クリップを割り当てるのが、群衆のレイアウトを取り込む時か、またはエージェントパスを生成する直前かは、ワークフローの設定によります。

Crowd MotionPath SOPでのクリップの割り当ての方がやや柔軟性が高く、 Group パラメータを使用して、エージェントの様々なグループに対してクリップの割り当てをセットアップしたり、特定のエージェントのクリップを上書きすることができます。

トリガー条件に基づいて新しいアニメーションに遷移させる

Crowd MotionPath Trigger SOPおよびCrowd MotionPath Transition SOPは連携して、特定の条件が満たされた時にエージェントのアニメーションクリップを切り替えます。

Crowd MotionPath Triggerは、別のアニメーションクリップへのトランジションをトリガーする条件を設定し、Crowd MotionPath Transitionは、トリガー条件が満たされた時にエージェントのアニメーションクリップを切り替えます。

  1. Crowd MotionPath Trigger SOPとCrowd MotionPath Transition SOPを、Crowd MotionPath SOPとCrowd MotionPath Evaluate SOPの間に接続します。

    Crowd MotionPath Triggerとトランジションネットワーク
  2. Crowd MotionPath Trigger SOPで、トリガーの名前( Trigger Name )はデフォルトのノード名であるCrowd MotionPath Triggerに設定されています(ここではcrowdmotionpathtrigger1)。 Trigger Name は、トリガーを参照するCrowd MotionPath Transition SOPなどの後続ノードで使用されるため、もっと分かりやすい名前に変更してもかまいません。

  3. Crowd MotionPath Trigger SOPで、 Type パラメータのトリガータイプを設定します。特定のフレームでアニメーションクリップを切り替えるには:

    • TypeTime に設定します。

    • Frame を、異なるアニメーションクリップに遷移させるフレームに設定します。

    以下の例では、Crowd MotionPath Trigger SOPが選択および表示されています。トリガー条件を満たすパス上のポイントがハイライト表示されています。

    トリガー条件を満たすパス上のポイント(ハイライト表示)
  4. Crowd MotionPath Transition SOPで:

    • Trigger Group をCrowd MotionPath Trigger SOPの名前(この例では、crowdmotionpathtrigger1)に設定します。

    • Clip Name を新しいアニメーションクリップに設定します。

    以下の例では、Crowd MotionPath Transition SOPが選択および表示されています。トリガー条件を満たすパス上のポイントが、新しいアニメーションクリップに遷移されます。

    新しいアニメーションクリップへのトランジション(遷移)

Note

Crowd MotionPath TriggerノードおよびCrowd MotionPath Transitionノードは、群衆シミュレーションネットワークにおいてCrowd Trigger DOPおよびCrowd Transition DOPに相当するSOPレベルのノードです。

このサンプルでは、Crowd MotionPath Transition SOPおよびCrowd MotionPath Trigger SOPを使用して、アニメーションクリップ間をブレンドする方法を説明しています。

To...Do this

エージェントが領域またはジオメトリ内部にある場合、新しいアニメーションクリップに切り替える

  1. Crowd MotionPath Trigger SOPで、 TypeBounding Region に設定します。

  2. ビューポートで、ハンドルを使用してボックスのサイズを変更します。

  3. Comparison を設定し、ボックスの内部または外部のポイント、ボックスに入るポイント、ボックスから出ていくポイントのいずれが新しいアニメーションクリップへのトランジションをトリガーするかを指定します。

  4. Crowd MotionPath Trigger SOPを選択および表示して、トリガー条件を満たすポイント(ハイライト表示)を確認します。

    境界領域内でトランジションをトリガーする
  5. Crowd MotionPath Transition SOPを選択および表示して、更新したエージェントパスを確認します。

    境界領域トリガーを使用して更新したパス

IncomingComparison メソッドは、トランジションがトリガーされる各パス上の1つのポイントをハイライト表示します。

ボックスに入るポイント(ハイライト表示)でトランジションがトリガーされる

トランジションをトリガーする境界領域として、他のジオメトリを使用することもできます。以下の例では、Rubber Toyテストジオメトリを境界領域として使用しています。

  1. Rubber ToyテストジオメトリをCrowd MotionPath Trigger SOP(3番目の入力)に接続します。

  2. TypeBounding Region に設定します。

  3. Bounding TypeBounding Object に設定します。

  4. ComparisonInside に設定します。

新しいアニメーションクリップへのトランジションは、エージェントがRubber Toyジオメトリ内部にある時にトリガーされます(以下では、Rubber Toyジオメトリがテンプレートになっています)。

ジオメトリ内部でトランジションをトリガーする

他のタイプのプリビルドのトリガーについては、Crowd MotionPath Triggerノードのドキュメントを参照してください。

このサンプルでは、エージェントにクリップをレイヤ化する方法と、エージェントが境界オブジェクト内に入った時にアクティブにする方法を説明しています。

MotionPathLayerClip

レイヤアニメーション

Crowd MotionPath Layer SOPを使用すると、手を振る、頭の向きを変えるなどのモーションを簡単にエージェントに追加することができます。様々なモーションを望ましい組み合わせで実行する、完全に新しいアニメーションクリップは必要ありません。Crowd MotionPath LayerはCrowd MotionPath Transitionと似ていますが、完全に新しいアニメーションクリップに切り替えるのではなく、エージェントのベースアニメーションの上に異なるクリップをレイヤ化します。レイヤ化したクリップも、スケルトンの特定のパーツに適用することができます。

  1. Crowd MotionPath Trigger SOPとCrowd MotionPath Layer SOPを、Crowd MotionPath SOPとCrowd MotionPath Evaluate SOPの間に接続します。

  2. エージェントの定義を構築する際に、Agent Transform Group SOPを追加します。Agent Transform Groupは、レイヤ化したクリップを適用するスケルトンのパーツを決定するのに使用される、ジョイントの名前付きグループを作成します。

    Agent Transform Group SOPを、エージェント定義のAgent SOPの後、Crowd Source SOPの前の任意の場所に配置します。

  3. Agent Transform Group SOPで、 Transform Groups マルチパラメータを使用して新しいジョイントグループを作成します。各グループで:

    • Name をジョイントグループの名前(upper_bodyなど)に設定します。

    • Root Transforms で、グループのルートジョイントを選択します。各ルートジョイントとその子ジョイントがグループに追加されます。

    • ジョイントがグループの一部であることを確認したい場合は、 Show Guide Geometry をオンにすると、選択したジョイントの周囲に球が表示されます。エージェントを Wireframe として表示すると、ガイドジオメトリをよりはっきりと確認できます。

  4. Crowd MotionPath Layer SOPで、 Transform Group をレイヤ化したクリップを再生するジョイントグループに設定します。

  5. Clip Name をレイヤ化したクリップに設定します。

以下の例では、エージェントの上半身はフレーム100からレイヤ化されたゾンビクリップを再生し、下半身は元のwalkingクリップを再生します。Crowd MotionPath Layer SOPで、以下のパラメータを設定します:

  • Trigger Group をCrowd MotionPath Trigger SOPの名前、crowdmotionpathtrigger1に設定します。Crowd MotionPath Trigger SOPは、フレーム100でトランジションをトリガーします。

  • Transform Groupupper_bodyに設定します。

  • Clip Namewalk_zombieに設定します。

エージェントの上半身のレイヤアニメーション

このサンプルでは、Crowd MotionPath Layer SOPを使用してエージェントの上半身にクリップをレイヤ化する方法を説明しています。このクリップは、エージェントが境界オブジェクト内に入った時にアクティブになります。

MotionPathLayerClip

To...Do this

複数のトリガーに基づいて新しいアニメーションクリップに切り替える

Combine Triggers セクションで、ブール論理を使用して様々な組み合わせのトリガーを指定します。

異なるアニメーションクリップに遷移させる

アニメーションクリップのライブラリがある場合、異なるクリップをいくつか指定することで、トランジション(遷移)先の次のクリップとしてランダムに選択できます。

  1. Randomize Clips をオンにします。

  2. トランジション(遷移)先の Clip Names を設定します。それぞれの Clip Names パラメータで、複数のクリップを指定することができます。

  3. Clip Names のクリップのグループに Weight を設定します。ウェイト値を上げるほど、これらのクリップが次のクリップとして選択される可能性が高くなります。

  4. Clip Groups の横にあるをクリックして、様々なウェイトのクリップを追加します。

元のクリップがレイヤ化されたクリップにブレンドする早さを変更する

Blend In FramesBlend Out Frames を調整します。

レイヤ化されたモーションクリップと元のアニメーションを部分的にブレンドする

Blend Ratio を調整します。 Blend Ratio1の場合、元のアニメーションクリップの上にレイヤ化されたアニメーションクリップがフルに使用されます。

レイヤ化されたクリップを数秒だけ再生するように設定する

Number of Loops パラメータを調整します。 Number of Loops1に設定すると、レイヤ化されたクリップが1回再生され、その後元のアニメーションクリップに戻ります。

その他の操作

Crowd MotionPath Retime

アニメーションのモーションを高速化、低速化、クロップ、シフトします。

群衆シミュレーション

はじめよう

  • 基本

    Houdiniにおける群衆シミュレーションの考え方の概要を説明します。

  • セットアップ

    群衆シミュレーションのセットアップと編集の方法

動くパーツ

  • エージェント

    群衆シミュレーションの要員である動くアクターであるエージェントについて説明します。

  • ステート

    エージェントのステート、各エージェントのアニメーションや仕草を制御する仮想的な雰囲気について。

  • トリガー

    エージェントのステートを変更する条件を指定する方法です。

  • キャッシュ

    群衆シミュレーションの効率的なキャッシュ化と読み込みのTips。

SOP群衆

挙動

外観

  • 多様性

    エージェントに異なる外観と行動を作成することで、より現実的な群衆を作成する方法。

  • 布の取り付け

    Vellum Clothをエージェントシェイプジオメトリの一部として追加/拘束すれば、エージェントの動きに基づいて布をシミュレーションすることができます。

地形

  • 足の着地

    エージェントのアニメーションを地形に適応させて滑りを回避するためのセットアップ方法。

  • 地形

    エージェントが歩く地形ジオメトリを指定する方法です。

  • 障害物

    エージェントが回避する障害物を設定する方法です。