| On this page |
エージェント間の親子関係は、Agent Relationship SOPを使用してセットアップすることができます。
このAgent Relationship SOPは、親子関係を示したアトリビュートをエージェントに追加します。
これらのアトリビュートは、Crowd Solverおよび群衆モーションパスツールで使用され、子エージェントが親エージェントに取り付けられた状態を維持します。
親子関係のセットアップ ¶
この例では、騎手エージェント(子)を馬エージェント(親)に取り付けています:
子エージェントは、ポイント番号に基づいて親エージェントに取り付けされます。 親エージェントと子エージェントの数が同じである必要はありません。 子エージェントが親エージェントより多い場合、一部の親エージェントに複数の子エージェントが取り付けられます。
デフォルトでは、Agent Relationship SOPは子エージェント全体のトランスフォームを親エージェント全体のトランスフォームに合うように更新します。 初期取り付け後に子エージェントをさらに調整する方法がいくつかあります:
-
ビューポートの左側にあるツールバーの
をクリックして、Agent Relationshipビューアステートに入り、ハンドルを使用して子エージェントを調整します。 子エージェントの向きを変更するには、そのハンドルを(
)クリックして、 Cycle Translate/Rotate を選択するか、または、ビューポート上でYを押してそのハンドルを回転モードに変更します。 そのハンドルを操作すると、Agent Relationship SOPの Translate および Rotate パラメータが更新されます:
-
子エージェントを親エージェントの特定のジョイントに取り付けます - Agent Relationship SOPの Parent Joint をオンにして、騎手の取り付け先となる馬のジョイントを選択します。 子エージェント側のジョイントを指定( Child Joint パラメータで指定)して、それを Parent Joint に取り付けることもできます。
| To... | Do this |
|---|---|
|
親エージェントとして指定可能なエージェントを指定する。 |
その選択した親エージェントが Parent Group パラメータに設定されます。 |
|
子エージェントを特定の親エージェントに取り付ける。 |
|
|
子エージェントのスケールが親エージェントのスケールに合うように変更する。 |
Agent Relationship SOPの Match Parent Agent Scale をオンにします。 |
群衆シミュレーションネットワーク ¶
群衆シミュレーションネットワークでは、Crowd Solverが子エージェントを親エージェントに取り付けた状態を維持し、その親エージェントの動きは、その親エージェントに加えられているフォースによって制御されています。
親のSOPネットワークのcrowd_simulation DOPネットワークを以下に載せます:
-
親のSOPネットワーク内のAgent Relationship SOPが
crowd_simulationDOPネットワークの1番目の入力に接続されているので、crowdobjectDOPの Source を First Context Geometry に設定します。 -
馬エージェントのステートを設定します:
-
馬エージェントのCrowd State DOP(この例では
horse_run_straight)の名前を変更します。 -
このステートで馬が再生するアニメーションクリップを設定します - Crowd State DOPの Clip Name を
run_straightに設定します。 -
オリジナルのクリップには全体的なルートモーションが含まれているので、 Type を Locomotive に設定します。
Note
エージェントで利用可能なアニメーションクリップを確認するには、
Agent Clip SOPを使用します:
-
Agent Clip SOPの Set Current Clip をオンにして、ドロップダウンメニューから確認したいアニメーションクリップを選択します。 これらのアニメーションクリップ名は、Crowd State DOPの Clip Name パラメータでそのステートが再生するアニメーションクリップを設定するのに使用されます。
-
プレイバーの
をクリックして、そのアニメーションクリップを再生します。 アニメーションが非常に速く再生される場合は、プレイバーの
のReal Time Toggleをクリックしてみてください。
-
-
POP Steer Wander DOPを使用して、馬エージェントがランダムに動き回るようにします:
-
パーティクルではなくエージェントを扱うので、 Output Attribute を Crowds steerforce に設定します。
-
-
騎手エージェントのステートを設定します:
-
騎手エージェントのCrowd State DOP(この例では
rider_run_straight)の名前を変更します。 -
このステートで騎手が再生するアニメーションクリップを設定します - Crowd State DOPの Clip Name を
runに設定します。
-
親エージェントと子エージェントは、(それぞれのCrowd State DOPで定義された)独自のアニメーションクリップセットを持つ個別のエージェントとして扱われます。
子エージェントは親エージェントに取り付けられているので、その子エージェントに加わるステアリングフォースは、その子エージェントの動きには何も影響しません。
子エージェントを親エージェントから外す ¶
子エージェントを親エージェントから外したい場合があります。 例えば、子エージェントを完全なラグドールに遷移させたい場合、まず最初にその子エージェントを親エージェントから外すことになります。
Agent Relationship SOPは、親子関係を示したアトリビュートをエージェントに追加します。
エージェントのagentrel_parentidアトリビュートは、そのエージェントの取り付け先である親エージェントを識別します。
agentrel_parentidが0未満の場合、そのエージェントは親を持たず、他のagentrel_*アトリビュートは意味を持ちません。
この例では、50フレーム後に騎手エージェントを親の馬エージェントから外します。 これを行なうには、騎手が外された時に再生するアニメーションクリップが設定されたCrowd State DOPと、その騎手を新しいアニメーションクリップに遷移させるトリガー条件が設定されたCrowd Trigger DOPを追加します:
-
Crowd State DOP(
rider_detached)は、Crowd State DOP(rider_run_straight)のコピーです。 -
POP Wrangle DOPを使用して、騎手を親から外します:
-
VEXpression フィールドに、親子関係を解消したい子エージェントの
agentrel_parentidアトリビュートを-1に設定するVEXコードを記述します。 例えば、以下のVEXスニペットは、すべての子エージェントの親子関係を解消します:i@agentrel_parentid = -1;
-
-
Crowd Trigger DOPを使用して、騎手を親から外すトリガーを設定します:
-
Type を Time (Current) に設定します。 デフォルトでは、( Units 、 Comparison 、 Playback Time のパラメータの値に基づいて)フレーム数が50を超えるとトリガーが有効になります。
-
-
Crowd Transition DOPを使用して、騎手を親エージェントから外した後に、その騎手を別のステートに遷移させます:
-
子エージェントを
rider_run_straightステートからrider_detachedステートに遷移させたいので、 Input State をrider_run_straightに、 Output State をrider_detachedに設定します。
-
以下の動画では、騎手エージェントが50フレーム経過した後に親エージェントから外れた後も、アニメーションクリップの再生を続けている様子が分かります:
| See also |