Top > CEDEC 2015
#contents ---- 現地参加せずに、ニコ生の放送観た纏め。 間違ってたらごめんなさい * 資料とか他の人の纏めとか [#tf618eb6] - 4Gamerさん http://www.4gamer.net/words/008/W00851/ * 複数タイトルで使われた柔軟性の高いAIエンジン [#y58c54f8] '''BDIモデル、PID制御とその辺りを理解しきれなかった……''' - 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(意思決定) [#mbf8292e] - 昔からのやり方(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(意思をキャラクターに反映) [#i146b695] - 意図によってアニメーションを変化させる 攻撃するための移動。カバーポイントに着く前から狙う動作に入る。 隠れるための移動。カバーポイントに着く前から隠れる動作に入る。 - Steering キャラクターの移動を担当するモジュール -- 人 Pathfinding Path Following Collision Avoidance(ORCA based) -- 乗り物 車線変更、多数の敵の制御。手付けデータの流し込みでは限界。 ↓ AI制御。物理駆動。 --- コースデータ スプライン、スプラインの幅でコースデータを表現 --- コントロール 目標はレベルデザイナーが設定 --- PID制御 P:比例動作。目標値と現在値の差に比例した動作 I:積分動作。差の累積値(積分)に比例した制御 D:微分動作。差おn変化量(微分)に比例した制御 目標値(速度、角度) -> LPF +-> P -+-> Vehicle -> 出力値(速度、角度) +-> I -| +-> D -| ・パラメーター調整が重要 適当なパラメーターだとふらふらする。 ・パラメーター調整方法 限界感度法 ステップ応答法。最適値というより近似値 -> ステップ応答法で求めた値をベースに、焼きなまし法で求める 簡単なテストコースでパラメーターを調整 -> 目標値と実際の値をエラー値として保存 課題 焼なまし法による調整では何百周、何千周もしなければいけない。 -> キャラクタAIの学習利用は、他の処理を省いて高速で動く環境有るのがベスト ** 課題 [#xab0d0b1] AIデザイナにもAI技術の知識が必要 * FINAL FANTASY XV -EPISODE DUSCAE- におけるキャラクターAIの意思決定システム [#g17ee8ae] - 4Gamerさん http://www.4gamer.net/games/075/G007535/20150831093/ ** イントロダクション [#k5a12778] - AIキャラクター制作に求められたこと -- 説得力のある行動 -- リアリティのある挙動 -- イベントとシームレス -- 量産性 ** 意思決定入門 [#l1f9d8e7] 「環境」の中に「身体」 「知能」が身体を環境の中で動作させる 入力(センサー) -> 身体 -> 行動(アウトプット) 知能の内部世界 <-> 環境世界 エージェント・アーキテクチャ。知能と環境をわけて考える - 知能の内部世界 [環境世界] -> 記憶 -> 認識の形成 -> 意思の決定 -> 運動の構成 -> 身体制御 -> [環境世界] 情報が循環する(インフォメーション・フロー) - 意思決定モデル -- ルール(規制)ベースAI -- ステート(状態)ベースAI -- ビヘイビア(振る舞い)ベースAI -- ゴール(目標)ベースAI -- タスク(仕事)ベースAI -- ユーティリティ(効用)ベースAI -- シミュレーションベースAI -- ビヘイビアツリー入門 多層構造 -- ステート入門 ステートを遷移条件で結ぶ 基本的に循環するステートマシン(有限状態マシン)を作る。 階層化も出来る。 ステートマシンの堅実な制御と、ビヘイビアツリーの適応的な行動の生成、両方の長所を生かしたい ** Luminous AIの全体設計 [#wdb83d8a] + 必要な概念リストを作成 + 種類分け + それぞれを実装していく - メタAI ゲーム全体の流れをコントロール プレイヤーがピンチだから助けるとか - キャラクターAI(Luminous AI Graph) 自分の行動 - ナビゲーションAI 地形や状況の解析(Luminous AI Navigation) - Luminous AI Tool - Luminous AI Runtime ** AI Graph Editorの実装 [#l6f6fe64] *** ツール設計の課題 [#fbee78c0] - ビヘイビアツリーとステートマシンの組み合わせ方 グラフ構造の為のノードと、処理の中身のノードを分離。 グラフの処理の中身と、グラフ構造を分ける こうすると、処理の中身をビヘイビア、ステートマシン両方で組み合わせることが出来る。 - ステートマシン、ビヘイビアツリーを入れ子にする事が出来る。 - AI データの拡張性 機能追加がスムーズに行えるか。組み合わせ爆発を無くしたい。 階層型のグラフシステムに。 -- トレイ(タスクの集合、アセット)単位で階層化する。 行動パターンを増やす際は、下層部分を増やすだけでいい。処理のフローは上層で遷移している。 - ゲーム側とのスムーズな情報のやり取り ブラックボード - ローカルブラックボード 自身のAIのみ - グローバルブラックボード プレイヤー等全体 - コピー&ペーストをせずに量産するか -- トレイをアセット化して、処理を共有できるように -- オーバーライドして処理を上書きできるように 特定のキャラだけ、処理の中身を書き換える事が出来る。 *** ゲーム組み込みの要件 [#m9a7da20] - ステートやビヘイビアの状況、パラメーターやログが確認できるように -- ビジュアルノードデバッガ ツリーで現在のタスクの場所を見れる -- インゲームデバッガ ログや階層状態など、詳細を見れる - AIキャラクターをシームレスでイベント演出を トレイを外部システムから実行出来るように。 トレイを割り込み再生できる。 - 賢いAI。行動している最中に別の行動、常に別の事を考えさせたい ステートマシンでもビヘイビアツリーでも並列実行できるように Parallelノードを用意。階層ごとにも配置出来る。 同時実行「索敵と行動」+「移動と射撃」 ** ゲーム内への応用実例 [#xaabdaa4] *** NPC [#x8011b0d] - 社会的な行動(生活活動) - 多くを同時に 社会行動に特化した軽量スクリプトシステムを用意。 トレイを外部実行で。 *** 仲間 [#v6f14242] - イベント演出の時も並列思考、通常AIを止めたくない 通常AIの中に演出用のプリセットAIを埋め込んでおいて、外部からのメッセージで切り替えるように。 - 仲間同士で強調させたい メタAIからの支持で行動を切り替える。 ex.) アイテム使用命令 -> メタAIに -> 使用できる環境になれば(攻撃モーション中などは使用出来ない)メタAIからアイテム使用指示。 ex.) 敵が「捨て身」を使用 -> メタAIが判断して行動できる仲間に -> 仲間が再優先でヘルプに入る *** ニフル兵 [#f90c19a4] - 機械的な合理性 -- 今何が出来るのか -- 何が一番合理的か ビヘイビアツリー -- 身体制御との連動 AIからアニメーションを再生ではなく、身体制御のステートマシンを介してアニメーションとやりとりする AIからメッセージが来たらステートを切り替える *** モンスター [#z18ed938] - リアルな挙動 -- 視覚センサー、ターゲットサーチ --- 視覚センサー AIの視覚をシミュレート。扇状。 --- ターゲットサーチ 視覚センサーから得られた情報を解析 AI Graphでターゲットを使用する。 -- PQS移動、ステアリング --- 位置検索システム(Point Query System) 移動先地点を選択して移動する。各地点の評価値を出す。(1m単位?) 移動処理をデータで完結。 フィルター。角度、距離を設定する。 --- ステアリング 動的な回避。 ロボット方面で有るRVOを発展させた。 - 大量生産の仕組み -- ルールAIシステム 条件判定でマッチしたルールを実行。 AI Graph基本ロジック実行 -> ルールAI実行 -> 行動テンプレート実行 ex.)「たたかう」 -> 「接近して攻撃」が抽選 -> 「接近移動」する行動テンプレート -- AI Graphオーバーライド ベースAIを作成、ゴブリンとかベヒーモスでオーバーライドする。 C++のクラス継承と同じようなもの。 -- モーション解析 --- 攻撃モーション解析システム どこまで攻撃が届くか、を計算。 これをAI Graph等で使用している。 空間にコリジョン球(数cm単位?)を配置して、それで計算 --- 移動モーションの解析システム キャラクター0の旋回性能、停止性能等をチャート化。停止までに掛かった距離、旋回半径等。 チャートから問題のあるアニメーションデータを見つけて修正する 次世代機で開発規模が大きくなってきた。 コストが増大していくのでAIはクオリティと共に効率化に力を入れている。 |