ゴールに向かって移動する

 
 
 

磁力の働きのように、群集シミュレーションでアクター(パーティクル)を引き寄せる 1 つまたは複数のゴールを作成できます。ゴールとは、CrowdFX が理解する特定の ICE データを含んだヌル オブジェクトです。下で説明する[ゴールの追加](Add Goal)コマンドを使用して、これらのオブジェクトを作成する必要があります。他のオブジェクトをゴールとして使用することはできません。ただし、ゴールをプロキシ オブジェクトとして使用して、シーン内で使用するオブジェクトの実際のジオメトリを表すことができます。

アクターはシミュレーション全体で、他のアクターや壁など途中に何があっても、常にゴールに到達しようとします。ゴールが動けば、アクターはそのゴールを目指し続けます。アクターはゴールに到達すると、その速度を下げて、ゴールの周りをゆっくりと動き続けます。

下のイメージでは、アクターは最も近いゴールに向かって移動します。壁の終了ポイントは、アクターが向かう「テンポラリ ゴール」であり、これらのポイントを通過した後、実際のゴールに向かって移動し続けます。

アクターをゴールに向かって移動させる基本的な方法は次の 3 とおりあります。

また、複数のゴールをまとめたグループを作成することもでき、同じ群集シミュレーション内で独立したアクターのグループを複数動かすときに役立ちます。下記の「ゴールのグループを作成する」を参照してください。

群集シミュレーションにゴールを追加する

ゴール オブジェクトを作成し、現在の群集シミュレーションに追加するには:

  1. 使用する群集モデルが現在の群集であることを確認します。「現在の群集を設定し選択する」を参照してください。

  2. ICE ツールバーから、[CrowdFX] [群集](Crowd) [ゴールの追加](Add Goal)コマンドを選択します。

    これにより、ゴール オブジェクトとして、カスタマイズされたヌルが作成され、シーンのオリジンに置かれます。

  3. そのプロパティを設定できる[CrowdFX ゴール](CrowdFX Goal)プロパティ エディタが表示されます。

    各ゴール オブジェクトには、作成された順番で、0 から始まる[インデックス](Index)値が割り当てられています。インデックス値は複数のゴール シーケンスで使用されます。

  4. 作成するゴールごとに、[ゴールの追加](Add Goal)コマンドを選択します。

  5. X 軸方向と Z 軸方向では任意の位置にそれぞれのゴールを配置またはアニメートしますが、Y 軸方向の位置は変更しないでください。なぜなら、アクターは次のゴールに進む前に、ゴール半径の範囲内を通過する必要があるからです。

既定では、アクターは順番にゴールからゴールに移動します。下記の「複数のゴールを順番に移動する」を参照してください。

作成するゴール オブジェクトは、[Goals_Root]ノードと[群集](Crowd)モデルの[ゴール](Goal)グループに追加されます。「群集シミュレーションの構造」を参照してください。

ゴール オブジェクトを複製した場合、そのコピーは[Goals_Root]ノードと[ゴール](Goal)グループの下に自動的に追加されます。このコピーはその後、好きなように配置でき、[CrowdFX ゴール](CrowdFX Goal)プロパティ エディタでその[インデックス](Index)値を一意の番号に変更できます。

インデックス値を表示または非表示にする

既定では、各ゴールを簡単に識別できるように、それぞれのインデックス値がその上に表示されています。グループのインデックス値も表示できます。

表示を切り替えるには:

  1. ゴール オブジェクトごとに作成されている[ゴール データの表示](Display Goal Data) ICE ツリーを開きます。
  2. [ゴール データの表示](Display Goal Data)コンパウンドで、[インデックスの表示](Show Index)オプションと[グループ インデックスの表示](Show Group Index)オプションを切り替えます。

ゴールの半径を設定する

ゴールのサイズは、各ゴール オブジェクトの[CrowdFX ゴール](CrowdFX Goal)プロパティ エディタ[最小距離](Min Distance)値で設定されます。これは、アクターがそのゴールに到達したと見なされるために入っている必要のある半径(SI 単位)です。

使用している[ゴール](Goal)コンパウンドのタイプに応じて、この値は異なる効果をもたらします。

複数のゴールを順番に移動する

