Houdini 20.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などのビヘイビア系ノードを使用すれば、エージェントはお互い距離を取って走るようになります。

群衆シミュレーションネットワークでは、エージェントのアニメーションはCrowd State DOPで定義し、ビヘイビア系ノードとスケルタルアニメーション系ノードはそのCrowd State DOPの後に接続します。以下のサンプルでは、Crowd State DOPノードがピンク(これがデフォルトのCrowd State DOPノードカラーです)、ビヘイビア系ノードが青になっています。

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

新しいステートの追加

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

  1. 群衆シミュレーションネットワーク内で、Crowd State DOPノードを作成し、それをmerge_statesノードに接続します。

    群衆シミュレーションネットワーク内のCrowd State DOPノード群
  2. その新しいCrowd State DOPの State Name パラメータには、アニメーションクリップの名前を設定します。例えば、walkステートのエージェントはwalkアニメーションクリップを再生します。

Note

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

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

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

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

  • どのステートのどのエージェントにもビヘイビアを適用するのであれば、merge_states (でCrowd Solverより前)にビヘイビア系ノードを接続します。

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

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

Note

ビヘイビア系ノードがmerge_statesノードの前または後のどちらに接続されていても、 そのビヘイビア系ノードの 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には、衝突回避のようなオプションのデフォルト挙動が用意されており、どのステートにかかわらず、すべてのエージェントに適用できます:

  • 現実的な動きになるように、ソルバは、フォースに反応している間、エージェントが回転したり、あまり速く動いたりしないように制限をかけます。

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

  • ソルバには、エージェントを地形オブジェクトに“くっつける”オプションや、足ボーンの配置を地形に順応させるオプションが用意されています。

シェルフツールの使い方

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。

SOP群衆

挙動

外観

  • 多様性

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

  • 布の取り付け

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

地形

  • 足の着地

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

  • 地形

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

  • 障害物

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