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

群衆エージェントのステート(状態)

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

On this page

概要

どの時間でも、すべてのエージェントは“walk”、“idle”、“attack”、“run_to_goal”などの特定のステート(状態)にあります。 ステートは以下のもので定義します:

  1. そのステートになっているエージェントに対して再生されるアニメーションクリップ

  2. エージェントが取り付けられている大元のパーティクルの動きに影響を与えるビヘイビア系ノード。

  3. エージェントのポーズとアニメーションに影響を与えるノード。例えば、Agent Look At DOP(エージェントのポーズを調整)やAgent Clip Layer DOP(ベースアニメーションクリップに他のアニメーションクリップをブレンド)です。

例えば、“run”ステートでは、エージェントが走るアニメーションクリップが再生されます。 ビヘイビア系ノードを使用しなかった場合、そのエージェントはその場走りになります。 POP Steer Separate DOPなどのビヘイビア系ノードを使用すれば、エージェントはお互い距離を取って走るようになります。

群衆シミュレーションネットワークでは、エージェントのアニメーションはCrowd State DOPで定義し、エージェントの挙動やポーズを修正するノードはそのCrowd State DOPの後に接続します。 Crowd Solverは、サブステップの終わりにエージェントの(ステアリングフォースで駆動される)位置/向きと(アニメーションクリップで駆動される)ポーズを更新するので、ビヘイビア系ノードとアニメーション系ノードの効果はエージェントに即時適用されないため、ビヘイビア系ノードとアニメーション系ノードの順番は通常では問題になりません。

以下のサンプルでは、ビヘイビア系ノードが青色で、ポーズ修正系ノードが黄色になっています:

Crowd Stateを定義しているノード群

ステートを追加する

ステートの名前とさらにそのステートに関連付けるアニメーションクリップは、Crowd State DOPで定義します。

  1. 群衆シミュレーションネットワーク内で、Merge DOPを使用して複数のCrowd State DOPをマージし、そのMerge DOPをCrowd Solverに接続します:

    群衆シミュレーションネットワーク内のCrowd State DOPノード群
  2. デフォルトでは、Crowd State DOPの Clip Name パラメータは$OSに設定されています。 これは、ステートが再生するアニメーションクリップを、そのCrowd State DOPの名前に設定します。 例えば、そのCrowd State DOPの名前をwalkに変更すると、“walk”ステートのエージェントは、walkという名前のアニメーションクリップを再生します。 アニメーションクリップの名前と違うステート名を使用したいのであれば、 Clip Name パラメータにそのアニメーションクリップ名を直接設定してください。

Note

アニメーションクリップの設定に加えて、他のラグドール関連の設定もCrowd State DOPで定義します。

ステートに挙動を追加する

エージェントが取り付けられている大元のパーティクルの動きに影響を与えるビヘイビア系ノードを作成します。 ビヘイビア系ノードを群衆シミュレーションネットワーク内のCrowd State DOPの後に以下のように接続します:

  • 特定のステートのエージェントにのみビヘイビアを適用するのであれば、Crowd State DOPとMerge DOPの間にビヘイビア系ノードを接続します。

  • すべてのステートのエージェントにビヘイビアを適用するのであれば、Merge DOPの後でCrowd Solverより前にビヘイビア系ノードを接続します。

以下のネットワークでは、ビヘイビア系ノードは青色になっています。POP Steer Wanderビヘイビアノードは、walkステートのエージェントにのみ適用され、POP Steer Separateビヘイビアノードは、すべてのステートのエージェントに適用されます。

群衆シミュレーションネットワーク内のエージェントビヘイビア

Note

ビヘイビア系ノードがMerge DOPの前または後のどちらに接続されていても、 そのビヘイビア系ノードの Group パラメータを使用することで、その挙動をエージェントの特定のグループや複数のグループに制限することができます。

あるステートに複数の挙動を適用したり、ステートのマージの後に複数の挙動を適用することができます。 すべてのエージェントに適用されるCrowd Solver内に組み込まれた挙動もあります。 Crowd Solverは、ウェイトを使用して、すべてのビヘイビアの効果を結合します。

動きの挙動

Houdiniには、エージェントが取り付けられている大元のパーティクルの動きを制御するビヘイビア系ノードとして使用可能なPOPフォースがいくつか用意されています。 このタイプのノードの名前は“POP Steer”で始まります。 このような“ステアリング”フォースは、基本的にパーティクルフォースで、そこにウェイトの概念が加えられています。このウェイトは、Crowd Solverがエージェントに与える複数のフォースをどの程度扱うのかを決めます。

  • POP Steer Alignは、エージェントを近隣またはその視野にある他のエージェントに揃うように回転させます。

  • POP Steer Avoidは、エージェントが近隣エージェントを回避するようにします。

  • POP Steer Cohesionは、エージェントをお互いに接近させます。

  • POP Steer Obstacleは、エージェントが静的オブジェクトを回避するようにします。

  • POP Steer Pathは、エージェントがパス曲線を辿るようにします。

  • POP Steer Seekは、エージェントをポイントに向って動かします。

  • POP Steer Separateは、エージェントをお互いに遠ざけます。

  • POP Steer Wanderは、エージェントをランダムに動かします。

  • POP Steer Customは、ユーザがVOPネットワークを使用してフォースベクトルを計算することができます。

