磁力の働きのように、群集シミュレーションでアクター(パーティクル)を引き寄せる 1 つまたは複数のゴールを作成できます。ゴールとは、CrowdFX が理解する特定の ICE データを含んだヌル オブジェクトです。下で説明する[ゴールの追加](Add Goal)コマンドを使用して、これらのオブジェクトを作成する必要があります。他のオブジェクトをゴールとして使用することはできません。ただし、ゴールをプロキシ オブジェクトとして使用して、シーン内で使用するオブジェクトの実際のジオメトリを表すことができます。
アクターはシミュレーション全体で、他のアクターや壁など途中に何があっても、常にゴールに到達しようとします。ゴールが動けば、アクターはそのゴールを目指し続けます。アクターはゴールに到達すると、その速度を下げて、ゴールの周りをゆっくりと動き続けます。
下のイメージでは、アクターは最も近いゴールに向かって移動します。壁の終了ポイントは、アクターが向かう「テンポラリ ゴール」であり、これらのポイントを通過した後、実際のゴールに向かって移動し続けます。
アクターをゴールに向かって移動させる基本的な方法は次の 3 とおりあります。
また、複数のゴールをまとめたグループを作成することもでき、同じ群集シミュレーション内で独立したアクターのグループを複数動かすときに役立ちます。下記の「ゴールのグループを作成する」を参照してください。
ゴール オブジェクトを作成し、現在の群集シミュレーションに追加するには:
使用する群集モデルが現在の群集であることを確認します。「現在の群集を設定し選択する」を参照してください。
ICE ツールバーから、[CrowdFX] [群集](Crowd) [ゴールの追加](Add Goal)コマンドを選択します。
そのプロパティを設定できる[CrowdFX ゴール](CrowdFX Goal)プロパティ エディタが表示されます。
各ゴール オブジェクトには、作成された順番で、0 から始まる[インデックス](Index)値が割り当てられています。インデックス値は複数のゴール シーケンスで使用されます。
既定では、アクターは順番にゴールからゴールに移動します。下記の「複数のゴールを順番に移動する」を参照してください。
作成するゴール オブジェクトは、[Goals_Root]ノードと[群集](Crowd)モデルの[ゴール](Goal)グループに追加されます。「群集シミュレーションの構造」を参照してください。
ゴール オブジェクトを複製した場合、そのコピーは[Goals_Root]ノードと[ゴール](Goal)グループの下に自動的に追加されます。このコピーはその後、好きなように配置でき、[CrowdFX ゴール](CrowdFX Goal)プロパティ エディタでその[インデックス](Index)値を一意の番号に変更できます。
ゴールのサイズは、各ゴール オブジェクトの[CrowdFX ゴール](CrowdFX Goal)プロパティ エディタの[最小距離](Min Distance)値で設定されます。これは、アクターがそのゴールに到達したと見なされるために入っている必要のある半径(SI 単位)です。
使用している[ゴール](Goal)コンパウンドのタイプに応じて、この値は異なる効果をもたらします。
[ゴール シーケンサ](Goal Sequencer)コンパウンドの場合、アクターは現在のゴールに到達するまで、順番が次のゴールに進みません。
半径が大きくなると、アクターはそれだけ簡単にゴールに到達でき、順番が次のゴールに進めます。この値が小さいと、それぞれのアクターがゴールに向かい続けるため、ゴールの周りが混雑し、他のゴールへの進行が遅くなります。
[ゴール シーケンサ](Goal Sequencer)コンパウンドで、[最小距離](Min Distance)値を設定した後、[最小距離モード](Min Distance Mode)として[最小距離入力から](From Min Distance Input)を選択して、各ゴール オブジェクトの[CrowdFX ゴール](CrowdFX Goal)プロパティ エディタで設定された[最小距離](Min Distance)値をオーバーライドすることもできます。これは、一度にすべてのゴール オブジェクトのサイズを設定する簡単な方法です。ここでは最小距離値をランダマイズすることもできます。
歩行者群集シミュレーションを作成し、ゴール オブジェクトを作成した場合、既定で、アクターがゴールを順番に移動するという動作になります。これは、[ゴール シーケンサ](Goal Sequencer)コンパウンドが、シミュレーション ポイント クラウドの[パーティクル シミュレーション](Particle Simulation) ICE ツリーで、[衝突回避のシミュレーション](Simulate Collision Avoidance)コンパウンドの[ゴールの実行](Execute Goal)ポートにプラグインされるからです。
ゴール シーケンスの順番は、作成時に自動的に割り当てられる、ゴールの[インデックス](Index)値に基づきます。アクターは最初にインデックス値が最も低いゴールに移動し、続いてインデックス値が次に高いゴールという順に移動していきます。それぞれのアクターは、次のゴールに進む前に、順番に各ゴールに到達する(その半径内に入る)必要があります。
各ゴールのインデックス値を設定することによって、アクターがゴールからゴールへ移動する順番を制御できます。既定では、最初に作成したゴール オブジェクトに 0 のインデックス値が与えられ、次に作成したゴール オブジェクトには 1 のインデックス値、というように与えられます。 同じ[グループ インデックス](Group Index)値の中では、それぞれのゴールに一意のインデックス値を与える必要があります(下のセクションを参照)。たとえば、グループ 1 とグループ 0 はどちらも、0 のインデックス値のゴール オブジェクトを含むことができます。
複数のゴールがある場合、ゴールのグループを作成して、あるグループのアクターはあるグループのゴール間を移動し、別のグループのアクターは別のグループのゴール間を移動するように設定できます。
各ゴール オブジェクトは、[グループ インデックス](Group Index)値の定義に従って別々のグループに所属します。既定では、これは 0 に定義されますが、ゴール オブジェクトごとに変更できます。
[CrowdFX ゴール](CrowdFX Goal)プロパティ エディタで、同じグループに所属させるゴール オブジェクトにそれぞれに同じ[グループ インデックス](Group Index)値を設定します。そのグループ内で、それぞれの[インデックス](Index)値が一意になっていることを確認してください。
0 以外の値を設定した場合、別のグループに所属していることを識別しやすくするために、ゴール オブジェクトの色は既定の赤色から別の色に変わります。
[衝突回避の初期化](Initialize Collision Avoidance)コンパウンド(シミュレーション ポイント クラウドの[放出](Emit) ICE ツリー内)で、使用するグループのインデックス値に、[ゴール グループ インデックス](Goal Group Index)を設定します。
この結果、シミュレーション内のすべてのパーティクルは、そのグループのゴールだけを考慮するようになるので、パーティクルごとに基づいた動作を変更するように、何らかの条件を ICE ツリーで設定する必要があります。
たとえば、アクターをそのエミッタに基づいてグループに分ける場合、まず、それぞれのエミッタに一意の ID を与える必要があります([エミッタ データの設定](Set Emitter Data)コンパウンド内)。次に、[群集エミッタ ID の取得](Get Crowd Emitter ID)ノードを[ゴール グループ インデックス](Goal Group Index)ポートにプラグインします。
この結果アクターは、[グループ インデックス](Group Index)値がエミッタの ID に一致するグループのゴール間を移動するようになります。アクターは、それぞれのグループ内では、通常どおりゴールのインデックス値の順序に従います。
[最近接ゴール](Closest Goal)コンパウンドを使用して、群集のアクターを最も近いゴールに向けて移動させることができます。この場合、ゴールのインデックス値は使用しません。各ゴールの位置は、アクターの位置を基準に相対的に比較され、アクターは最も近いゴール オブジェクトに移動します。
アクターを最も近いゴール オブジェクトに向かって移動させるには:
ICE ツールバーから[CrowdFX] [群集](Crowd) [ゴールの追加](Add Goal)コマンドを使用して 1 つまたは複数のゴール オブジェクトを作成します。
シミュレーション ポイント クラウドの[パーティクル シミュレーション](Particle Simulation)ICE ツリーで、[衝突回避のシミュレーション](Simulate Collision Avoidance)コンパウンドの[ゴールの実行](Execute Goal)ポートから[ゴール シーケンス](Goal Sequencer)コンパウンドを削除します。
[最近接ゴール](Closest Goal)コンパウンドを取得し、それを[ゴールの実行](Execute Goal)ポートにプラグインします。
アクターはゴールの半径([最小距離](Min Distance))内のランダムなポイントに移動して、すべてのアクターが同じポイントに集まらないようにします。