群集の重要な動作の 1 つに、障害物の回避があります。群集のメンバの進行を妨げるものすべてを、障害物とみなします。障害物の例として、壁、電柱、塀、また群集の他のメンバなどが挙げられます。これらの障害物に遭遇すると、速度の低下、回転、停止の任意の組み合わせによって回避動作が起こります。
character studio では、回避を実行するいくつかの方法があります。
- 回避動作は、頻繁に使用される動作の 1 つです。この動作を使用すると、群集のメンバはシーン内の他の群集メンバまたは球形オブジェクトを回避します。それは避けられるオブジェクトの回りに球形の回避領域を作成して機能しますが、不規則なオブジェクトには適用されません。
回避動作は、群集の他の動作とは異なります。他のすべての動作によるフォースが代理オブジェクトに作用した後、障害物を避けるための回避動作によって代理オブジェクトを回転、減速、または停止させます。
- 壁反発動作を使用すると、群集のメンバが壁や塀などの広くて平らなオブジェクトを回避します。反発の効果に最大の距離を設定して、代理オブジェクトが壁に近づくにつれ、壁から離れるフォースが増加する速度を表現できます。
代理オブジェクトを停止したり速度を落としたりする回避動作と異なり、壁反発動作では単に代理オブジェクトにフォースを加え壁からはね返します。壁を回避する保証はありません。強度を制御するために、距離とフォールオフのパラメータ、また重みを[割り当てとチーム](Assignments and Teams)ダイアログ ボックスで操作する必要があります。
- 反発動作を使用すると、群集のメンバがオブジェクトを避けます。平らではなく球形の領域を使用する以外は、壁反発とまったく同じように作用します。反発の効果に最大の距離を設定して、代理オブジェクトが障害物に近づくにつれ、反発するフォースが増加する速度を表現できます。
反発では、代理オブジェクトにフォースを加えて、障害物からはね返します。回避する保証はありません。強度を制御するために、距離とフォールオフのパラメータ、また重みを[動作の割り当てとチーム](Behavior Assignments and Teams)ダイアログ ボックスで操作する必要があります。反発は、魚や鳥のような非陸上の生物の単純な回避技法として、回避動作の代わりに使用できます。
- ベクトル フィールドを使用することもできます。ベクトル フィールドはスペース ワープの特別なタイプで、群集のメンバが、湾曲し窪んだ表面のような不規則なオブジェクトの周りを移動するのに使用します。ベクトル フィールド スペース ワープを回避動作とともに使用すれば、代理オブジェクトが複雑なオブジェクトに接近するにつれ速度を落とし、迂回したりすることができます。これによって、代理オブジェクトが障害物のサーフェスを通り抜けないことが保証されます。
ベクトル フィールド スペース ワープは、スペース ワープ動作と一緒に使用することもできます。これは単に、オブジェクトの輪郭に似た代理オブジェクトにフォースを作用させるだけであり、代理オブジェクトが障害物の表面を貫通しないという保証はありません。ベクトル フィールドを[スペース ワープ](Space Warp)や[回避](Avoid)動作とともに使用して、効果を組み合わせることができます。
手順
回避動作を使用するには:
- 群集オブジェクトに回避動作を追加します。
- [回避動作](Avoid Behavior)ロールアウトで、[なし](None)ボタンまたは
([複数選択](Multiple Selection))を使用してターゲット オブジェクトまたは回避するオブジェクトを指定します。 ヒント: チーム内のすべての代理オブジェクトを互いに回避させる場合は、チーム内の代理オブジェクトをすべて選択します。各代理オブジェクトは、自身を除く他のすべての代理オブジェクトを回避します。
- [絶対半径を表示](Display Hard Radius)をオンにして、ビューポート内の放射状の回避領域を確認します。[絶対半径](Hard Radius)を代理オブジェクトに適したサイズに調整します。
- [ブレーキの圧力](Brake Pressure)を調整して、回避するオブジェクトに遭遇したときに代理オブジェクトの速度を低下させるかどうかを決定します。
- [ルックアヘッド](Look Ahead)パラメータを調整して、各代理オブジェクトが他の代理オブジェクトを回避するための最善の方法を、何フレーム前に決定するかを指定します。
- [動作の割り当て](Behavior Assignments)を使用して、代理オブジェクトまたはチームに動作を割り当てます。
壁反発動作を使用するには:
[作成](Create)パネルで
([ヘルパー](Helpers))をクリックしてから、[グリッド](Grid)をクリックします。シーン内でグリッドを作成します。 ヒント: 最良の結果を得るには、動作で使用するグリッドを[ミラー](Mirror)を使用してコピーしないでください。代わりに、Shift+クローンを使用してください。
- グリッドを
移動および
回転しながら配置します。 ヒント: 壁反発動作では、代理オブジェクトがグリッドからローカル Z 軸の方向に反発します。グリッドを選択したまま、ローカル座標系を使用して Z 軸の方向をビューポート内に表示します。Z 軸の矢印が Z 軸の正の方向を指します。Z 軸の方向を確認しておけば、動作を効率的に設定できます。
- 群集オブジェクトを
選択して、壁反発動作を追加します。
- [壁反発動作](Wall Repel Behavior)ロールアウトで[なし](None)をクリックして、グリッドを選択します。
- [正方向の軸](Positive Axis)を選択すると、代理オブジェクトがグリッドの Z 軸側から反発します。[負方向の軸](Negative Axis)を選択すると、グリッドの反対側から反発します。[両方](Both)を選択すると、両側から反発します。
- 代理オブジェクトが(シーン内の任意の位置ではなく)グリッドの前の指定された領域に存在する場合にのみ、代理オブジェクトをグリッドに引きつける場合は、[距離を使用](Use Distance)をオンにします。[内側の距離](Inner Distance)および[外側の距離](Outer Distance)パラメータを使用して、代理オブジェクトをグリッドに引きつける領域を設定します。[距離を表示](Display Distance)をオンにして、ビューポート内で距離を確認します。
- [動作の割り当て](Behavior Assignments)を使用して、代理オブジェクトまたはチームに動作を割り当てます。
反発動作を使用するには:
- 群集オブジェクトに反発動作を追加します。
- [反発動作](Repel Behavior)ロールアウトで、[なし](None)ボタンを使用するか、または
([複数選択](Multiple Selection))を使用して、代理オブジェクトに反発する 1 つまたは複数のオブジェクトを指定します。
- 既定値の設定を必要に応じて変更します。
- [動作の割り当て](Behavior Assignments)を使用して、代理オブジェクトまたはチームに動作を割り当てます。
ベクトル フィールド スペースワープを追加するには:
ベクトル フィールド スペース ワープ オブジェクトの追加方法は、ボックス ジオメトリ プリミティブを追加する方法と同様です。
- [オブジェクト タイプ](Object Type)ロールアウトで、[ベクトル フィールド](Vector Field)をクリックします。
- ビューポート内をドラッグして初期次元を設定します。
- [立方体](Cube)作成方法を使用している場合、これによって 3 次元がすべて同時に設定されます。
- [ボックス](Box)作成方法を使用している場合、マウス ボタンを放し、その後マウスを垂直に移動して高さを設定します。
- クリックしてスペース ワープを作成します。
代理オブジェクトを使用してベクトル フィールド スペース ワープを使用するには:
この手順は、群集シミュレーションで代理オブジェクトを使用して、ベクトル フィールド スペース ワープを使用するために一般的な指針となるものです。
- 障害物用にオブジェクトを作成します。このオブジェクトは編集可能メッシュ、またはジオメトリック プリミティブである必要があります。モディファイヤがあってもかまいません。
- ベクトル フィールド スペース ワープを追加します。
- スペース ワープ ラティスの位置とスケールを変更し、障害物オブジェクトを囲むようにします。
このラティスはオブジェクトよりも著しく大きくなければなりません。オブジェクトは、ほぼラティス中心に置きます。
- [ラティス パラメータ](Lattice Parameters)ロールアウトで、[長さセグメント](Length Segs)/[幅セグメント](Width Segs)/[高さセグメント](Height Segs)の設定値を大きくし、ラティス セグメントがオブジェクトを適切な間隔で分割するようにします。
使用している障害物オブジェクトに対するセグメントの適切な設定を判別するには、まずオブジェクトの複雑さを調べます。障害物に多くの詳細があり、その詳細をベクトル フィールドに反映させたい場合には、比較的高解像度のラティスが必要です。
- [障害パラメータ](Obstacle Parameters)ロールアウト
[ベクトルを計算](Compute Vectors)領域
[ベクトル フィールド オブジェクト](Vector Field Object)ボタン(ラベルの初期値は[なし](None))をクリックしてから、群集シミュレーションで障害物となるオブジェクトをクリックします。 これによって、障害物オブジェクトの仕様を決めます。オブジェクトのサーフェス上に範囲ボリューム グリッドがオリーブ色のワイヤフレームとして表示されます。
- [障害パラメータ](Obstacle Parameters)ロールアウト
[ベクトルの計算](Compute Vectors)領域
[範囲](Range)の設定値を大きくします。 この設定値を大きくすると、範囲ボリューム グリッドが拡大するのが確認できます。範囲ボリュームには、群集のメンバがオブジェクトを避けて迂回するために必要な空間も含まれている必要があります。
- [表示](Display)領域
[ラティスを表示](Show Lattice)および[範囲を表示](Show Range)をオフにして、ベクトル フィールドが生成されたときに表示されやすいようにしておきます。
- [表示](Display)領域
[ベクトル フィールドを表示](Show Vector Field)をオンにします。
- [ベクトルを計算](Compute Vectors)領域で[計算](Compute)ボタンをクリックします。これにより、ベクトル フィールドが生成されます。
ヒント: ベクトルのラインを見やすくするには、[表示](Display)領域