上記のステアリングフォースは、 Output Attribute パラメータを POP force に設定することで、通常のパーティクルに使用することができます。 また、通常のパーティクルシミュレーションフォース(例えばPOP Windノード)をビヘイビアノードとして使用することもできます。 ただし、通常のパーティクルシミュレーションフォースには Weight パラメータがないため、Crowd Solverは、まず最初に正規化することなく、単にそれらのフォースをエージェントの他のフォースに加算することになります。

Crowd Solverのエージェントのデフォルト挙動

Crowd Solver DOPには、どのステートにいるか関係なくすべてのエージェントに適用することができるいくつかのオプションのデフォルト挙動が用意されています:

  • フォースに反応した時にエージェントが急速に回転したり移動しないようにします。 これは、エージェントをより現実的な動きに見せるのに役立ちます。

  • エージェントが障害物を回避したり、エージェント同士が衝突しないようにするためのオプションのデフォルト挙動。

  • エージェントを地形オブジェクトに“くっつける”オプションや、足ボーンの配置を地形に順応させるオプション。

エージェントのアニメーションやポーズを修正する

以下のノードを使用することで、エージェントのポーズやアニメーションを調整することができます:

  • Agent Clip Layer DOPは、アニメーションクリップをレイヤとしてエージェント上に重ねます。

  • Agent Arcing Clip Layer DOPは、エージェントの旋回速度に基づいて、アニメーションクリップをブレンドします。

  • Agent Look At DOPは、エージェントの頭の視線先となるターゲットを定義します。

これらのノードは、群衆シミュレーションネットワーク内のCrowd State DOPの後に接続し、ビヘイビア系ノードの前後に配置することができます:

エージェントクリップレイヤ系ノードの情報は、アニメーションクリップのレイヤ化を参照してください。

シェルフツールの使い方

Pathシェルフツールの使い方

Pathシェルフツールは、選択したステートのエージェントをパス曲線に辿らせるようにするPOP Steer Path DOPを追加します。

  1. パス曲線を選択します。

  2. Crowds シェルフタブの Pathツールをクリックします。

  3. ダイアログボックスから、パス曲線に辿らせたいエージェントのステート(またはすべてのステート)を選択します。

    • 特定のステートを選択した場合、そのステートのCrowd Stateノードとmerge_statesノードの間にPOP Steer Pathノードが接続されます。

    • すべてのステートを選択した場合、merge_statesノードの後にPOP Steer Pathノードが接続されます。

Look Atシェルフツール

Look Atシェルフツールは、群衆ネットワーク内に、エージェントの視点を特定のオブジェクトに向けるAgent Look At DOPを接続します。

  1. エージェントの視線先となるオブジェクトを選択します。

  2. Crowds シェルフタブで、Look Atツールをクリックします。

  3. ダイアログボックスから、その視線先となるオブジェクトの方をエージェントが見るステート(またはすべてのステート)を選択します。

    • 特定のステートを選択する場合、Agent Look AtノードをそのCrowd Stateノードとmerge_statesノードの間に接続します。

    • すべてのステートを選択する場合、Agent Look Atノードをmerge_statesノードの後に接続します。

ビヘイビアをカスタマイズする

ステート内でアトリビュートを変更する

“Steerなんちゃら”のビヘイビア系ノードは、エージェントが取り付けられている大元のパーティクルにフォースを適用して、それらのパーティクルを動かします。 他にも、POP Wrangle DOPをビヘイビアノードとして使用することで、エージェントのアトリビュートを変更することができます。

例えば、エージェントがあるステートの場合にそのエージェントの最大回転率を変更したい場合、Crowd State DOPの後にPOP Wrangle DOPを接続して下記のようなスクリプトを記述します:

f@maxturnrate = 15;

独自のステアリングフォースVOPネットワーク

POP Steer Custom DOPを使用して、新しいステアリングの挙動を定義することができます。 これにはVOPネットワークが含まれ、エージェントパーティクルに現在のフォースを追加したり、変更することができます。

名前に“Agent”を含めたVOPは、エージェントで扱う際に便利です。

群衆シミュレーション

はじめよう

  • 基本

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

  • セットアップ

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

動くパーツ

  • エージェント

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

  • ステート

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

  • トリガー

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

  • キャッシュ

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

挙動

外観

  • 多様性

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

  • 布の取り付け

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

地形

  • 足の着地

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

  • 地形

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

  • 障害物

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

SOP群衆

群衆プロシージャル