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


間違ってたらごめんなさい

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

複数タイトルで使われた柔軟性の高い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.)
  1. 範囲内の敵をリストアップ
  2. 距離によるスコアリング
  3. スコアに応じて
    範囲内の敵をリストアップ

    距離によるスコアリング

    スコアに応じて
    残り体力でスコアリングすると味方プレイヤーの回復とかにも使える。
    • 危険度の低い敵を狙う
      敵から攻撃を受けた際に、その敵の座標を危険地点として他のAIにも通達する。(パンくず)
    • Influence Map
      フィールド上の影響度。(敵、味方どちらが優勢かなど)
      作成方法
  4. 影響度の元となる種を設定する。(危険地点(パンくず)など)
  5. 隣接するノードに伝搬させる。
  6. 繰り返す
         
     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技術の知識が必要

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技術の知識が必要

FINAL FANTASY XV -EPISODE DUSCAE- におけるキャラクターAIの意思決定システム

イントロダクション

  • AIキャラクター制作に求められたこと
    • 説得力のある行動
    • リアリティのある挙動
    • イベントとシームレス
    • 量産性

意思決定入門


「環境」の中に「身体」

「知能」が身体を環境の中で動作させる

入力(センサー) -> 身体 -> 行動(アウトプット)

知能の内部世界 <-> 環境世界

エージェント・アーキテクチャ。知能と環境をわけて考える
  • 知能の内部世界
    [環境世界] -> 記憶 -> 認識の形成 -> 意思の決定 -> 運動の構成 -> 身体制御 -> [環境世界]

    情報が循環する(インフォメーション・フロー)
  • 意思決定モデル
    • ルール(規制)ベースAI
    • ステート(状態)ベースAI
    • ビヘイビア(振る舞い)ベースAI
    • ゴール(目標)ベースAI
    • タスク(仕事)ベースAI
    • ユーティリティ(効用)ベースAI
    • シミュレーションベースAI
  • ビヘイビアツリー入門
    多層構造
  • ステート入門
    ステートを遷移条件で結ぶ

    基本的に循環するステートマシン(有限状態マシン)を作る。

    階層化も出来る。

ステートマシンの堅実な制御と、ビヘイビアツリーの適応的な行動の生成、両方の長所を生かしたい

Luminous AIの全体設計

  1. 必要な概念リストを作成
  2. 種類分け
  3. それぞれを実装していく
  • メタAI
    ゲーム全体の流れをコントロール

    プレイヤーがピンチだから助けるとか
  • キャラクターAI(Luminous AI Graph)
    自分の行動
  • ナビゲーションAI
    地形や状況の解析(Luminous AI Navigation)
  • Luminous AI Tool
  • Luminous AI Runtime

AI Graph Editorの実装

ツール設計の課題

  • ビヘイビアツリーとステートマシンの組み合わせ方
    グラフ構造の為のノードと、処理の中身のノードを分離。

    グラフの処理の中身と、グラフ構造を分ける

    こうすると、処理の中身をビヘイビア、ステートマシン両方で組み合わせることが出来る。
  • ステートマシン、ビヘイビアツリーを入れ子にする事が出来る。
  • AI データの拡張性
    機能追加がスムーズに行えるか。組み合わせ爆発を無くしたい。

    階層型のグラフシステムに。
    • トレイ(タスクの集合、アセット)単位で階層化する。
      行動パターンを増やす際は、下層部分を増やすだけでいい。処理のフローは上層で遷移している。
  • ゲーム側とのスムーズな情報のやり取り
    ブラックボード
  • ローカルブラックボード
    自身のAIのみ
  • グローバルブラックボード
    プレイヤー等全体
  • コピー&ペーストをせずに量産するか
    • トレイをアセット化して、処理を共有できるように
    • オーバーライドして処理を上書きできるように
      特定のキャラだけ、処理の中身を書き換える事が出来る。

ゲーム組み込みの要件

  • ステートやビヘイビアの状況、パラメーターやログが確認できるように
    • ビジュアルノードデバッガ
      ツリーで現在のタスクの場所を見れる
    • インゲームデバッガ
      ログや階層状態など、詳細を見れる
  • AIキャラクターをシームレスでイベント演出を
    トレイを外部システムから実行出来るように。

    トレイを割り込み再生できる。
  • 賢いAI。行動している最中に別の行動、常に別の事を考えさせたい
    ステートマシンでもビヘイビアツリーでも並列実行できるように

    Parallelノードを用意。階層ごとにも配置出来る。

    同時実行「索敵と行動」+「移動と射撃」

ゲーム内への応用実例

NPC

  • 社会的な行動(生活活動)
  • 多くを同時に
    社会行動に特化した軽量スクリプトシステムを用意。

    トレイを外部実行で。

仲間

  • イベント演出の時も並列思考、通常AIを止めたくない
    通常AIの中に演出用のプリセットAIを埋め込んでおいて、外部からのメッセージで切り替えるように。
  • 仲間同士で強調させたい
    メタAIからの支持で行動を切り替える。

    ex.) アイテム使用命令 -> メタAIに -> 使用できる環境になれば(攻撃モーション中などは使用出来ない)メタAIからアイテム使用指示。

    ex.) 敵が「捨て身」を使用 -> メタAIが判断して行動できる仲間に -> 仲間が再優先でヘルプに入る

ニフル兵

  • 機械的な合理性
    • 今何が出来るのか
    • 何が一番合理的か
      ビヘイビアツリー
    • 身体制御との連動
      AIからアニメーションを再生ではなく、身体制御のステートマシンを介してアニメーションとやりとりする

      AIからメッセージが来たらステートを切り替える

モンスター

  • リアルな挙動
    • 視覚センサー、ターゲットサーチ
      • 視覚センサー
        AIの視覚をシミュレート。扇状。
      • ターゲットサーチ
        視覚センサーから得られた情報を解析

        AI Graphでターゲットを使用する。
  • PQS移動、ステアリング
    • 位置検索システム(Point Query System)
      移動先地点を選択して移動する。各地点の評価値を出す。(1m単位?)

      移動処理をデータで完結。

      フィルター。角度、距離を設定する。
    • ステアリング
      動的な回避。

      ロボット方面で有るRVOを発展させた。
  • 大量生産の仕組み
    • ルールAIシステム
      条件判定でマッチしたルールを実行。

      AI Graph基本ロジック実行 -> ルールAI実行 -> 行動テンプレート実行

      ex.)「たたかう」 -> 「接近して攻撃」が抽選 -> 「接近移動」する行動テンプレート
    • AI Graphオーバーライド
      ベースAIを作成、ゴブリンとかベヒーモスでオーバーライドする。

      C++のクラス継承と同じようなもの。
    • モーション解析
      • 攻撃モーション解析システム
        どこまで攻撃が届くか、を計算。

        これをAI Graph等で使用している。

        空間にコリジョン球(数cm単位?)を配置して、それで計算
      • 移動モーションの解析システム
        キャラクター0の旋回性能、停止性能等をチャート化。停止までに掛かった距離、旋回半径等。

        チャートから問題のあるアニメーションデータを見つけて修正する

次世代機で開発規模が大きくなってきた。

コストが増大していくのでAIはクオリティと共に効率化に力を入れている。

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