[ベクトル スケール](VectorScale)の設定値を大きくします。
ベクトルは障害物オブジェクトを囲む青いラインとして表示されます。範囲ボリューム グリッド内のそれぞれのラティス交差部ごとに 1 つのベクトルが計算されます。それぞれのベクトルは、オブジェクトの、ラティス ポイントに最も近いサーフェス上のポイントでの、法線と一致しています。
ベクトル フォースはオブジェクトからの距離と共に減衰し、その様子はグリッドの周辺に向って徐々に短くなるベクトルのラインに見てとることができます。
- 群集および代理ヘルパー オブジェクトを追加します。
- 群集オブジェクトを選択し、[修正](Modify)パネルを開きます。
- [セットアップ](Setup)ロールアウト
[動作](Behaviors)領域で、[新規作成](New)をクリックします。
- 表示される[動作タイプを選択](Select Behavior Type)ダイアログ ボックスで[スペース ワープ動作](Space Warp Behavior)を選択し、[OK]をクリックします。
- 表示される[スペース ワープ動作](Space Warp Behavior)ロールアウトでボタン(ラベルの初期値は[なし](None))をクリックしてから、ビューポートで[ベクトル フィールド スペース ワープ](Vector Field space warp)をクリックします。
ヒント: スペース ワープを選択するときは、[名前による選択](Select By Name)を使用する方が簡単な場合があります。
- [セットアップ](Setup)ロールアウトで[動作の割り当て](Behavior Assignments)ボタンをクリックし、[動作の割り当てとチーム](Behavior Assignments And Teams)ダイアログ ボックスを使用して 1 つ、または複数の代理オブジェクトにスペース ワープ動作を割り当てます。
- このシミュレーションに適切な任意の他のオブジェクトまたは動作を追加します。
- 群集オブジェクトを
選択し、[計算](Solve)ロールアウト
[計算](Solve)ボタンをクリックしてシミュレーションを計算します。
- [ラティス パラメータ](Lattice parameters)と[障害パラメータ](Obstacle parameters)を調整して、ベクトル フィールド スペース ワープに関連する動作を詳細に調整します。
- ベクトル フィールドの計算、および調整後のシミュレーションの計算を続行します。ベクトル フィールドのパラメータをアニメートして、オブジェクトをフィールド内に保持する必要がある場合もあります。