認識機能コントローラ

認識機能コントローラを使用すると、シミュレーション時の群集のメンバの動作を状況に応じて変更できます。たとえば、ランダムにさまようキャラクタが、ターゲットから一定の距離の範囲内に到達すると、ターゲットに向かってまっすぐに移動します。

技術的には、認識機能コントローラは、いくつかの条件が記述されたスクリプトを使って、群集シミュレーションを制御します。つまり、人工知能を群集シミュレーションに実装することになります。フローチャート形式のエディタ 認識機能コントローラ エディタ([モーション フロー グラフ](Motion Flow Graph)ダイアログ ボックスに似ている)を使用して、動作およびその組み合わせのネットワーク(状態)を設定します。次に、MAXScript ベースのトランジションを適用します。トランジションには、代理オブジェクトの状態が遷移するタイミングが指定されています。設定は比較的簡単ですが、キャラクタが生きていて、意識を持ち、シーンを動き回りながら動作を決定しているようなシミュレーションを作成できます。

認識機能コントローラのトランジションの例については、「[State]ダイアログ ボックス」を参照してください。

パーティクル システムのパラメータのテスト

オブジェクトの位置のテスト

環境効果プロパティのテスト

2 つのオブジェクト間の距離のテスト

モディファイヤのパラメータのテスト

別の代理オブジェクトの動作のテスト

手順

認識機能コントローラを設定および使用するには:

    この手順では、認識機能コントローラの作成および使用に関する典型的な設定方法を説明します。群集のシミュレーション セットアップの基礎知識があることを前提に説明されています。群集の設定に関する詳細は、群集のヘルパー オブジェクトおよび[セットアップ](Setup)ロールアウトを参照してください。

  1. 群集オブジェクトおよび 1 つ以上の代理オブジェクトを含むシーンを作成します。詳細は、群集ヘルパーを作成するを参照してください。
  2. 最低 2 つの動作を作成します。詳細は、動作を割り当てるを参照してください。
  3. 認識機能コントローラ エディタを開きます。
  4. [新規作成](New)ボタンをクリックすると、認識機能コントローラが作成されます。

    character studio によりコントローラに既定値の名前「Cognitive Controller」が付きます。「Seek/Wander」のように、認識機能コントローラに対してよりわかりやすい名前を付けることをお勧めします。テキスト ボックスで名前をクリックして、キーボードで編集すると、名前を変更できます。

    新しく認識機能コントローラを作成すると、自動的に「状態を作成モード」に配置されます。

  5. エディタのウィンドウをクリックすると、状態を作成し、配置できます。別の位置で続けてクリックすると、任意の数の状態を追加できます。
  6. 状態を右クリックして[State]ダイアログ ボックスを開きます。
  7. 状態にもわかりやすい名前を付けることをお勧めします。名前は、[State]ダイアログ ボックス内で変更できます。テキスト ボックス内で名前(状態または状態の番号)をクリックして、キーボードで編集します。

    次に、それぞれの状態に対し動作を定義します。

  8. [追加](Add)ボタンをクリックします。
  9. [動作を選択](Select Behaviors)ダイアログ ボックスで、動作を 1 つ以上選択します。

    複数の動作を選択する場合は、状態エディタでそれぞれの動作に対し、異なる重みを指定できます。たとえば、完全な重みを持つ探査動作と半分の重みを持つさまよい動作を組み合わせて、代理オブジェクトが目標を探しながらさまようようにすることができます。

  10. [動作を選択](Select Behaviors)ダイアログ ボックスを閉じてから、状態エディタを閉じます。
  11. 手順 6 から 10 を必要に応じて繰り返し、コントローラ内の他の状態にも動作を定義します。

    次に、[トランジションを作成](Create Transition)を使用して、シミュレーション中の状態のシーケンスを定義します。

  12. 状態が生じる順序を決定します。
  13. ([トランジションを作成](Create Transition))をクリックします。
  14. ある状態から次の状態へラインをドラッグすると、トランジションが作成されます。状態をクリックすると、その状態からその状態自体へのトランジションが作成されます。

    トランジションの矢印が表示され、「ソース」の状態から「ターゲット」の状態を指します。

    それぞれの状態に対して、任意の数のトランジションの前後に状態を持たせることができます。それぞれに対して異なるトランジションの状態を指定すると、必要なだけ複雑な状態ダイアグラムを作成できます。

    次に、トランジション ダイアログ ボックスを使用して、各トランジションの条件式を定義します。

  15. トランジション ラインを右クリックします。
  16. トランジション ダイアログ ボックスで、トランジションの状態の名前を入力し、[MAXScript を編集](Edit MAXScript)ボタンをクリックします。
  17. [MAXScript エディタ](MAXScript editor)ウィンドウを使用すると、トランジションが生じる条件を定義するスクリプトを入力またはロードできます。

    通常、状態をテストし、1 (true の場合)または 0 (false の場合)を返す関数を使用します。

    注: この機能の MAXScript サンプル コードを確認するには、オンライン リファレンス のこのトピックを参照してください。

    たとえば、次のように表示されます。

    fn test1 del t = (
    if (del.simpos.x <= 40 and del.duration > 50) then 1 else 0
    )

    簡単に説明すると、上の例では、X 軸上で代理オブジェクトの位置が 40 以下、50 フレーム以上に対して現在の状態にある場合、トランジションが生じます。ただし、いずれかの条件または両方が false の場合、代理オブジェクトは現在の状態のままです(または他のトランジションをテストします)。キーワードのリストを以下に示します。

    • fn - MAXScript の関数がこの後に続きます。
    • test1 - 関数名です。[トランジション](Transition)ダイアログ ボックスにもトランジション条件として表示されます。この関数は、最初にトランジションがテストされる場合に実行されます。スクリプトには、スクリプトの関数を呼び出すための、追加の関数が任意の数含まれています。
    • del - スクリプトが現在適用されている代理オブジェクトです。トランジション スクリプトは、認識機能コントローラが適用される各代理オブジェクトまたはチームのメンバについて、フレームごとに 1 回実行されます。したがって、スクリプトで特定の代理オブジェクト名ではなく「del」を使用すると、その認識機能コントローラが割り当てられているすべての代理オブジェクトがテストされます。
    • t - シミュレーション内の現在の時間(フレーム番号)です。
    • del.simpos.x - X 軸での代理オブジェクトの現在位置です。「simpos」は、シミュレーションの計算中に代理オブジェクトの位置を判断するために使用される特別な関数です。シミュレーション中、標準の「[node].pos」関数では代理オブジェクトの位置を MAXScript に対して使用できないので、この関数が必要になります。
    • del.duration - 代理オブジェクトが現在の状態のままでいたフレームの数です。

      [MAXScript リスナー](MAXScript Listener)ウィンドウを開き(ファンクション キーである F11 を押すと開く)、以下を入力すると、スクリプトで確認される代理オブジェクト固有のパラメータの完全なリストを表示できます。

      ShowProperties $delegate01

      代理オブジェクトはノードであるために、既に述べた「simpos」を除き、代理オブジェクトは標準の MAXScript ノード関連の関数にも応答します。また、持続時間や優先順位などのトランジション プロパティへのアクセス方法に関する情報は、『MAXScript ヘルプ』を参照してください。

      認識機能コントローラで使用できる MAXScript 条件式の例については、「トランジション ダイアログ ボックス」を参照してください。

  18. トランジション ダイアログ ボックスを使用すると、優先順位や持続時間など、他のパラメータも設定できます。
  19. [動作の割り当てとチーム](Behavior Assignments and Teams)ダイアログ ボックスを使用すると、認識機能コントローラを代理オブジェクトまたはチームに割り当てることができます。
    注: 群集では、代理オブジェクトに対して複数の認識機能コントローラを使用することはできません。複数の認識機能コントローラを割り当てることはできますが、character studio は計算時に最初に割り当てられた認識機能コントローラのみを使用することを通知します。