歩行者群集シミュレーションを作成し、ゴール オブジェクトを作成した場合、既定で、アクターがゴールを順番に移動するという動作になります。これは、[ゴール シーケンサ](Goal Sequencer)コンパウンドが、シミュレーション ポイント クラウドの[パーティクル シミュレーション](Particle Simulation) ICE ツリーで、[衝突回避のシミュレーション](Simulate Collision Avoidance)コンパウンドの[ゴールの実行](Execute Goal)ポートにプラグインされるからです。

ゴール シーケンスの順番は、作成時に自動的に割り当てられる、ゴールの[インデックス](Index)値に基づきます。アクターは最初にインデックス値が最も低いゴールに移動し、続いてインデックス値が次に高いゴールという順に移動していきます。それぞれのアクターは、次のゴールに進む前に、順番に各ゴールに到達する(その半径内に入る)必要があります。

各ゴールのインデックス値を設定することによって、アクターがゴールからゴールへ移動する順番を制御できます。既定では、最初に作成したゴール オブジェクトに 0 のインデックス値が与えられ、次に作成したゴール オブジェクトには 1 のインデックス値、というように与えられます。 同じ[グループ インデックス](Group Index)値の中では、それぞれのゴールに一意のインデックス値を与える必要があります(下のセクションを参照)。たとえば、グループ 1 とグループ 0 はどちらも、0 のインデックス値のゴール オブジェクトを含むことができます。

下のイメージでは、両方のエミッタからのアクターが、ゴール 0 に最初に移動し、残りの 1、2、3 に順番に移動します。

注:次のゴールに進むためにアクターはゴール半径内を通過する必要があるため、ゴール オブジェクトの Y 座標の位置は 0 のままです。

ゴールのグループを作成する

複数のゴールがある場合、ゴールのグループを作成して、あるグループのアクターはあるグループのゴール間を移動し、別のグループのアクターは別のグループのゴール間を移動するように設定できます。

各ゴール オブジェクトは、[グループ インデックス](Group Index)値の定義に従って別々のグループに所属します。既定では、これは 0 に定義されますが、ゴール オブジェクトごとに変更できます。

ゴール グループを設定するには:

  1. 上記の説明に従って、[ゴール シーケンサ](Goal Sequencer)コンパウンドで、複数のゴールを使用した群集シミュレーションを作成します。
  2. [CrowdFX ゴール](CrowdFX Goal)プロパティ エディタで、同じグループに所属させるゴール オブジェクトにそれぞれに同じ[グループ インデックス](Group Index)値を設定します。そのグループ内で、それぞれの[インデックス](Index)値が一意になっていることを確認してください。

    0 以外の値を設定した場合、別のグループに所属していることを識別しやすくするために、ゴール オブジェクトの色は既定の赤色から別の色に変わります。

  3. [衝突回避の初期化](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)コンパウンドを使用して、群集のアクターを最も近いゴールに向けて移動させることができます。この場合、ゴールのインデックス値は使用しません。各ゴールの位置は、アクターの位置を基準に相対的に比較され、アクターは最も近いゴール オブジェクトに移動します。

アクターを最も近いゴール オブジェクトに向かって移動させるには:

  1. ICE ツールバーから[CrowdFX] [群集](Crowd) [ゴールの追加](Add Goal)コマンドを使用して 1 つまたは複数のゴール オブジェクトを作成します。

  2. シミュレーション ポイント クラウドの[パーティクル シミュレーション](Particle Simulation)ICE ツリーで、[衝突回避のシミュレーション](Simulate Collision Avoidance)コンパウンドの[ゴールの実行](Execute Goal)ポートから[ゴール シーケンス](Goal Sequencer)コンパウンドを削除します。

  3. [最近接ゴール](Closest Goal)コンパウンドを取得し、それを[ゴールの実行](Execute Goal)ポートにプラグインします。

  4. 各ゴール オブジェクトの[CrowdFX ゴール](CrowdFX Goal)プロパティ エディタで値を設定します。

アクターはゴールの半径([最小距離](Min Distance))内のランダムなポイントに移動して、すべてのアクターが同じポイントに集まらないようにします。

下のイメージでは、パーティクルが放出されると、その直後に最も近いゴール オブジェクトに向かっています。