認識機能コントローラを使用すると、シミュレーション時の群集のメンバの動作を状況に応じて変更できます。たとえば、ランダムにさまようキャラクタが、ターゲットから一定の距離の範囲内に到達すると、ターゲットに向かってまっすぐに移動します。
技術的には、認識機能コントローラは、いくつかの条件が記述されたスクリプトを使って、群集シミュレーションを制御します。つまり、人工知能を群集シミュレーションに実装することになります。フローチャート形式のエディタ 認識機能コントローラ エディタ([モーション フロー グラフ](Motion Flow Graph)ダイアログ ボックスに似ている)を使用して、動作およびその組み合わせのネットワーク(状態)を設定します。次に、MAXScript ベースのトランジションを適用します。トランジションには、代理オブジェクトの状態が遷移するタイミングが指定されています。設定は比較的簡単ですが、キャラクタが生きていて、意識を持ち、シーンを動き回りながら動作を決定しているようなシミュレーションを作成できます。
認識機能コントローラのトランジションの例については、「[State]ダイアログ ボックス」を参照してください。
認識機能コントローラを設定および使用するには:
この手順では、認識機能コントローラの作成および使用に関する典型的な設定方法を説明します。群集のシミュレーション セットアップの基礎知識があることを前提に説明されています。群集の設定に関する詳細は、群集のヘルパー オブジェクトおよび[セットアップ](Setup)ロールアウトを参照してください。
character studio によりコントローラに既定値の名前「Cognitive Controller」が付きます。「Seek/Wander」のように、認識機能コントローラに対してよりわかりやすい名前を付けることをお勧めします。テキスト ボックスで名前をクリックして、キーボードで編集すると、名前を変更できます。
新しく認識機能コントローラを作成すると、自動的に「状態を作成モード」に配置されます。
次に、それぞれの状態に対し動作を定義します。
複数の動作を選択する場合は、状態エディタでそれぞれの動作に対し、異なる重みを指定できます。たとえば、完全な重みを持つ探査動作と半分の重みを持つさまよい動作を組み合わせて、代理オブジェクトが目標を探しながらさまようようにすることができます。
次に、[トランジションを作成](Create Transition)を使用して、シミュレーション中の状態のシーケンスを定義します。
トランジションの矢印が表示され、「ソース」の状態から「ターゲット」の状態を指します。
それぞれの状態に対して、任意の数のトランジションの前後に状態を持たせることができます。それぞれに対して異なるトランジションの状態を指定すると、必要なだけ複雑な状態ダイアグラムを作成できます。
次に、トランジション ダイアログ ボックスを使用して、各トランジションの条件式を定義します。
通常、状態をテストし、1 (true の場合)または 0 (false の場合)を返す関数を使用します。
たとえば、次のように表示されます。
fn test1 del t = ( if (del.simpos.x <= 40 and del.duration > 50) then 1 else 0 )
簡単に説明すると、上の例では、X 軸上で代理オブジェクトの位置が 40 以下、50 フレーム以上に対して現在の状態にある場合、トランジションが生じます。ただし、いずれかの条件または両方が false の場合、代理オブジェクトは現在の状態のままです(または他のトランジションをテストします)。キーワードのリストを以下に示します。
[MAXScript リスナー](MAXScript Listener)ウィンドウを開き(ファンクション キーである F11 を押すと開く)、以下を入力すると、スクリプトで確認される代理オブジェクト固有のパラメータの完全なリストを表示できます。
ShowProperties $delegate01
代理オブジェクトはノードであるために、既に述べた「simpos」を除き、代理オブジェクトは標準の MAXScript ノード関連の関数にも応答します。また、持続時間や優先順位などのトランジション プロパティへのアクセス方法に関する情報は、『MAXScript ヘルプ』を参照してください。
認識機能コントローラで使用できる MAXScript 条件式の例については、「トランジション ダイアログ ボックス」を参照してください。