On this page |
概要 ¶
群衆シミュレーションは、セットアップにいくつか異なるノードネットワークを必要とします。 それらのノードネットワークのほとんどが、シェルフツールによってセットアップすることができます。
-
エージェントプリミティブを定義したジオメトリネットワーク。
-
群衆シミュレーションを走らせるためのシミュレーションネットワーク。
クィックスタート ¶
Simulateシェルフツールを使用することで、シーン内に“デモ”の群衆シミュレーションを簡単に取り込むことができます。 これは、群衆シミュレーションに必要な色々なネットワークがどのようなものなのかを知るのに役立ちます。
-
Crowds シェルフタブの Simulateツールを⌃ Ctrl + クリックします。このツールは、Houdiniに組み込まれている
mocapbiped1
キャラクタを使って、自動的にエージェントとCrowd Sourceネットワークを構築します。 -
エージェントを歩かせる地形ジオメトリがあれば、それを選択して、 Crowds シェルフタブの Terrainをクリックします。
エージェントの定義 ¶
群衆では、キャラクタがデジタルアセットとしてカプセル化またはFBXファイルになっていることを前提にしています。
To... | Do this |
---|---|
シェルフツールを使って、キャラクタからエージェントを作成する |
|
手動でエージェントネットワークをセットアップする |
|
エージェント定義ネットワーク ¶
このネットワークでは、シミュレーションする前に、エージェントプリミティブを修正するためにあなたが(またはシェルフツールが)ノードを追加する場所です。例えば、このネットワークでレイヤーを追加したり、ラグドールシミュレーションをするための衝突ジオメトリやジョイントの回転制限情報を追加します。
|
エージェントプリミティブを作成し、その名前、現行レイヤー、現行アニメーションクリップなどの基本情報を設定します。 |
|
|
1個以上のアニメーションクリップをエージェント定義に追加します。 |
|
|
このノードは、シミュレーションネットワーク内でPOP Sourceノードを使ってエージェントを取り込めるようにするための参照ターゲットとして存在しています。 |
|
|
エージェント定義をディスクに書き出してから、それ以降は、入力の代わりにそのキャッシュ化したファイルからエージェント定義を読み込んでクックするようにさせることができます。 これを使用することで、キャラクタのクックが遅い場合に、そのエージェント定義ネットワークを高速化することができます。 |
|
|
重要なジョイントの名前などの追加情報をエージェントにセットアップし、 手足に使用するトランスフォームを指定すれば、ソルバは足の配置方法や他のプロシージャルな変更方法を知ることができます。 これ自体は計算が高速でキャッシュ化する必要がないので、Agent Definition Cacheノードの後に追加します。 |
|
|
エージェント定義の“キャッシュ化可能”な部分の最後を示したマーカー。 最終のエージェント定義を他のネットワークにインポートするのに便利なターゲット。 |
アニメーションクリップをエージェントに追加する ¶
クリップとは、キャラクタの短いアニメーション(例えば、立った状態、歩行、走行)のことです。 エージェント定義にクリップを追加することができるので、ステート別にエージェントに異なるアニメーションを演じさせることができます。
To... | Do this |
---|---|
アニメーションソースをセットアップする |
エージェントにクリップを追加する前に、 ソースキャラクタのそれぞれのインスタンスが各アニメーションを演じるようにセットアップ する必要があります。 例えば、歩行と走行のアニメーションをする このセットアップを行なう一番便利な方法は、キャラクタにアニメーションが埋め込まれているのであれば、キャラクタアセット自体のポップアップメニューを使ってアニメーションを切り替えることです。 次に、単に必要な数だけインスタンスを作成して、インスタンス毎に別々にメニューを設定します。 |
シェルフツールを使って、アニメーションクリップをエージェントに追加します |
|
手動でアニメーションクリップをエージェントに追加する |
|
Note
前のバージョンのHoudiniの群衆システムでは、エージェント情報を常にディスクにベイクし、1体のキャラクタインスタンスを作成して、それがアニメーションクリップを再生するように設定し、 そのクリップをベイクしてから、同じインスタンスが別のクリップを再生するように編集し、そのクリップをベイクしてといったように作業していました。
現在の群衆システムは、はるかに便利になって、もはやファイルをディスクにベイクする必要がなくなりました。 このシステムは、Houdiniで必要なキャラクタ情報を単にダイレクトにクックするだけです。 しかし、これだと各アニメーションクリップを演じるキャラクタアセットのインスタンスが 別々に 必要になることを意味するので、この群衆システムは、必要になった時にキャラクタ情報をクックします。
Crowd Sourceを作成する ¶
群衆を作成するには、 エージェントプリミティブ の群衆を作成する Crowd Source ネットワークが必要です。このネットワークは、ポイントをばら撒いて、各ポイント上にエージェントプリミティブをインスタンス化します。
-
Crowds シェルフタブで、Populateをクリックします。
-
エージェントセットアップオブジェクトを選択してから、Enterを押します。
-
地形ジオメトリがあれば、それを選択してEnterを押し、なければ単にEnterを押します。
(地形ジオメトリがない場合、そのノードは、そのノードのパラメータで定義された領域にエージェントをばら撒くだけです。)
Tip
最終結果のネットワークは編集することができ、エージェントをポイント上にコピーする前に、必要に応じて何かしらのSOPsを使ってそれらのポイントをセットアップすることができます。 例えば、散乱ポイントの代わりに、何かしらのSOPsを使って、規則正しく並んだ列のポイントをセットアップすることができます。
Crowd Sourceネットワーク ¶
|
Object merge |
これらのノードは、セットアップネットワークからエージェントプリミティブを“インポート”します。 |
|
このノードは、エージェントプリミティブをポイント上にコピーします。 このノードには、サーフェス上または定義した領域内にエージェントを自動的に配置したり、さらに初期状態をランダムにするオプションがあります。 |
|
|
このノードは、ラグドールシミュレーション用にエージェントのパーツ間に拘束ネットワークをセットアップします。 |
|
|
|
このノードは、シミュレーション内のエージェントクラス毎に別々のimport → crowd source → constraintsのブランチを結合します。 このノードより下には、エージェントをCrowd Simulation DOPネットワークに取り込むためのターゲットとして動作するNullノードがあります。この2つのノード間に、必要なノードを接続することで、そのノードをすべてのエージェントに適用することができます。 |
|
|
このDOP IOノードは、DOP群衆シミュレーションの結果をこのオブジェクトに取り込むことで、その結果をレンダリングできるようにします。 |
ジオメトリをCrowd Sourceノードの2番目の入力に接続することで、エージェントの配置を制御することができます。
-
ポイントジオメトリを接続すれば、それらのポイントにエージェントが作成されます。
入力ポイント上にエージェント関連のアトリビュートがあれば、それらのアトリビュートが、新しいエージェントプリミティブにコピーされます。これは、手動またはランダムで色々な開始条件、ルックなどをエージェントに指定するのに非常に効率の良い方法です。
-
サーフェスジオメトリを接続すれば、そのサーフェスの寸法が、パラメータでランダムにエージェントが配置される領域として使用されます。
そのサーフェスに
density
アトリビュートがあれば、このノードは、アトリビュート値がゼロ以外の箇所にのみエージェントを作成します。 -
何もジオメトリを接続しなかった場合は、そのパラメータを使って、ランダムに配置するエージェントの領域と数を決めます。
群衆シミュレーションを作成する ¶
Crowd Source ネットワークは、エージェントプリミティブを生成することで、群衆内の個々のエージェントを表現します。群衆を動かしたり挙動を実行させるには、 Crowd Simulation ネットワークが必要です。
-
Crowd Sourceオブジェクトを選択します。
-
Crowds シェルフタブで、 Simulateをクリックします。
このツールは、ダイナミクスネットワークを構築して、そのCrowd Sourceオブジェクトを読み込んで、いくつかのデフォルトの挙動を適用します。このネットワーク内のノードを編集することで、あなたが求めている群衆の挙動をセットアップすることができます。
このネットワークの一般的な構造に関する詳細は、以下のダイナミクスネットワークを参照してください。
DOPネットワーク ¶
Simulateシェルフツールは、上記のジオメトリネットワークを作成し、さらに、群衆をシミュレーションするためのシミュレーションネットワークをいくつかのサンプルノードと一緒に作成します。
|
Crowd Stateノードの後には、そのCrow Stateノードと
ステート(状態)の名前は、そのステート(状態)で再生されるエージェントと同じ名前のアニメーションクリップに合わせてください。 |
|
|
Crowd Triggerノードの後には、Crowd Transitionノードが接続されています。 これには、あるステート(状態)のエージェントがトリガー条件を満たした時に他のステート(状態)に切り替える設定を指定します。 (トリガーに複数のステート(状態)の変更を引き起こさせたい場合は、Crowd Triggerと |
|
|
これは、Crowd Sourceネットワークで作成されたエージェントプリミティブを参照するPOP Source DOPです。 |
|
|
群衆システムを実行します。このソルバは、すべてのエージェントに適用することができるオプションのいくつかのデフォルトの挙動(例えば、エージェントとエージェントとの衝突回避、地形追従)を制御することができます。 |
|
|
Crowd Object と POP Solver |
これらのノードは、群衆システムの構築のベースになっているパーティクル(POP)で使用されます。通常では、これらのノードを修正する必要はありません。 |
Tip
Houdiniは、ネットワークエディタ内のノードをわかりやすくするために、特定のノードにカラーコード(Crowd Stateはピンク、Crowd Triggerはオレンジ、Crowd Trigger Logicは緑)を自動的に設定します。 このカラーコードを変更したいのであれば、そのノードが作成された後でノードのカラーを変更することができます。
シェルフツール ¶
下記のツールは、シェルフの Crowds タブにあります。
|
キャラクタインスタンスが再生しているアニメーションを参照することで、そのアニメーションクリップをエージェント定義に追加します。 |
|
|
エージェントキャラクタのスケルトン周りに単純な衝突ジオメトリをセットアップします。 |
|
|
ラグドールシミュレーションに使用するために、エージェントキャラクタのジョイント回転制限をセットアップします。 |
|
|
選択したジオメトリ上にエージェントを配置するためのネットワークを作成します。 これは、シミュレーションネットワークを作成 しません 。 これは、シミュレーションを作成したくないレイアウトアーティストに役立ちます。 |
|
|
Paint density |
地形ジオメトリ上に |
|
サンプルのアニメーションエージェントとサンプルの挙動を使って、ジオメトリとシミュレーションのネットワークをセットアップします。 これは、迅速にネットワークをセットアップするのに役立ち、必要に合わせてネットワークを修正することができます。 |
|
|
選択したジオメトリを、現在の群衆シミュレーションの地形として設定します。 |
|
|
選択したジオメトリを、現在の群衆シミュレーションの障害物として設定します。 |
|
|
選択した経路にすべてのエージェントが辿るようにPOP Steer Pathノードを作成します。 ある特定の状態のエージェントのみがその経路を辿るようにしたい場合、POP Steer Pathノードを再接続する必要があります。 シミュレーションネットワークの概要とステート(状態)とビヘイビア(挙動)を参照してください。 |
|
|
エージェントの頭が、選択したオブジェクトの方を向くようにします。 |
|
|
エージェントが、選択したオブジェクトの後を追いかけるようにします。 |
|
|
選択したエージェントの頭のトランスフォームにカメラを取り付けます。 |