On this page |
概要 ¶
どの時間でも、すべてのエージェントは“walk”、“idle”、“attack”、“run_to_goal”などの特定の ステート(状態) にあります。 ステートは以下のもので定義します:
-
そのステートになっているエージェントに対して再生されるアニメーションクリップ。
-
エージェントが取り付けられている大元のパーティクルの動きに影響を与える ビヘイビア系ノード 。
-
エージェントのスケルタルアニメーションに影響を与えるノード。例えば、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 DOPで定義します。
-
群衆シミュレーションネットワーク内で、Crowd State DOPノードを作成し、それを
merge_states
ノードに接続します。 -
その新しい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を追加します。
-
パス曲線を選択します。
-
Crowds シェルフタブの Pathツールをクリックします。
-
ダイアログボックスから、パス曲線に辿らせたいエージェントのステート(またはすべてのステート)を選択します。
-
特定のステートを選択した場合、そのステートのCrowd Stateノードと
merge_states
ノードの間にPOP Steer Pathノードが接続されます。 -
すべてのステートを選択した場合、
merge_states
ノードの後にPOP Steer Pathノードが接続されます。
-
Look Atシェルフツール ¶
Look Atシェルフツールは、群衆ネットワーク内に、エージェントの視点を特定のオブジェクトに向けるAgent Look At DOPを接続します。
-
エージェントの視線先となるオブジェクトを選択します。
-
Crowds シェルフタブで、Look Atツールをクリックします。
-
ダイアログボックスから、その視線先となるオブジェクトの方をエージェントが見るステート(またはすべてのステート)を選択します。
-
特定のステートを選択する場合、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は、エージェントで扱う際に便利です。