リアル ワールドでは、異なる群集は多様な動作を示し、同じ群集の中でも、さまざまな行為が見られます。character studio の群集システムには各種の動作が一式含まれており、群集の活動範囲をシミュレートできます。
動作を使用して、代理オブジェクトに動作タイプを割り当てることができます。この動作タイプは、代理オブジェクトにリンクされたオブジェクトにも適用されます。各群集オブジェクトに、任意の数の動作を関係付けて、代理オブジェクトや代理オブジェクトのチームを各動作にリンクすることができます。ある群集オブジェクトに割り当てられた特定の動作は、その群集だけに属し、他の群集に割り当てることはできません。
使用可能な動作は以下のとおりです。
- 回避動作: 代理オブジェクトがシーン内のオブジェクトや他の代理オブジェクトと衝突するのを防ぎます。回避では、回転、抑制や停止、反発の任意の組み合わせや、またベクトル フィールドも使用できます。
- 方向動作: 代理オブジェクトに固定方向や方向範囲を適用して、オブジェクトの進行方向ではなく、特定の方向を向くようにできます。方向は絶対項でも、また代理オブジェクトが今向いている方向に相対的に指定することもできます。
- パス追跡動作: スプラインや NURBS のカーブに沿って動きを制限します。オプションで前後の移動を指定することもできます。
- 反発動作: 代理オブジェクトを強制的にターゲットから離します。
- スクリプト定義動作: MAXScript を使用して動作を指定します。
- 探査動作: 代理オブジェクトをターゲットの方向に引き寄せます。
- スペース ワープ動作: ダイナミック志向のスペース ワープを使用して、風、重力などの動きを制御します。character studio には群集固有のスペース ワープであるベクトル フィールドがあり、代理オブジェクトを複雑な形のオブジェクトの輪郭に沿って回避させることができます。
- スピード変化動作: 代理オブジェクトはよりリアルな動きになるよう速度を変えることができます。
- サーフェス到着動作: 代理オブジェクトは、カスタムな速度と加速パラメータで、サーフェスに向かって移動し、着地します。
- サーフェス追跡動作: 代理オブジェクトは、アニメート可能なサーフェスに沿って移動します。また、代理オブジェクトは直進するか、凹凸に沿って移動することができます。
- 壁反発動作: グリッドを使用して代理オブジェクトを反発します。囲まれた、まっすぐな壁の部屋にオブジェクトを配置するのに適しています。
- 壁探査動作: グリッドを使用し、代理オブジェクトを引きつけます。この動作を、群集で制御された Biped のキャラクタが出口へ歩いていく場合に使用できます。
- さまよい動作: ショッピング モールで買い物をする人のように、キャラクタにややランダムな動きを付けます。
ヒント: 独自の動作が必要な場合は、スクリプトを記述して作成できます。
動作を初めてシーンに追加するときは、その動作の新しいロールアウトが[設定](Setup)ロールアウトの下に表示されます。その新しいロールアウトで動作の設定を変更することができます。探査や回避など特定の動作では、ターゲット オブジェクトを指定できます。
ヒント: 既定値では、動作には属名が割り当てられます。動作名は、「Seek Ball」や「Avoid Fire」などの判別しやすい名前に変更することをお勧めします。
シーンの別の動作のロールアウトを表示するには、必要な動作を[動作](Behaviors)領域のドロップダウン リストから選択します。動作タイプのロールアウトで利用可能なコントロールを表示するには、上記のリストのエントリからリンクに従います。
動作ロールアウトで利用可能なコントロールの他に、[動作の割り当てとチーム](Behavior Assignments and Teams)ダイアログ ボックスを利用して、[アクティブ化](Active)チェック ボックスで動作をオンかオフに切り替えることができます。回避、方向、サーフェス追跡以外のすべての動作には、重みを設定してアニメートできます。 アクティブなステータスは、すべての動作に対しアニメート可能です。
動作を使用する
動作を使用するには、[動作の割り当てとチーム](Behavior Assignments and Teams)ダイアログ ボックスを使用して、動作を代理オブジェクトか代理オブジェクトのチームに適用します。このダイアログ ボックスでは、代理オブジェクトに割り当てられた各動作には重みが与えられています。これらの重みを変更したりアニメートして、シミュレーションに影響させることができます。
動作の割り当て重みはシミュレーションに大きく影響します。1 つの代理オブジェクトに 2 つ以上の動作を割り当てる場合、重みでは動作間の関係が定義され、一方を他方に比べより強い力または弱い力にします。動作の割り当て重みを視覚化する 1 つの方法は、群集のシミュレーションの間にある動作のフォースのベクトルを調べることです。ベクトルの長さは、代理オブジェクトにかかる動作の重みを表しています。
各動作は[動作](Behavior)ロールアウトで表示される固有のパラメータを持っており、群集オブジェクトの[修正](Modify)パネルから使用できます。これらのパラメータは動作がどう機能するかを表現し、また動作の強度に関係することもあります。たとえば、探査動作、反発動作、壁探査動作、壁反発動作には、すべて影響値の特定のボリュームがあります。これらのボリュームの外側では、影響はまったくなく本質的に重みはゼロです。このロールアウトでは、群集シミュレーションの間に、動作のフォースのベクトルをダイナミックに表示するかどうかを指定でき、またベクトルの色を指定できます。
群集システムを操作するときは、動作割り当て重みと、各動作のパラメータを再生することが重要です。通常は、シミュレーションを繰り返し実行して、希望する結果が得られるまで重みとパラメータを変更します。
重みが付けられない動作がいくつかあります。それらは、「回避」、「サーフェス追跡」、「方向」です。回避とサーフェス追跡は、他のすべての動作が代理オブジェクトに適用された後に始まります。それらは代理オブジェクトに影響を与えるために、他の動作を圧倒して自らのコンストレイントを満たすというような激しい手段を取ることがあります。方向は単に代理オブジェクトが向いている方向を設定します。重みは付けられず、フォースを適用しません。
動作のヒント
character studio の動作について、便利な機能を以下に示します。
- 群集の[認識機能コントローラ](Cognitive Controllers)機能で、条件付きの動作システムを作成できます。これは MAXScript スクリプト言語で、任意の動作から他の動作への遷移をいつ有効にするかを判断するために使用します。認識機能コントローラ エディタおよび[トランジション](Transition)ダイアログ ボックスには学習用に複数のサンプル スクリプトが用意されており、ご使用のシミュレーションに適用できます。
- [動作](Behavior)ロールアウトは、[修正](Modify)パネルの[群集](Crowd)オブジェクト
[設定](Setup)ロールアウトのすぐ後に表示されます。ただし、これは群集のオブジェクトに少なくとも 1 つの動作を追加しないと現れません。
- [群集](Crowd)パネルは一度に 1 つの[動作](Behavior)ロールアウトしか表示しません。別の動作にアクセスするには、群集オブジェクトの[設定](Setup)ロールアウトの一番下の一覧から名前を選択します。
- 3ds Max のほとんどのシーン要素と同様に、動作には「Seek Doorway」や「Follow Hilly Surface」などの固有の名前を付けることをお勧めします。名前を変更するときは、[セットアップ](Setup)ロールアウトで動作の名前をクリックし、新しい名前をキーボードから入力します。
- 既定値の動作設定が必ずしも理想的な結果をもたらすとは限りません。最適な設定はお使いのシミュレーション設定によって異なります。多くの場合、希望の結果を得るためには設定の変更が必要です。場合によっては、設定をアニメート化することも必要です。
代理オブジェクトの特に便利な機能は、色の付いたベクトルを通して、群集のシミュレーションの計算中に代理オブジェクトに作用するさまざまなフォースの強度と方向を表示できることです。それぞれのフォースには、異なる色を付けることができます。たとえば、探査動作には既定値で緑を使用し、さまよい動作には明るい緑味青を使用します。これらの色は好みに合わせて変更できます。
シミュレーションが期待どおりに進まない場合は、計算中にベクトルを観察してデバッグできます。計算が速すぎる場合は、[フレーム毎に計算](Step Solve)機能を使用して、一度に 1 つのフレームを計算するようにすることができます。
手順
例: 動作を代理オブジェクトに割り当てるには:
この例では、代理オブジェクトと動作を使用して基本的な群集シミュレーションを作成する方法を示します。
- 3ds Max を起動するか、または 3ds Max をリセットします。
- 1 つの群集オブジェクトと 1 つ以上の代理オブジェクトを、シーンに追加します。通常は、代理オブジェクトが前方を向くように、代理オブジェクトをトップ ビューポートに追加します。群集オブジェクトの位置は重要ではありません。
- 群集オブジェクトを
選択し、
[修正](Modify)パネルに移動します。
- [セットアップ](Setup)ロールアウト
[動作](Behaviors)領域で、[新規作成](New)ボタンをクリックします。
- [動作タイプを選択](Select Behavior Type)ダイアログ ボックスで、動作を選択して[OK]をクリックし、ダイアログ ボックスを閉じます。
選択した動作に対するロールアウトが表示されます。
- 探査などのように動作にターゲット オブジェクトが必要な場合は、[なし](None)ボタンをクリックしてオブジェクトを選択するか、[複数選択](Multiple Selection)をクリックして複数のオブジェクトを選択します。
- 必要に応じて、他の動作設定を変更します。
- 必要に応じて、追加の動作を作成および変更します。
- [セットアップ](Setup)ロールアウトの[動作の割り当て](Behavior Assignment)をクリックします。
- [割り当てのデザイン](Assignment Design)領域の上の 2 つのリストには、左側のリストに代理オブジェクトが 1 つ、右側のリストに動作が 1 つ含まれているはずです。両方の項目を選択します。
- [割り当てのデザイン](Assignment Design)領域の右側にある[新規の割り当て](New Assignment)ボタンをクリックします。これは、右向きの矢印が 5 つある縦型のボタンです。
これにより、[動作の割り当て](Behavior Assignments)領域のリストに新しい割り当てが追加されます。
- 適用した変更に問題がない場合には、[OK]ボタンをクリックして、[動作の割り当てとチーム](Behavior Assignments and Teams)ダイアログ ボックスを閉じます。
[修正](Modify)パネルで、[計算](Solve)ロールアウトまでスクロールし、[計算](Solve)ボタンをクリックします。 代理オブジェクトが球を向くように回転し、回転しながら傾き、その後球に向かってまっすぐに移動するように、キーが作成されます。代理オブジェクトがターゲットに到着すると、球を少し越えるまで移動し、回転して移動するモーションをシミュレーションの終わりまで繰り返します。これを防ぐには、開始時の 2 つのオブジェクトの距離を大きくするか、球の位置をアニメートします。