[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
2010年9月2日 にあった、CEDECの講演についての記事です。
「サカつく」のサッカー試合AIシステム
「サカつく」とは?
→ ”プロサッカークラブをつくろう”シリーズ (サッカークラブ運営SLG)
→ サッカーのリアルタイムシミュレーター
→ プレイヤーは、フォーメーションなど 間接的に指示するのみ
(選手個々の動きに関与する事はできない)
-------------------------------------------------------------
●サカつく に求められるAI?
・シミュレーターとしての納得感
強いチームは、勝率が良い
サッカーらしいスコアになる (1対10 とかならない)
・映像としての面白さ
サッカーの中継のような ドキドキハラハラ感、カメラワーク
・「結果を見る」モードがある
試合を飛ばして、試合結果だけを見る事が出来る
→ 「試合モード」と試合結果が変わってはいけない
-------------------------------------------------------------
●今までの 「サカつく」試合システムの変遷
1. 完全オーサリング方式
(オーサリング ・・・ 前もって作ったムービー みたいなイメージ)
オーサリング済のシーンを 試合場面に応じて たくさん用意
結果に応じて、それを再生する
→ ダイジェストのような試合進行
利点: クオリティーの高い試合シーン
人間らしい一連の動き (そのような動きを作っているから)
複数人が絡むモーション表現
カメラワークも狙って作れる (オーサリングを再生するだけなので)
AIが 試合の見栄えに影響しない
欠点: 同じシーンばかり再生される
展開が読めてしまう
→ シチュエーションの増加 で対応
→→ 作業コスト かなり大 (いつか破たんしてしまう・・・)
2. 完全リアルタイム方式
アクションサッカーゲーム と同じアプローチ
一人一人の選手が独立した動き
利点: 自由度の高さ
局面は無限
先の読めない展開
欠点: 各パラメーター → 物理挙動 → 結果 なので、バランス調整が極めて困難
処理負荷 大
「結果を見る」モードの結果同期が大変
3. 折衷方式
上記2つの良いところ取りをしよう
1.の 見栄えの良さ、見栄えに影響しないAI
2.の 自由さ
これを活かしたい
-------------------------------------------------------------
●折衷方式 について
サカつくDS で採用
ハードウェアの処理能力の制約
・・・ 全員を賢く動かすことができない
→ どうせなら 球際だけでも うつくしく
・球際だけ オーサリング方式
”ボール保持者 と 最小限の選手” だけに限った小さなシーンを オーサリング
それ以外の選手は、適当に動いてもらう
・小さなシーン
スローイング → ドリブルで敵を抜き → パスを行い → ヘディングシュート
上記は、今までのシリーズでは 一つのオーサリングであったが
”スローイング” ”ドリブルで敵を抜き” ”パス” ”ヘディングシュート”
と、4つの小さなシーン とする事にした
・プレイセット
同一局面、同一プレーで分岐しえるシーンのセット
例) 目の前に敵が ドリブルで抜く → うまく抜いた! (成功)
抜いたし、相手は転倒 (大成功)
ボールを取られた (失敗)
と言うように、起 となる一つのシーンと 結果となる複数のシーン
それをワンセットにした物
→ 結果は 大成功、成功、失敗、大失敗 の4種類を用意する
評価式 によって、どの結果になるか? を判定する
・プレイセット 選択AI
ボール保持者 が、取りえる プレイセット をリスト化
例) 「選手Aへショートパス」「選手Bへロングパス」「前へトラップ」「後ろへトラップ」
そして、各プレイセットに 評価点を設定
評価点を重みとした ルーレット方式 で、決定
例)
選手Aへショートパス: 50点
選手Bへロングパス: 20点
前へトラップ: 15点
後ろへトラップ: 20点
・プレイセット結果判定
プレイセット固有の判定式から、確率パラメータを計算
(確率パラメーター = オフェンスのパラメータ と ディフェンスのパラメータで いろいろ計算したりする)
レーティング表により、成功結果の確率を得る
・試合ヒストリー構造体
再生するプレイセット 、 その結果
プレイセットをどこ(座標)で再生するか?
プレイセットをいつ再生するか?
プレイセットに含まれない選手がどうしているか? (簡単なAIが どこへ移動するか? など指示する)
これらを 一つの構造体にまとめる
= 試合ヒストリー構造体
試合は、この 大量の”試合ヒストリー構造体”を再生する事で 実現する
-------------------------------------------------------------
●問題 克服された?
・シーン制作工数
オーサリングは敵味方の2人 (旧では、全選手)
分岐数は、1シーンに対し4つ (旧では、大量)
→ かなりの改善 (旧と比べ、10分の1)
・結果のバランス調整
パラメーターによる プレイセットの成否判定 の調整のみで済むため
かなりやりやすい
(蹴った時のボールの動きなどの 物理挙動に振り回されずに済む)
・デバッグ・調整の利点
ヒストリのメリット
→ 全てがヒストリに書かれている
→→ バグの再現性向上
→→ ログの分量 減量
毎フレーム 試合ログを書かなくて良いので (1シーンごとで良い)
バグが起きた時の追いかけ が かなり やりやすい
→→ 超高速で試合ができる (シーンを再生しなければ 1瞬で試合が経過する)
その結果、何度も何度も対戦させて 統計データとりやすい
・総合して
オーサリング リアルタイム 折衷案
見た目 ◎ △ ○
多様性 × ◎ ○
結果コントロール ◎ × ○
工程数 × ○ ○
レスポンス × ◎ △
処理速度 ◎ △ ○
前2手法は 飛びぬけて良い所もあるけど、弱点がある
折衷案は、飛びぬけて良い所は無いが、全体的に良い感じ
サカつく においては、この折衷案が 最適解であったのでは無いか?
-------------------------------------------------------------
●質疑応答
・選手の個性は どう表現したか?
プレイセット 選択の際に、どれを選びやすいか? で実現している
(ドリブルを選びたがる、パスを選びやすい)
ついったー
http://twitter.com/seki_seki_seki
連絡先は
sekisekiseki(あっと)gmail.com