• 追加された行はこの色です。
  • 削除された行はこの色です。
#contents

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

* 資料とか他の人の纏めとか [#tf618eb6]

* 複数タイトルで使われた柔軟性の高いAIエンジン [#y58c54f8]
- BNSさん。タイムクライシス5とか。
- 柔軟で決まった動き
- AIデザイナのみで構築可能な環境
 AI Designer
  |
 Squad AI(個々のグループ)
  |
 Agent AI(個人)

- Agent AI
機能毎にモジュール化。
モジュールを組み合わせてAIを作る。

** AIの流れ [#u9689c0f]
- Perception -> Brain -> Action
*** Perception(認識) [#h1c288b9]
- キャラクターの認識。環境から収集して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