現地参加せずに、ニコ生の放送観た纏め。

資料とか他の人の纏めとか

複数タイトルで使われた柔軟性の高いAIエンジン

BDIモデル、PID制御とその辺りを理解しきれなかった……

  • BNSさん。タイムクライシス5とか。
  • 柔軟で決まった動き
  • AIデザイナのみで構築可能な環境
     AI Designer
      |
     Squad AI(個々のグループ)
      |
     Agent AI(個人)
  • Agent AI
    機能毎にモジュール化。
    モジュールを組み合わせてAIを作る。

AIの流れ

  • Perception -> Brain -> Action

Perception(認識)

  • キャラクターの認識。環境から収集してAI独自の解釈を加えて保存
    • レベル中の静的オブジェクト、動的オブジェクト(プレイやー、敵)、ナビゲーションメッシュ
      AIの価値観で取捨選択、加工する。
      ex.)プレイヤーの行動でヘイト値を増減、ヘイト値が高いプレイヤーを狙う
    • Layer-based Perception System
      • ソースレイヤー
        データ収集。視覚、聴覚をシミュレート。索敵など。
      • 加工レイヤー
        フィルタリング。レイキャストや経路探索等。スコアリング
      • 選択レイヤー
        集めた中からどれを使うか。スコアの一番高いもの、ランダムとか。
      • 事前にプライオリティでソートを行う。
        ex.)
        範囲内の敵をリストアップ
        距離によるスコアリング
        スコアに応じて
        残り体力でスコアリングすると味方プレイヤーの回復とかにも使える。
      • 危険度の低い敵を狙う
        敵から攻撃を受けた際に、その敵の座標を危険地点として他のAIにも通達する。(パンくず)
      • Influence Map
        フィールド上の影響度。(敵、味方どちらが優勢かなど)
        作成方法
         影響度の元となる種を設定する。(危険地点(パンくず)など)
         隣接するノードに伝搬させる。
         繰り返す

Brain(意思決定)

  • 昔からのやり方(FSM)
    複雑になってくると全体像が見えにくい。管理しきれなく鳴る
  • BehaviorTreeとHTNプランニングのハイブリッドシステム
    • BehaviorTree
      • タスク:条件判定、実際の行動
      • シーケンス:タスクを順番に実行
      • プライオリティ(UE4だとSelector?):複数のタスクから一つを選ぶ
      • Probability:設定された比率からランダムで選ぶ
      • Parallel:複数のタスクを同時に行う
      • Decorator:子供のタスクの動作をカスタム(数回繰り返す、タイムリミット等)
  • HTNプランニング
    階層型タスクネットワーク(ドメイン)
    状態に応じて分解(ステート)
    目標(ゴール)を達成する為のタスク列(プラン)を得る。
  • PrimitiveTask
    ステートへの操作。自分の状態変化
  • CompoundTask
    サブタスクのリスト
  • ハイブリッドに
    BehaviorTreeで決めた目標を達成するタスクをHTNプランニングにより求める
    BehaviorTreeをメインにして、HTNプランナーに具体的な目標を渡すと、短期的なプランが出来上がり細かな制御が出来る。
    HTNプランニングをメインにして、HTNプランナーに大まかな目標を渡すと、長期的なプランが出来上がりAIの自律的な行動が出来る。
  • BDIモデル
    特定の計画を元に行動しようとする意図がある。同じ結果であっても意図によってアニメーションを変えたりして自然な動きに。
    意図は信念と願望により決定される。
    • BDIアーキテクチャ(信念、願望、意図を保持する)
      1.信念と欲求から願望(BehaviorTree)を決めて候補(HTNドメイン)を算出
      2.候補から実際に行う物を決定(HTNプランナー)
      3.実行
      4.外部要因で信念を更新する
       -> 合理性の高い、人間らしいAIをAIデザイナが構築できる。
  • プランニングの問題
    遅延評価
     プランニング時では予測出来ない。
      カバーポイントに移動してから、プレイヤーの距離をはかって攻撃の種類を決定する時(その間にプレイヤー移動するかも)
    並列タスク
     同時に行える方が自然
      ・カバーへ移動
      ・リロード
      タスクを小分けにしてParallelで繋ぐ
  • まとめ
    シーケンススクリプト  |
                          +-> BehaviorTree -> HTNプランニング -> BehaviorTree(plan)
    プログラム            |

Action(意思をキャラクターに反映)

  • 意図によってアニメーションを変化させる
    攻撃するための移動。カバーポイントに着く前から狙う動作に入る。
    隠れるための移動。カバーポイントに着く前から隠れる動作に入る。
  • Steering
    キャラクターの移動を担当するモジュール

    • Pathfinding
      Path Following
      Collision Avoidance(ORCA based)
  • 乗り物
    車線変更、多数の敵の制御。手付けデータの流し込みでは限界。
     ↓
    AI制御。物理駆動。
  • コースデータ
    スプライン、スプラインの幅でコースデータを表現
  • コントロール
    目標はレベルデザイナーが設定
  • PID制御
    P:比例動作。目標値と現在値の差に比例した動作
    I:積分動作。差の累積値(積分)に比例した制御
    D:微分動作。差おn変化量(微分)に比例した制御
目標値(速度、角度) -> LPF +-> P -+-> Vehicle -> 出力値(速度、角度)
                            +-> I -|
                            +-> D -|

・パラメーター調整が重要
 適当なパラメーターだとふらふらする。
・パラメーター調整方法
 限界感度法
 ステップ応答法。最適値というより近似値
  -> ステップ応答法で求めた値をベースに、焼きなまし法で求める
  簡単なテストコースでパラメーターを調整
   -> 目標値と実際の値をエラー値として保存

  課題
   焼なまし法による調整では何百周、何千周もしなければいけない。
    -> キャラクタAIの学習利用は、他の処理を省いて高速で動く環境有るのがベスト

課題

AIデザイナにもAI技術の知識が必要


    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS