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

群衆シミュレーションのセットアップ

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

On this page

概要

群衆シミュレーションは、ジオメトリ(SOP)ネットワークとシミュレーション(DOP)ネットワークの両方を必要とします:

  • ジオメトリ(SOP)ネットワークは、エージェントの作成と定義をするのに使用します。HoudiniのSOPノードのフルパワーを使用すれば、地形などの既存モデルからエージェント用の位置を生成することができます。

  • シミュレーション(DOP)ネットワークは、実際の群衆シミュレーションを走らせるのに使用します。DOP群衆シミュレーションネットワークには、各パーティクル(と、そのパーティクルに取り付けられているエージェント)の動きを制御するロジックを格納します。このDOPネットワーク内では、エージェントは他のダイナミクス(DOPs)エレメントと相互作用させることができます。

クィックスタート

Simulateシェルフツールを使用することで、簡単に基本的な群衆シミュレーションシーンを取り込むことができます。 後は、目的に応じてそのネットワークを調整します。

  1. このツールは、Houdiniに組み込まれているmocapbiped1キャラクタを使って、自動的にエージェントCrowd Sourceネットワークを構築します。

    Simulateシェルフツールで作成されたオブジェクトレベルのネットワーク

    Simulateシェルフツールで作成された群衆シミュレーションネットワーク(crowd_sim):

    群衆シミュレーションDOPネットワーク
  2. エージェントを歩行させたい地形ジオメトリがあれば、その地形ジオメトリを選択してから、 Crowds シェルフタブの Terrain Foot Plantingをクリックします。その地形オブジェクトはStatic Solverの入力として追加されます。

    群衆シミュレーションネットワーク内の地形オブジェクト
  3. プレイバー Playをクリックしてシミュレーションを再生します。エージェントが立ち止まった状態から歩き出します。

エージェントの定義

エージェントは、ジオメトリ(SOP)ネットワークである エージェント定義ネットワーク 内で定義します。 このネットワークでは、群衆シミュレーションをする前に、あなた(またはシェルフツール)がノードを追加してエージェントを修正することができます。 この修正には、レイヤーの追加ラグドールシミュレーション用のコリジョンと回転情報の追加があります。

Simulateシェルフツールは、mocapbiped1_setup内に以下のようなエージェント定義ネットワークをセットアップします。

mocapbiped1_setup内のエージェント定義ネットワーク

Agent

エージェントプリミティブを作成し、名前、現行レイヤー、現行アニメーションクリップなどの基本的な情報を設定します。

Agent Clip

1個以上のアニメーションクリップをエージェント定義に追加します。

AGENT_DEFINITION

このノードは、シミュレーションネットワーク内でPOP Sourceノードを使ってエージェントを取り込めるようにするための参照ターゲットとして存在しています。

Agent Definition Cache

エージェント定義をディスクに書き出してから、それ以降は、入力の代わりにそのキャッシュ化したファイルからエージェント定義を読み込んでクックするようにさせることができます。 これを使用することで、キャラクタのクックが遅い場合に、そのエージェント定義ネットワークを高速化することができます。

Agent Prep

重要なジョイントの名前、手足に使用するトランスフォームなどの追加情報をエージェントにセットアップします。 Terrain Adaptation (エージェントの足が地形ジオメトリ上に適切に乗るように、Houdiniがエージェントのアニメーションを調整します)、 Look At (頭がどこかに向くように、Houdiniがエージェントの首ジョイントを編集します)のように、どのジョイントがどの体の部位を表わしているのかHoudiniに知らせる必要のあるような機能を実行する場合、群衆ソルバは、このAgent Prep SOPからの情報を使用して、足の着地や他のプロシージャルな変更を実行します。

このAgent Prep SOPは、いつも計算が高速でキャッシュする必要がないので、Agent Definition Cache SOPの後に接続しています。

Agent Collision Layer

ラグドールシミュレーションで使用します。 エージェントのスケルトンを囲んだ単純なジオメトリを定義します。このジオメトリは、エージェントがラグドールに変わった時に衝突させるサーフェスを決めるのに使用されます。

Agent Configure Joints

ラグドールシミュレーションで使用します。 各エージェントジョイントの動きの範囲を指定します。

OUT

エージェント定義の“キャッシュ化可能な”部分の最後を示したマーカー。 最終のエージェント定義を他のネットワークに取り込む際に参照するのに便利なノードです。

アニメーションクリップをエージェントに追加する

クリップとは、キャラクタの短いアニメーション(例えば、立った状態、歩行、走行)のことです。 エージェント定義にクリップを追加することができるので、ステート別にエージェントに異なるアニメーションを演じさせることができます。

To...Do this

アニメーションソースをセットアップする

エージェントにクリップを追加する前に、ソースキャラクタのそれぞれのインスタンスが各アニメーションを演じるようにセットアップする必要があります。

例えば、歩行と走行のアニメーションをするcharacter1に基づいたエージェントがあったとします。 1つのcharacter1のインスタンス(character1_walkとします)が歩行を演じ、もう1つのインスタンス(character1_runとします)が走行を演じるようにセットアップします。

Simulateシェルフツールは、静止状態、立ち止まった状態、歩行アニメーションを含んだMocap二足歩行キャラクタを作成します。

Simulateシェルフツールで作成されたアニメーションクリップ

シェルフツールを使って、アニメーションクリップをエージェントに追加する

  1. エージェント定義ネットワークを含んだジオメトリオブジェクトのディスプレイフラグを有効にして、アニメーションクリップを追加したいエージェントを表示します。

    Simulateシェルフツールのサンプルでは、このエージェント定義ネットワークはmocapbiped1_setupの中にあります。

    ジオメトリオブジェクト(エージェント)を表示
  2. Crowds シェルフタブの Add Clipをクリックします。

  3. ビューポート内で、表示したエージェントを選択します。これは、エージェント定義ネットワークを含んだジオメトリオブジェクトです。

  4. クリップに関する情報を設定するためのダイアログボックスが表示されます:

    • キャラクタリグアセット、FBXファイル、USDファイル、LOPノードのどちらからキャラクタのアニメーションを取り込むのかを選択します。

    • キャラクタアセットノードのパス(またはFBX/USDファイルのファイルパス)を指定します。

    • このアニメーションの Clip Name を設定します。

    • OK をクリックします。

新しいアニメーションクリップは、エージェント定義ネットワーク内のAgent Clip SOPに追加されます。

Note

前のバージョンのHoudiniの群衆システムでは、エージェント情報を常にディスクにベイクし、1体のキャラクタインスタンスを作成して、それがアニメーションクリップを再生するように設定し、 そのクリップをベイクしてから、同じインスタンスが別のクリップを再生するように編集し、そのクリップをベイクしてといったように作業していました。

現在の群衆システムは、はるかに便利になって、もはやファイルをディスクにベイクする必要がなくなりました。 この群衆システムは、Houdiniで必要なキャラクタ情報を単にダイレクトにクックするだけです。 しかし、これだと各アニメーションクリップを演じるキャラクタアセットのインスタンスが 別々に 必要になることを意味するので、この群衆システムは、必要になった時にキャラクタ情報をクックします。

Crowd Source

群衆を作成するには、エージェントの群れを作成する Crowd Sourceネットワーク が必要です。 このCrowd Sourceネットワークは、指定された領域にポイントをばら撒き、それらのポイントにエージェントを取り付けるジオメトリ(SOP)ネットワークです。

Simulateシェルフツールは、crowdsource内に以下のCrowd Sourceネットワークをセットアップします。

Crowd Sourceネットワーク

Object Merge

エージェント定義ネットワークからエージェントを“インポート”します。

Crowd Source

エージェントをポイント上にコピーします。 このノードには、サーフェス上または定義した領域内にエージェントを自動的に配置したり、さらに初期状態をランダムにするオプションがあります。

ジオメトリをCrowd Sourceノードの2番目の入力に接続することで、エージェントの配置を制御することができます。

  • ポイントジオメトリを接続すれば、それらのポイントにエージェントが作成されます。

    入力ポイント上にエージェント関連のアトリビュートがあれば、それらのアトリビュートが、新しいエージェントにコピーされます。これは、手動またはランダムで色々な開始条件、ルックなどをエージェントに指定するのに非常に効率の良い方法です。

  • サーフェスジオメトリを接続すれば、Crowd Sourceノードは、そのサーフェスの寸法を、ランダムにエージェントが配置される領域として使用します。そのサーフェスにdensityアトリビュートがあれば、このノードは、アトリビュート値がゼロ以外の箇所にのみエージェントを作成します。

  • 何もジオメトリを接続しなかった場合は、Crowd Sourceノードは、パラメータを使って、ランダムに配置するエージェントの領域と数を決めます。

Agent Constraint Network

ラグドールシミュレーションで使用します。 エージェントのパーツ間に拘束ネットワークをセットアップします。

merge_crowdsources

群衆シミュレーション内のエージェントクラス毎に別々のObject Merge → Crowd Source → Agent Constraint Networkのブランチを結合します。

OUT

エージェントを群衆シミュレーションネットワークに取り込む際に参照するのに便利なノードです。 すべてのエージェントに適用したいノードは、merge_crowdsourcesとこのNullノードの間に接続します。

crowd_sim_import

このDOP IOノードは、DOP群衆シミュレーションの結果をこのオブジェクトに取り込むことで、その結果をレンダリングできるようにします。

To...Do this

シェルフツールを使用してCrowd Sourceネットワークを作成する。

  1. エージェント定義ネットワークを含んだジオメトリオブジェクトのディスプレイフラグを有効にして、エージェントを表示します。

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

  3. ビューポート内で、エージェントを選択してEnterを押します。

  4. 地形ジオメトリがあれば、それを選択してEnterを押します。地形ジオメトリがなければ、単にEnterを押します。

    地形ジオメトリがなければ、このノードは単にパラメータで定義された領域にエージェントをばら撒きます。

Tip

この結果のネットワークを編集し、様々なSOPsを使用すれば、エージェントがコピーされる前のポイントをセットアップすることができます。 例えば、ポイントをばら撒くのではなく、SOPsを使用して規則正しい列でポイントをセットアップすることができます。

群衆シミュレーション

Crowd Source SOPネットワークは、エージェントの群れを作成します。 この群衆を動かしたり挙動を実行させるには、 群衆シミュレーションDOPネットワーク が必要です。

Simulateシェルフツールは、crowd_sim内に以下の群衆シミュレーションネットワークを作成します。

群衆シミュレーションDOPネットワーク

群衆シミュレーションネットワークの一部のコンポーネントを以下に挙げます。

群衆シミュレーションネットワークを構成しているコンポーネント

ステートとビヘイビア

merge_statesノードの入力の各ブランチは、Crowd Stateノードから開始しています。このノードには、ステート(状態)の名前を指定します。 このステート名は、そのステート中にエージェントが演じるアニメーションクリップの名前に合わせてください。

Crowd Stateノードの後には、エージェントの動きに影響を与えるビヘイビア系ノード、さらには、エージェントのスケルタルアニメーションに影響を与える他のノードを接続します。 それらのノードをCrowd Stateノードとmerge_statesノードの間に接続した場合、それらのノードの効果は そのステート になっているエージェントに適用されます。 それらのノードをmerge_statesノードの後に接続した場合、それらのノードの効果は すべてのステート のエージェントに適用されます。 これは、障害物の回避などの動作で役に立ちます。

複数のビヘイビア系ノードの効果は正規化され、それらのビヘイビアの加重平均がCrowd Solverによってエージェントに適用されます。

トリガーとトランジション

