On this page |
概要 ¶
群衆シミュレーションの各ステップで、Houdiniはすべてのエージェントを見て、一連のトリガー条件をチェックします(例えば、“対象までの距離>2”など)。
トリガーが適用されると、Houdiniは、トリガーに付加されているトランジションを確認して、エージェントを新しい状態へ変更します(例えば、walk
->run
)。
トランジションには、Houdiniが新旧のステートのアニメーションクリップを自動的にブレンドする 持続時間 を入れることができます。
トリガーとトランジションの追加 ¶
トランジションは、エージェントがあるステートから別のステートへ(例えば、walk
からidle
へ)いつ変化するかを制御します。
トランジションには3つの決定が必要です:
-
エージェントの遷移 前 のステート。
-
トランジションを引き起こす 条件 。
-
エージェントの遷移 後 のステート。
デフォルトでは、HoudiniはCrowd Trigger DOPノードをオレンジ、Crowd Transition DOPノードを青にします。
-
群衆シミュレーションネットワーク内で、Crowd Trigger DOPノードを追加します。
-
そのCrowd Trigger DOPのパラメータエディタで、トリガーの Type とそれ関連のトリガー条件を設定します。
-
Crowd Transition DOPノードを追加し、その入力をCrowd Trigger DOPの出力に接続します。
-
そのCrowd Transition DOPの Input State と Output State を設定します。
-
そのCrowd Transition DOPの出力を
merge_transitions
ノードの入力に接続します。
Note
Crowd Trigger Logic DOPを使用することで、“and”、“or”、“not”の論理演算子で複数のトリガーを組み合わせることができます。
ビルトインのトリガータイプ ¶
Crowd Trigger DOPには、たくさんの便利なテストタイプの他、 Custom VEXpression オプションがあり、テストエクスプレッションをVEXで書き込むことができます。
トリガーのタイプ |
説明 |
例 |
---|---|---|
Object bounds |
エージェントがジオメトリに入る、ジオメトリから離れる、またはジオメトリ内にある場合にアクティブにします。 |
エージェントは、レースのゴールを超えると走るのを停止します。 |
Object attribute |
エージェントの近くにあるオブジェクトのアトリビュート値に基づいてアクティブにします。 |
エージェントは、赤信号で止まり、青信号で歩きます(ライトオブジェクトの |
Object distance |
エージェントからオブジェクトまたはポイントクラウドまでの距離に基づいてアクティブにします。 |
エージェントは、ベースから離れすぎると止まり、向きを変えます。 |
Object ray cast |
オブジェクトが、ある距離内でエージェントの真正面になる場合にアクティブにします。 |
エージェントは絵画を見ると、止まって鑑賞します。 |
Particle speed |
エージェントの速度に基づいてアクティブにします。 |
エージェントの速度に基づいて、“walk” から “run”、“sprint”への状態/アニメーションを切り替えます。 |
Particle proximity |
他のエージェントの近接に基づいてアクティブにします。 |
別のグループからのエージェントは、お互いが接近すると、“fight”状態に切り替わります。 |
Particle attribute lookup |
エージェントの1つのアトリビュート値に基づいてアクティブにします。 |
エージェントの |
Particle attribute comparison |
エージェントの1つのアトリビュート値と、近接のエージェントの同じアトリビュート値を比較してアクティブにします。 |
エージェントは、値が大きいほうの相手から逃げ出します。 |
Time |
シーン時間に基づいてアクティブにします(例えば、現在の時間ステップがシーン内で5秒を超える場合)。 |
エージェントはシーンの途中で走り出します。 |
Current state duration |
エージェントが現在の状態にいる長さに基づいてアクティブにします。 |
警備員は、30秒後、“alert”状態から離れます。 |
Animated parameter |
トリガーノードのパラメータに基づいてアクティブにします。手動制御のパラメータの値をキーフレーム化できます。または、エクスプレッションを入力して、関数に基づいてアクティブにできます。 |
エージェントは、残りのシーンで手動でアニメーションされたイベントに反応します。 |
Custom VEXpression |
VEXスニペットを実行後、変数に値に基づいてアクティブにします。トリガーは、 |
これは、より複雑な要件、またはカスタム要件に使用します。 |
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 |