障害物(壁)との衝突を回避する

 
 
 

群集シミュレーションでの障害物は、壁と呼ばれ、CrowdFX が理解する特定の ICE データを格納するポリゴン メッシュ オブジェクトです。

壁を描画するには、下記の [壁の描画](Draw Wall)コマンドを使用する必要があり、他のオブジェクトを壁として使用することはできません。ただし、壁をプロキシ オブジェクトとして使用し、シーンで使用したい障害物オブジェクトの実際のジオメトリを表すことができます。複数の壁をグループ化して、実際の障害物のジオメトリの一般的なシェイプを表すことができます。

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

壁を作成し、それを現在の群集シミュレーションに追加するには:

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

  2. ICE ツールバーから[CrowdFX] [群集](Crowd) [作成](Create) [壁の描画](Draw Wall)コマンドを選択します。

  3. ビューポート内の目的の場所に壁を描画します。壁はデフォルトで XZ 平面上に留まります。

    壁の高さをインタラクティブに変更するには、[Shift]キーを押しながら、壁を描画します。

  4. 表示される[Set Wall Data(壁データを設定する)]プロパティ エディタでパラメータを設定します。これは、壁オブジェクトに対して作成される ICE ツリー内の[壁データの設定](Set Wall Data)コンパウンドです。

  5. 描画する壁ごとにこの処理を繰り返します。

  6. 壁は標準のポリゴン オブジェクトであるため、各壁を移動および回転し、好きなように、その変形をアニメートできます。壁のサイズを変更するには、下記の次のセクションを参照してください。

起伏のある地形がある場合、壁を Y 方向に下げて、壁と地形の間にスペースがなくなるようにする必要がある場合があります。

作成した壁オブジェクトは、Walls_Root ノードの下に追加され、群集モデルの壁グループで参照されます。「群集シミュレーションの構造」を参照してください。

壁オブジェクトを複製すると、そのコピーは Walls_Root ノードの下に自動的に追加され、壁グループで参照されます。その後、壁オブジェクトは好きなように配置し、[壁データの設定](Set Wall Data)プロパティ エディタで、そのプロパティを編集できます。

壁グループ内のすべての壁の表示を切り替えるには、ICE ツールバーから[CrowdFX] [群集](Crowd) [編集](Edit) [壁の表示/非表示](Show/Hide Walls)コマンドを選択します。壁グループを選択し、[H]キーを押すこともできます。

注:各壁オブジェクトは、[壁データの設定](Set Wall Data)コンパウンドに定義される -1 の値の ID 値を持ちます。群集シミュレーションで、特定のエフェクトや動作に対し、各壁を識別したい場合に、この ID を変更できます。

壁のサイズを変更する

Set Wall Data(壁データを設定する)コンパウンドの 3 つの[次元](Dimensions)パラメータで壁のサイズをコントロールできます。終了ポイントは、X 軸または Z 軸に沿って、最も長い壁の終端に配置されます。

標準のスケール変形ツールを使用して、壁のサイズを変更しても、[次元](Dimensions)値は変更されません。その結果、終了ポイントの位置が壁の新しいサイズを反映して更新されないため、衝突回避が不正確になります。

アクターが壁を検出する方法

アクターは簡単な衝突検出処理を使用して、壁への衝突を回避します。アクターのニーまたはすね領域の場所から「視覚」光線が放出され、キャラクタの高さが判断されます。視覚光線の範囲は、Initialize Collision Avoidance(衝突回避の初期化)コンパウンドの[壁インタラクション制限](Wall Interaction Limit)距離値によって決定されます。壁がこの制限内の場合、アクターは壁の衝突の可能性を考慮し、壁の最も近い終了ポイント(左、右、または両側)に向かいます。

通常、アクターが終了ポイントに向かって移動する十分な時間を持てるように、[壁インタラクション制限](Wall Interaction Limit)値をかなり大きく設定する必要があります。たとえば、壁がはるか先に見えた場合、壁際に行くまで待たずに、向きを変えて回避します。

壁(または他のアクター)に近付きすぎることを避けるために、アクターの周囲に「厚さ」を加えることもできます。「アクター周囲のバッファの作成」を参照してください。

ゴールを定義している(「ゴールに向かって移動する」を参照)場合、アクターは最終的にそのゴールまで進もうとします。邪魔になる壁の終了ポイントは「一時的な」ゴールになります。壁を通り過ぎると、実際のゴールに進み続けます。

アクターの視覚光線の高さを変更する

低い壁でも検出できるように、視覚光線はデフォルトでボディの低めに設定されていますが、必要な高さに設定できます。たとえば、壁が地面の上に持ち上げられている場合、高いオブジェクトを検出できるように、視覚光線を高くすることができます。

これを行うには、編集のためにInitialize Collision Avoidance(衝突回避の初期化)コンパウンドを開きます。次に、アクターのサイズを拡大するために使用するスカラ値を変更します。たとえば、視覚光線を腰のあたりの高さにしたい場合、0.5 の値(アクターの高さの半分)を使用します。

壁の終了ポイントを設定する

終了ポイントは、アクターが壁を避けるために到達させる場所(壁の左側、右側、または両側)を定義します。終了ポイントは最長の壁の片側から付き出す緑色の直線で表示されます。各壁には少なくとも 1 つの終了ポイントが必要です。

壁の終了ポイントは、Set Wall Data(壁データを設定する)コンパウンドで定義できます。

終了ポイントとしてヌルを使用する

ヌルを作成して、それらを終了ポイントとして壁にリンクできます。これにより、終了ポイントが 1 つだけしかない部屋など、カスタムの壁設定を作成できます。カスタム終了ポイントを作成したい任意の位置に、ヌルを移動できます。ヌルのサイズとシェイプは、衝突検出に影響しません。アクターは単にヌルの中心に向かって進むだけです。

ヌルを終了ポイントとして使用するには

  1. ヌルを作成し、それらを使用する壁の周囲に配置します。

  2. 壁のSet Wall Data(壁データを設定する)コンパウンドで、次のいずれかの操作を行います。

    • [終了左/右ヌル](Exit Left/Right Null)の傍の[Explorer]ボタンをクリックします。

      左側と右側は、壁に関するアクターの方向によって決まります。つまり、[終了左ヌル](Exit Left Null)がアクターの左側であるので、ヌルを選択します。

    • [ピック](Pick)ボタンをクリックして、ビューポートで適切なヌルを選択します。右クリックすると、ピックアップモードを終了します。

ヌルが終了ポイントにリンクされ、好きな場所にヌルを配置できます。