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

群衆のステートのトリガーとトランジション

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

On this page

概要

群衆シミュレーションの各ステップで、Houdiniはすべてのエージェントを見て、一連のトリガー条件をチェックします(例えば、“対象までの距離>2”など)。 トリガーが適用されると、Houdiniは、トリガーに付加されているトランジションを確認して、エージェントを新しい状態へ変更します(例えば、walk->run)。 トランジションには、Houdiniが新旧のステートのアニメーションクリップを自動的にブレンドする 持続時間 を入れることができます。

トリガーとトランジションの追加

トランジションは、エージェントがあるステートから別のステートへ(例えば、walkからidleへ)いつ変化するかを制御します。 トランジションには3つの決定が必要です:

  • エージェントの遷移 のステート。

  • トランジションを引き起こす 条件

  • エージェントの遷移 のステート。

デフォルトでは、HoudiniはCrowd Trigger DOPノードをオレンジ、Crowd Transition DOPノードを青にします。

群衆シミュレーションネットワーク内のCrowd TriggerノードとCrowd Transitionノード
  1. 群衆シミュレーションネットワーク内で、Crowd Trigger DOPノードを追加します。

  2. そのCrowd Trigger DOPのパラメータエディタで、トリガーの Type とそれ関連のトリガー条件を設定します。

  3. Crowd Transition DOPノードを追加し、その入力をCrowd Trigger DOPの出力に接続します。

  4. そのCrowd Transition DOPの Input StateOutput State を設定します。

  5. そのCrowd Transition DOPの出力をmerge_transitionsノードの入力に接続します。

Note

Crowd Trigger Logic DOPを使用することで、“and”、“or”、“not”の論理演算子で複数のトリガーを組み合わせることができます。

ビルトインのトリガータイプ

Crowd Trigger DOPには、たくさんの便利なテストタイプの他、 Custom VEXpression オプションがあり、テストエクスプレッションをVEXで書き込むことができます。

トリガーのタイプ

説明

Object bounds

エージェントがジオメトリに入る、ジオメトリから離れる、またはジオメトリ内にある場合にアクティブにします。

エージェントは、レースのゴールを超えると走るのを停止します。

Object attribute

エージェントの近くにあるオブジェクトのアトリビュート値に基づいてアクティブにします。

エージェントは、赤信号で止まり、青信号で歩きます(ライトオブジェクトのstopアトリビュートを使用して、stopが1であるかどうかをエージェントにチェックさせます)。

Object distance

エージェントからオブジェクトまたはポイントクラウドまでの距離に基づいてアクティブにします。

エージェントは、ベースから離れすぎると止まり、向きを変えます。

Object ray cast

オブジェクトが、ある距離内でエージェントの真正面になる場合にアクティブにします。

エージェントは絵画を見ると、止まって鑑賞します。

Particle speed

エージェントの速度に基づいてアクティブにします。

エージェントの速度に基づいて、“walk” から “run”、“sprint”への状態/アニメーションを切り替えます。

Particle proximity

他のエージェントの近接に基づいてアクティブにします。

別のグループからのエージェントは、お互いが接近すると、“fight”状態に切り替わります。

Particle attribute lookup

エージェントの1つのアトリビュート値に基づいてアクティブにします。

エージェントのhealthアトリビュートが非常に低くなった場合、“dying”状態に切り替わります。

Particle attribute comparison

エージェントの1つのアトリビュート値と、近接のエージェントの同じアトリビュート値を比較してアクティブにします。

エージェントは、値が大きいほうの相手から逃げ出します。

Time

シーン時間に基づいてアクティブにします(例えば、現在の時間ステップがシーン内で5秒を超える場合)。

エージェントはシーンの途中で走り出します。

Current state duration

エージェントが現在の状態にいる長さに基づいてアクティブにします。

警備員は、30秒後、“alert”状態から離れます。

Animated parameter

トリガーノードのパラメータに基づいてアクティブにします。手動制御のパラメータの値をキーフレーム化できます。または、エクスプレッションを入力して、関数に基づいてアクティブにできます。

エージェントは、残りのシーンで手動でアニメーションされたイベントに反応します。

Custom VEXpression

VEXスニペットを実行後、変数に値に基づいてアクティブにします。トリガーは、i@trigger変数がスニペットの最後で1の場合、アクティブにします。

これは、より複雑な要件、またはカスタム要件に使用します。

RBD impact data

エージェントが閾値よりも大きな衝撃でオブジェクトに当たった時にアクティブにします。

エージェントは、矢に当たるとラグドールに変わります。

Animation clip loops

エージェントの現行アニメーションクリップのループ回数に基づいてアクティブにします。

エージェントは特定の回数を超えた後に走り始めます。

Look At target

エージェントの現行Look Atターゲットに基づいてアクティブにします。

エージェントは絵画を5秒間見た後に歩き始めます。

RBD sticky collisions

エージェントに発生したSticky Collisionsの回数に基づいてアクティブにします。

エージェントは矢に当たってそれが引っ付いた時にラグドールに変わります。

トリガーの組み合わせ

Crowd Trigger Logic DOPでは、“and”、“or”、“not”の関係性を使用して、2つのトリガーの結果を組み合わせることができます。

以下の例では、“stand”ステートのエージェントは、数秒後にその状態の後に、または、RBDオブジェクトに当たった後に“walk”ステートに遷移します。

複数のトリガーの組み合わせ

Tips

  • カスタムトリガーでのアトリビュートの便利な使用方法については、エージェントアトリビュートを参照してください。

  • 複数のトリガー/トランジションが指定されたエージェントで有効の場合、どのトランジションが選ばれるかは技術的には定義されていません(ただし、おそらく接続順序で最後のトランジションです)。しかし、トリガー/トランジションの複数のパスを同じ“from”状態を使用して作成しないようにすることで、この状況を回避するのが賢明です。

See also

群衆シミュレーション

はじめよう

  • 基本

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

  • セットアップ

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

動くパーツ

  • エージェント

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

  • ステート

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

  • トリガー

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

  • キャッシュ

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

SOP群衆

挙動

外観

  • 多様性

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

  • 布の取り付け

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

地形

  • 足の着地

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

  • 地形

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

  • 障害物

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