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

群衆の状態トリガとトランジション

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

On this page

概要

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

トランジションの追加

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

  • エージェントの移行 の状態

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

  • エージェントの移行 の状態

  1. 群衆シミュレーションネットワークへ進みます。

  2. Crowd Triggerノードを作成します。パラメータエディタで、トリガ条件を設定します(下記の"ビルトインのトリガタイプ"を参照)。

    複数のトリガをCrowd Trigger Logicノードを使用して、"And"、"Or"または"Not"論理と組み合わせることができます。

  3. Crowd Transitionノードを作成し、トリガノードをそれに接続します。

  4. Transitionノードのパラメータエディタで、 Start state および End state を設定します。

  5. Transitionノードの出力をtransition_mergeノードへ接続します(crowd DOP network参照)。

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

Crowd Triggerノードには、多くの便利なテストタイプの他、 Custom オプションがあり、テストエクスプレッションを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の場合、起動します。

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

トリガの組み合わせ

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

Tips

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

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

See also

群衆シミュレーション

はじめよう

  • 基本

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

  • セットアップ

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

動くパーツ

  • エージェント

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

  • ステート

    各エージェントのアニメーションや仕草を制御する仮想的な"雰囲気"。

  • トリガー

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

  • キャッシュ

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

挙動

外観

  • 多様性

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

  • 布の取り付け

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

地形

  • 足の着地

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

  • 地形

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

  • 障害物

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