On this page |
概要 ¶
群衆DOPワークフローはシミュレーションベースの手法を採用しています。 エージェントは常に特定のステート(状態)にあり、それがエージェントの動きや再生されるアニメーションクリップを定義します。 特定のステートになると、エージェントは例えばゴールに向かって歩いたり、ぶらついたり、他のエージェントを避けたりします。 エージェントに作用したり、その動きを誘導するフォースは、トリガーで常に評価され、エージェントの周囲で起こっていることを特定し、ある時点でエージェントを別のステートに遷移させます。 この手法は、いくつかの簡単なルールをセットアップして群衆全体の全般的な挙動を制御できるため、大規模な群衆には強力です。
DOPシミュレーションワークフローの課題は、少数のエージェントを正確に制御することです。 例えば、1つのエージェントのパスを変更したい場合、他のエージェントに影響を与えずにそのエージェントの挙動を更新するように、群衆セットアップの変更方法を考える必要があります。 群衆シミュレーションのエージェントはすべて相互に反応するので、このDOPシミュレーションワークフローだと困難です。
SOPモーションパスを使用することで、ユーザは群衆全体を再シミュレーションすることなく、少数のエージェントのモーションパスまたはアニメーションを簡単に変更することができます。 SOPモーションパスツールにはシミュレーションは含まれません。 タイムステップを1つも進めずに、フォースとトリガーを評価して、エージェントを別のステートに切り替えるかどうかを決定します。 エージェントのモーションパスが、時間の経過と共に変化するエージェントの全体的な位置を描画し、パス上で操作を実行してエージェントがどこに移動するかを決定します。
SOPモーションパスツールを使用すれば、ユーザは別の方法で群衆ショットをセットアップすることができます。 SOPモーションパスツールとDOPシミュレーションワークフローをうまく組み合わせることで、目的の群衆の挙動を実現することができます。
基本セットアップ ¶
SOP群衆モーションパスツールセットはCrowd MotionPath SOPから始めます。 これはエージェントの群衆からモーションパスを生成します。 Crowd MotionPath Evaluate SOPは、そのCrowd MotionPath SOPと併用するノードです。 Crowd MotionPath Evaluate SOPは、特定のフレームでパスに沿ってエージェントの位置を決定し、エージェントでアニメーションを再生します。
Crowd MotionPath SOPとCrowd MotionPath Evaluate SOP間では、以下の操作が行なわれます:
-
エージェントのパスを操作して、パスが移動する場所を指示します。
-
様々なトリガーに基づいて異なるアニメーションクリップ間で遷移させます。
群衆モーションパスを生成する ¶
SOP群衆モーションパスツールの入力は、エージェントの群衆です。
Note
SOPモーションパスとDOPシミュレーションのどちらの入力群衆の作成にも、同じセットアップを使用することができます。
以下は、エージェントの群衆を作成する基本セットアップの一例です。これらのノードを群衆で使用する方法の詳細は、セットアップを参照してください。
Crowd MotionPath SOPによって生成されたモーションパスは、特定のフレーム範囲内の時間軸における各ポイントでのエージェント位置を示したカーブによって表現されます。 エージェントの正面には、時間範囲全体のパスが配置されます。 デフォルトでは、エージェントのパスは、エージェントに割り当てられているアニメーションクリップから生成されます。 モーションデータはアニメーションクリップから取得され、順再生を繰り返すことで、時間軸における各ポイントでのエージェントの位置を生成します。
Note
Crowd MotionPathツールは、時間の経過と共にスケルトンのポーズを配置するMotionClipツールと似ています。
To... | Do this |
---|---|
パスの生成に使用されるフレーム範囲を変更する |
Crowd MotionPath SOPで、 Start/End/Inc 値を変更します。 |
エージェントパスの生成に使用されるアニメーションクリップ(s)を変更する |
Crowd MotionPath SOPの Clip Assignment セクションの Clip Names にクリップの名前を設定します。 アニメーションクリップのライブラリがある場合、異なるクリップをいくつか指定して、エージェントが再生するクリップがランダムに選択されるようにすることができます。
|
シミュレーションからエージェントパスを構築する |
アニメーションクリップのモーションに基づいてエージェントパスを構築するのではなく、シミュレーションからパスを生成することもできます。 以下の例では、群衆シミュレーションDOPネットワークによって、エージェントがぶらついたり互いに避けたりします。DOPシミュレーションからパスを生成するには:
このサンプルでは、シミュレーションした群衆からモーションパスを生成する方法を説明しています。 |
アニメーションクリップの速度を変更する |
Crowd MotionPath SOPで、 Clip Speed を調整します。 Clip Speed の横にあるドロップダウンメニューで Set Varying を選択し、 Variance および Variance Seed 値を調整することで、様々なエージェント間でクリップ速度に変化を付けます。 |
時間軸における各ポイントでのパスに沿ったエージェントの位置を表示する |
右側のビューポートツールバーで Display pointsをオンにします。 |
エージェントパスを操作する ¶
以下のノードは、エージェントが時間に追従するパスを変化させます:
ビューポートに描画されたカーブ(s)に追従するように元のエージェントパスを変形させます。
エージェントが移動する位置を正確に決定できるようにパスを直接操作することができます。 Crowd MotionPath Followよりも細かなレベルの制御が可能です。
エージェント間の衝突の検出と回避を実行します。
エージェントパスが追従するガイドカーブ ¶
エージェントが追従するガイドカーブを素早く描画できるため、エージェントを道に沿って進ませたい場合などに便利です。 Crowd MotionPath Follow SOPは、描画されたカーブに追従するように元のエージェントパスを変形させます。 パスに沿ってポイントの位置と方向を変更しますが、アニメーションクリップは変更しません。
-
Crowd MotionPath Follow SOPを、Crowd MotionPath SOPとCrowd MotionPath Evaluate SOPの間に接続します。
-
Curve SOPの出力をCrowd MotionPath Follow SOP(3番目の入力)に接続します。
-
Curve SOPを使用してビューポートにカーブ(または複数のカーブ)を描画します。デフォルトでは、エージェントパスは最も近いカーブに追従します。
Note
Construction Planeを表示して、カーブがコンストラクション平面に自動的にスナップするようにします。 右側のビューポートツールバーでDisplay Construction Planeをクリックします。
以下の例では、カーブが描画されている間(Curve SOPが選択されています)、Crowd MotionPath Follow SOPが表示され、パスがどのように変形されるのか確認することができます。 カーブが描画されると、Crowd MotionPath Evaluate SOPが選択および表示され、更新されたパスに沿って移動するエージェントのアニメーションを確認することができます。
このサンプルでは、ガイドカーブに追従するようにモーションパスを変形させる方法や、エージェントが閉じたループを辿るようにさせたり、アトリビュートを使用して各エージェントが辿るカーブを制御するといった高度なオプションを説明しています。
To... | Do this |
---|---|
Curve SOPを使用して描画したカーブをすべて削除する |
Curve SOPで、 Reset Operations をクリックします。 |
エージェントパスを直接操作する ¶
Crowd MotionPath Edit SOPを使用すると、パスを直接操作して、エージェントが移動する位置を正確に決定することができます。 このノードでは、Crowd MotionPath Follow SOPよりも細かなレベルでパスの操作を制御できます。
-
Crowd MotionPath Edit SOPを、Crowd MotionPath SOPとCrowd MotionPath Evaluate SOPの間に接続します。
-
Crowd MotionPath Edit SOPを選択して表示します。
-
ビューポートで、カーブに沿ってポイントをドラッグし、パスを変形させます。これらのポイントは ピン と呼ばれます。
Note
Construction Planeをオンにして、平坦な地形でポイントをドラッグすると、ポイントがコンストラクション平面に沿ってドラッグされるようにします。
注意:
-
モーションパス上にピン留めされた各ポイントにはウェイトがあり、それが、パスがピンから受ける影響の強度を決定します。各ピンのウェイトは、HUDスライダの Pin Weight パラメータを使用して変更することができます。
-
変形されたカーブがピン留めポイントを通過しない時、点線が表示され、そのピンとカーブ上の元のポイントの関係を示します。
-
デフォルトでは、モーションパスが変更されても、カーブの長さは通常維持されます。
このサンプルでは、Crowd MotionPath Edit SOPを使用して、特定のエージェントのパスをインタラクティブに調整する方法を説明しています。
To... | Do this |
---|---|
複数のピンをドラッグする |
|
選択したピンを削除する |
Deleteを押します。 |
選択したピンのウェイトを変更する |
を使用するか、HUDスライダの Pin Weight パラメータを変更します。 |
新しいピンのデフォルトのウェイトを設定する |
Default Pin Weight パラメータを設定します。 |
モーションパスの開始ポイントのウェイトを変更する |
Start Point Weight パラメータを設定します。 |
選択したパス上のすべての編集を削除する |
Uを押して、選択したピンを含むすべてのパス上の編集を削除します。 |
すべての編集を削除する |
パラメータエディタで Reset All Changes をクリックします。 |
衝突の検出と回避 ¶
Crowd MotionPath Avoid SOPは、エージェント間の衝突の検出と回避を実行します。
-
Crowd MotionPath Avoid SOPを、Crowd MotionPath SOPとCrowd MotionPath Evaluate SOPの間に接続します。
-
Crowd MotionPath Avoid SOPを選択して表示します。
デフォルトで、 Visualize Collisions はオンになっており、モーションパスの衝突が含まれる部分をハイライト表示します。球のガイドジオメトリは、衝突検出に使用されるエージェントのサイズを示します。
-
Steering タブのパラメータと Iterations の数を調整し、衝突の解決を試みます。 Iterations は、衝突を解決するためにカーブ上に作成される回避パスの数です。 Steering のパラメータで制限をあまりに厳しくした場合、後のイテレーションにあまり効果が見られなくなる場合があります。
Note
エージェントがどこに移動するかをより細かく制御したい場合は、Crowd MotionPath Follow SOPまたはCrowd MotionPath Edit SOPを使用してください。
To... | Do this |
---|---|
起こり得る衝突を表示する |
Visualize Collisions をオンにします。モーションパスの衝突が含まれる部分がハイライト表示されます。 Avoidance がオフの場合でも、 Visualize Collisions は衝突が発生する場所を特定するのに便利です。 |
特定のパスで衝突回避を実行する |
Group で指定したエージェントは、 Group でリストされていないエージェントと衝突する可能性があります。 |
エージェントが、どのくらい前から起こり得る衝突を回避し始めるのか特定する |
Max Collision Time を調整します。 Max Collision Time の値が高いほど、エージェントは早く起こり得る衝突の回避を試み始めます。 |
エージェントの衝突検出のサイズを変更する |
Particle Scale Multiplier を調整して、すべてのエージェントの衝突サイズを変更します。 各エージェントは、例えばAttribute Adjust Float SOPを使用して、上流で設定された |
衝突回避を適用するフレーム範囲を設定する |
Start Frame および End Frame をオンにして指定します。 |
パスの開始時に初期の回転角度を設定する |
Max Initial Rotation をオンにして設定します。 これは、モーションパスの開始時にエージェントが非常に接近していて、エージェント同士を遠ざけたい時に便利です。 Max Initial Rotation を使用すると、開始時だけ即座にエージェントが反対方向を向くように設定することができます。 これにより、時間範囲全体のTurn Rateに影響する Max Turn Rate を調整する必要がなくなります。 |
パスの元の終了位置を維持する |
Goal Position Weight を上げます。 |
近接エージェントを回避する |
|
障害物を回避する |
このサンプルでは、Crowd MotionPath Avoid SOPを使用して障害物を回避する方法を説明しています。 |
他のグループとの衝突を無視する特定のエージェントグループを指定する |
このサンプルでは、Crowd MotionPath Avoid SOPを使用して、近接エージェント間に回避を適用する方法を説明しています。
エージェントの エージェントの エージェントの |
エージェントが追従するパスを設定する |
Crowd MotionPath Avoid SOPを使用すると、障害物としてラインジオメトリを入力することで、エージェントにパスを追従させることができます。このラインジオメトリは、エージェントが回避を試みるチューブ形状として扱われます。 |
衝突するポイントを含むジオメトリ上のポイントグループを出力する |
Collision Point Group をオンにし、ポイントグループの名前を指定します。 |
アニメーションクリップ間のトランジション(遷移) ¶
以下のノードは、アニメーションクリップ間のトランジション(遷移)を制御します:
異なるアニメーションクリップに切り替えます。
別のアニメーションクリップへのトランジションをトリガーする条件を設定します。
エージェントのベースアニメーション上に様々なアニメーションクリップをレイヤ化します。 レイヤ化されたクリップは、スケルトンの特定のパーツに適用することができます。
クリップの遷移ポイントを手動で選択する ¶
Crowd MotionPath Transition SOPを使用して、新しいアニメーションクリップに遷移させます。
-
Crowd MotionPath Transition SOPを、Crowd MotionPath SOPとCrowd MotionPath Evaluate SOPの間に接続します。
-
Crowd MotionPath Transition SOPで、 Clip Name を新しいアニメーションクリップに設定します。
デフォルトで、Crowd MotionPath Transitionはフレーム範囲の開始フレームでエージェントのアニメーションクリップを切り替えます。
パス上の後のポイントで新しいアニメーションクリップに遷移させるには:
-
Crowd MotionPath Transition SOPで、 Trigger Group の横にあるをクリックします。
-
ビューポートで、トランジションを開始するパス上のポイントを選択します。⇧ Shiftを押したまま、様々なパスでポイントを選択します。単一のパスに沿って複数のポイントを選択した場合、パス上の最初に選択したポイントでトランジションが発生します。
-
Enterをクリックします。 Trigger Group パラメータは選択したポイントに設定されます。
このサンプルでは、Crowd MotionPath Transition SOPを使用してアニメーションクリップ間をブレンドする方法や、Clip Transition Graphで定義された中間遷移クリップを使用する方法を説明しています。
To... | Do this |
---|---|
複数のトリガーに基づいて新しいアニメーションクリップに切り替える |
Combine Triggers セクションで、ブール論理を使用して様々な組み合わせのトリガーを指定します。 |
少し時間をずらして、エージェントを新しいアニメーションクリップに遷移させる |
|
異なるアニメーションクリップに遷移させる |
アニメーションクリップのライブラリがある場合、異なるクリップをいくつか指定することで、トランジション(遷移)先の次のクリップとしてランダムに選択できます。
|
トランジションのシーケンスを使用して新しいクリップに遷移させる |
Clip Transition Graphを使用すると、クリップトランジションをより細かく制御することができます。Clip Transition Graphは、ペアのクリップの間でトランジション領域を自動的に見つけ、現在のクリップが新しいクリップにうまくブレンドするポイントを決定します。また、現在のクリップから新しいクリップへの、トランジションのシーケンスを指定することもできます。
例として上記のクリップトランジションを使用して、以下を指定する場合:
その後、初期
初期
Note Crowd Source SOPまたはCrowd MotionPath SOPのいずれかでクリップを初期化することができます。 クリップを割り当てるのが、群衆のレイアウトを取り込む時か、またはエージェントパスを生成する直前かは、ワークフローの設定によります。 Crowd MotionPath SOPでのクリップの割り当ての方がやや柔軟性が高く、 Group パラメータを使用して、エージェントの様々なグループに対してクリップの割り当てをセットアップしたり、特定のエージェントのクリップを上書きすることができます。 |
トリガー条件に基づいて新しいアニメーションに遷移させる ¶
Crowd MotionPath Trigger SOPおよびCrowd MotionPath Transition SOPは連携して、特定の条件が満たされた時にエージェントのアニメーションクリップを切り替えます。
Crowd MotionPath Triggerは、別のアニメーションクリップへのトランジションをトリガーする条件を設定し、Crowd MotionPath Transitionは、トリガー条件が満たされた時にエージェントのアニメーションクリップを切り替えます。
-
Crowd MotionPath Trigger SOPとCrowd MotionPath Transition SOPを、Crowd MotionPath SOPとCrowd MotionPath Evaluate SOPの間に接続します。
-
Crowd MotionPath Trigger SOPで、トリガーの名前( Trigger Name )はデフォルトのノード名であるCrowd MotionPath Triggerに設定されています(ここでは
crowdmotionpathtrigger1
)。 Trigger Name は、トリガーを参照するCrowd MotionPath Transition SOPなどの後続ノードで使用されるため、もっと分かりやすい名前に変更してもかまいません。 -
Crowd MotionPath Trigger SOPで、 Type パラメータのトリガータイプを設定します。特定のフレームでアニメーションクリップを切り替えるには:
-
Type を Time に設定します。
-
Frame を、異なるアニメーションクリップに遷移させるフレームに設定します。
以下の例では、Crowd MotionPath Trigger SOPが選択および表示されています。トリガー条件を満たすパス上のポイントがハイライト表示されています。
-
-
Crowd MotionPath Transition SOPで:
-
Trigger Group をCrowd MotionPath Trigger SOPの名前(この例では、
crowdmotionpathtrigger1
)に設定します。 -
Clip Name を新しいアニメーションクリップに設定します。
以下の例では、Crowd MotionPath Transition SOPが選択および表示されています。トリガー条件を満たすパス上のポイントが、新しいアニメーションクリップに遷移されます。
-
Note
Crowd MotionPath TriggerノードおよびCrowd MotionPath Transitionノードは、群衆シミュレーションネットワークにおいてCrowd Trigger DOPおよびCrowd Transition DOPに相当するSOPレベルのノードです。
このサンプルでは、Crowd MotionPath Transition SOPおよびCrowd MotionPath Trigger SOPを使用して、アニメーションクリップ間をブレンドする方法を説明しています。
To... | Do this |
---|---|
エージェントが領域またはジオメトリ内部にある場合、新しいアニメーションクリップに切り替える |
Incoming の Comparison メソッドは、トランジションがトリガーされる各パス上の1つのポイントをハイライト表示します。 トランジションをトリガーする境界領域として、他のジオメトリを使用することもできます。以下の例では、Rubber Toyテストジオメトリを境界領域として使用しています。
新しいアニメーションクリップへのトランジションは、エージェントがRubber Toyジオメトリ内部にある時にトリガーされます(以下では、Rubber Toyジオメトリがテンプレートになっています)。 他のタイプのプリビルドのトリガーについては、Crowd MotionPath Triggerノードのドキュメントを参照してください。 このサンプルでは、エージェントにクリップをレイヤ化する方法と、エージェントが境界オブジェクト内に入った時にアクティブにする方法を説明しています。 |
レイヤアニメーション ¶
Crowd MotionPath Layer SOPを使用すると、手を振る、頭の向きを変えるなどのモーションを簡単にエージェントに追加することができます。様々なモーションを望ましい組み合わせで実行する、完全に新しいアニメーションクリップは必要ありません。Crowd MotionPath LayerはCrowd MotionPath Transitionと似ていますが、完全に新しいアニメーションクリップに切り替えるのではなく、エージェントのベースアニメーションの上に異なるクリップをレイヤ化します。レイヤ化したクリップも、スケルトンの特定のパーツに適用することができます。
-
Crowd MotionPath Trigger SOPとCrowd MotionPath Layer SOPを、Crowd MotionPath SOPとCrowd MotionPath Evaluate SOPの間に接続します。
-
エージェントの定義を構築する際に、Agent Transform Group SOPを追加します。Agent Transform Groupは、レイヤ化したクリップを適用するスケルトンのパーツを決定するのに使用される、ジョイントの名前付きグループを作成します。
Agent Transform Group SOPを、エージェント定義のAgent SOPの後、Crowd Source SOPの前の任意の場所に配置します。
-
Agent Transform Group SOPで、 Transform Groups マルチパラメータを使用して新しいジョイントグループを作成します。各グループで:
-
Name をジョイントグループの名前(
upper_body
など)に設定します。 -
Root Transforms で、グループのルートジョイントを選択します。各ルートジョイントとその子ジョイントがグループに追加されます。
-
ジョイントがグループの一部であることを確認したい場合は、 Show Guide Geometry をオンにすると、選択したジョイントの周囲に球が表示されます。エージェントを Wireframe として表示すると、ガイドジオメトリをよりはっきりと確認できます。
-
-
Crowd MotionPath Layer SOPで、 Transform Group をレイヤ化したクリップを再生するジョイントグループに設定します。
-
Clip Name をレイヤ化したクリップに設定します。
以下の例では、エージェントの上半身はフレーム100からレイヤ化されたゾンビクリップを再生し、下半身は元のwalkingクリップを再生します。Crowd MotionPath Layer SOPで、以下のパラメータを設定します:
-
Trigger Group をCrowd MotionPath Trigger SOPの名前、
crowdmotionpathtrigger1
に設定します。Crowd MotionPath Trigger SOPは、フレーム100でトランジションをトリガーします。 -
Transform Group を
upper_body
に設定します。 -
Clip Name を
walk_zombie
に設定します。
このサンプルでは、Crowd MotionPath Layer SOPを使用してエージェントの上半身にクリップをレイヤ化する方法を説明しています。このクリップは、エージェントが境界オブジェクト内に入った時にアクティブになります。
To... | Do this |
---|---|
複数のトリガーに基づいて新しいアニメーションクリップに切り替える |
Combine Triggers セクションで、ブール論理を使用して様々な組み合わせのトリガーを指定します。 |
異なるアニメーションクリップに遷移させる |
アニメーションクリップのライブラリがある場合、異なるクリップをいくつか指定することで、トランジション(遷移)先の次のクリップとしてランダムに選択できます。
|
元のクリップがレイヤ化されたクリップにブレンドする早さを変更する |
Blend In Frames と Blend Out Frames を調整します。 |
レイヤ化されたモーションクリップと元のアニメーションを部分的にブレンドする |
Blend Ratio を調整します。 Blend Ratio が |
レイヤ化されたクリップを数秒だけ再生するように設定する |
Number of Loops パラメータを調整します。 Number of Loops を |
その他の操作 ¶
アニメーションのモーションを高速化、低速化、クロップ、シフトします。