merge_transitionsノードの入力の各ブランチは、Crowd Triggerノードから開始しています。 このCrowd Triggerノードには、エージェントのステート(状態)を変更させるための条件を指定します。 Crowd Trigger Logicノードを使用することで、複数の条件を組み合わせることができます。 このCrowd Trigger Logicノードには、2つのトリガー間での“And”, “Or”, “Not”の関係を指定することができます。

Crowd Triggerノードの後には、Crowd Transitionノードを接続します。 このCrowd Transitionノードは、あるステート(状態)のエージェントがトリガー条件を満たした時に他のステート(状態)に切り替えます。 トリガーに複数のステート(状態)の変更を引き起こさせたい場合は、Crowd Triggerノードとmerge_transitionsノードの間に複数のCrowd Transitionノードを接続すると良いでしょう。

Crowd Source

これは、Crowd Sourceネットワークで作成されたエージェントを参照するPOP Source DOPです。 ここには、エージェントを表現したパーティクルが格納されます。

Crowd Solver

群衆システムを実行します。 Crowd Solverには、すべてのエージェント、エージェントのサブグループに適用可能なデフォルトの挙動用のコントロール(例えば、エージェントとの衝突回避、地形追従)が備わっています。

Crowd Object

群衆システムが処理するデータは、このオブジェクトに追加されます。通常では、このノードを修正する必要はありません。

Tip

Houdiniは、ネットワークエディタ内のノードをわかりやすくするために、特定のノードにカラーコード(Crowd Stateはピンク、Crowd Triggerはオレンジ、Crowd Transitionは青)を自動的に設定します。 このカラーコードを変更したいのであれば、そのノードが作成された後でそのノードのカラーを変更しても構いません。

シェルフツール

以下のツールは、シェルフの Crowds タブにあります。

Agent

キャラクタに基づいてエージェント定義ネットワークを作成します。

Add Clip

キャラクタインスタンスが演じているアニメーションを参照することで、そのアニメーションクリップをエージェント定義に追加します。

Collision Layer

エージェントキャラクタのスケルトンを囲んだ単純な衝突ジオメトリをセットアップします。 これはラグドールシミュレーションで使用されます。

Configure Joints

エージェントキャラクタのジョイント回転制限をセットアップします。 これはラグドールシミュレーションで使用されます。

Populate

選択したジオメトリ上にエージェントを配置するためのCrowd Sourceネットワークを作成しますが、群衆シミュレーションネットワークを作成 しません 。 これは、シミュレーションを作成したくないレイアウトアーティストに役立ちます。

Paint Density

地形ジオメトリ上にdensityアトリビュートをペイントすることで、生成されるエージェントのランダムな分布を制御することができます。

Simulate

サンプルのアニメーションエージェントとサンプルの挙動を使って、ジオメトリ(SOP)ネットワークシミュレーション(DOP)ネットワークをセットアップします。 これは、迅速に様々な群衆ネットワークをセットアップするのに役立ちます。 必要に合わせてそのネットワークを修正することができます。

Terrain Foot Planting

選択したジオメトリを、現在の群衆シミュレーションの地形として設定します。

Obstacle

選択したジオメトリを、現在の群衆シミュレーションの障害物として設定します。

Path

選択した経路にすべてのエージェントが辿るようにPOP Steer Pathノードを作成します。 ある特定の状態のエージェントのみがその経路を辿るようにしたい場合、POP Steer Pathノードを再接続する必要があります。

Look At

エージェントの頭が、選択したオブジェクトの方を向くようにします。

Target Position

エージェントが、選択したオブジェクトの後を追いかけるようにします。

Agent Cam

選択したエージェントの頭のトランスフォームにカメラを取り付けます。

群衆シミュレーション

はじめよう

  • 基本

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

  • セットアップ

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

動くパーツ

  • エージェント

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

  • ステート

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

  • トリガー

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

  • キャッシュ

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

SOP群衆

挙動

外観

  • 多様性

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

  • 布の取り付け

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

地形

  • 足の着地

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

  • 地形

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

  • 障害物

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