「賢いAIの作り方(What Makes Good AI?) |Game Maker’s Toolkit」という、AIを作るためのためになる動画を見つけたので内容をまとめてみました。
賢いAIの話になると、FEARやHaloのようなFPSの効率的で攻撃的な敵がよく話題にのぼる。
だが「賢いAI」はそれだけではないはずだ
What Makes Good AI?
目次
賢いAIで話題に上がる3つの例
- 初代F.E.A.R. のレプリカ兵
- Haloシリーズの敵エイリアン
- 初代Half Lifeの海兵隊
これらのゲームでは敵が巧妙な行動パターンを取る。Halo 2とF.E.A.R. のAIテクノロジーは今のゲームでも使われている。
これらのAIは敵が「非常に攻撃的」という共通点を持つ。
- プレイヤーを積極的に探す
- プレイヤーを倒そうとする
- 敵は「攻撃力が高く」「体力が高い」
Halo の実験
Haloでは、「A. 攻撃力が低く・体力が低く」と「B. 攻撃力が高く・体力が高い」どちらも同じAIシステムという2つのバージョンでテストプレイをしたところ、Bのバージョンをプレイしたユーザは5倍以上賢く感じたという。
- 敵が「攻撃力が高く」「体力が高い」と「賢いAI」と錯覚しやすい
ということが実験によりわかった。
しかし、DOOM (2016) での開発中に「敵が攻撃的であるのは、はたしてゲームにとって良いことか?」という疑問が生まれる
DOOM (2016)での疑問
当初のAIは、「敵がプレイヤーを執拗に追跡する」というものだった。
- それによりプレイヤーは、「敵を迎え撃つために『後退する』という戦術をとりがち」となり、面白くない受け身のプレイスタイルとなってしまった
- ↓ ↓ ↓ ↓ ↓
- そこで、敵の移動を制限することでプレイヤーが前進できるようにしてゲームを改善した(プレイスタイルの幅を広げた)
つまり、AIはゲームが目指す経験に適合する必要がある。
例えば、攻撃的なAIは “Alien: Isolation” のような獰猛な敵の思考をうまく表現しているが、“Batman: Arkham Asylum” の警備兵のように個人の能力が低く集団の連携を取るAIを表現するのには向いていない。
賢いAIは単に「殺しに来る敵」以上のものが必要となる。
賢いAIは単に攻撃的なだけではない
ゲームを面白くさせる賢いAIは以下の要素を持つ
- 賢いAIは「攻略の余地をプレイヤーに与える」
- 賢いAIは「思考過程をプレイヤーに伝える」
- 賢いAIは「次の行動を予測しやすい」
- 賢いAIは「ゲームのシステムに干渉する」
- 賢いAIは「プレイヤーに反応する」
- 賢いAIは「自分の目標を持っている」
- 賢いAIの対象は、敵だけではなく味方にも言える
賢いAIは「攻略の余地をプレイヤーに与える」
賢いAIは、プレイヤーに気づかれることなく「攻略の余地をプレイヤーに与える」
- Skyrim: 商人の頭にバケツをかぶせると視界が遮断され、商品を盗むことが可能になる
- Uncharted: 敵がカバーから顔を出したときの最初の射撃は必ず外れる(プレイヤーに安全に攻撃できる猶予を与えている)
- Far Cry: 敵が一度に攻撃する数が制限されているので、大量の敵相手でも勝ち目がある(無双している感)
- Arkham: プレデターセクション(戦わずに敵を無力化するステルスパート)では敵が後ろを振り向かないので、簡単に背後から接近できる
ゲームを公正に感じさせるために、あえて攻略の余地を与えている
- プレイヤーのゲームスキル上達により、プレイヤーが有利になるようにゲームをデザインすること!
賢いAIは「思考過程をプレイヤーに伝える」
ステルス系ゲームではAIの思考過程をプレイヤーに伝えることが特に重要となる。思考過程を「どの程度プレイヤーに教え」「どの程度隠しておくか」が重要。
- どんな優秀なAIでも、プレイヤーにどういう思考をしているのか(有用なフィードバックを)伝えないと、それを理解できない
これによりAIの行動を予測して、プレイヤーは対策を立てることが可能となる。思考過程を伝えるのに有効な方法として「バーク(吠え)」という手法がある。
古典的な “バーク(吠え)” という手法
バークとは、敵のAIの状態(思考)を表現するための明示的なボイス・独り言。
- 巡回中の警備兵が「あそこに誰かいるみたいだぞ…」(→敵がプレイヤーを探そうとする)
- それから「気のせいか」と言ったりする(→敵はプレイヤーを見つけられなくてあきらめる)
- ドアが開いたことに気づいたときに「このドア閉め忘れたか?」と言う(→プレイヤーの存在にまだ気がついていない)
ゲーム的な思考過程の表現
よくあるゲーム的な「円弧」で視界範囲を表現するもの。懐中電灯やサーチライトなどの光で表現される場合もあり
敵がプレイヤーに気づいたときの、古典的な記号表現の例
キャラクターごとに異なる性格を持たせる
- パックマン: オバケは各色で異なる移動アルゴリズムを持っている
- Civilization: 一人用モードの各指導者は個性的な戦略を選ぶ
個性的な行動を取ることで、賢いAIに見せることができる
賢いAIは「次の行動を予測しやすい」
AIの目標は予測不能なものを作ることではない。必要なのは「一貫した行動をする人工知能」だ。それなら、プレイヤーは自分の行動に対するAIの反応を予測できる。
これによりプレイヤーは「志向性」を持った攻略ができるようになる。(※「志向性(Intentionalität)」とは、ゲームの力学の理解を通じて、プレイヤーが自分なりの目標を設定できる能力のこと)
── クリス・ブッチャー(Haloのチーフプログラマー)
目標を立てたゲームの攻略の流れ
プレイヤーは各要素が機能するルールの違いを学ぶ。例えば、赤いドラム缶を撃つと爆発するなど
理解したルールの最適な利用方法を模索する。例えば、自分が巻き込まれないようにドラム缶を破壊して敵にダメージを与えるなど
攻略に有用なAIの行動ルール
- 警備兵は拾った銃を箱にしまう(箱から銃をGetできる)
- 発電機のスイッチを切ると必ず敵は調べに来る(敵を誘導させてそのスキに先に進むことができる。罠を仕掛けて一網打尽にする)
予測できる行動が存在しないと、プレイヤーは計画を立てることができない
Haloでは、グラントの背後に回り込むと逃げ出すようにして、倒しやすくした。
50%の確率で逃げるのではダメ。計画を立てても成功率が半分になってしまう。
ただし行動は予測可能にしたが、結果は予測できないようにした。グラントは常に逃げるが、プレイヤーはどこに(どの方向と距離に)逃げるかまではわからないのだ。
── クリス・ブッチャー(Haloのチーフプログラマー)
例えば、Spelunky の敵は単純な行動しかしないので、1体であれば避けるのも倒すのも簡単。しかし、大量に出現したり、周囲の環境が変わって他の敵に反応することで、予測不可能な結果になる。
スーパーマリオブラザーズも、敵は明確にプレイヤーを狙って攻撃しないが、複数出現したり地形の変化などで攻略手順が変化する。
賢いAIは「ゲームのシステムに干渉する」
ゲームシステムに干渉するAIキャラクターは、以下の特徴を持っている。
- 環境を理解して対応できている
- 生存の意思を持っている
- プレイヤーと似た能力を持っている
- という印象を持つため、賢く行動しているように見える。
「ゼルダの伝説 ブレス オブ ザ ワイルド」でのAIのゲームシステムへの干渉
- 敵が落ちている武器を拾う
- 木の棒に火を付ける
- 爆弾を蹴る
- 仲間のモンスターを投げる
システムに干渉するAIを攻略に活用する
Bioshock では、戦闘中にヘルスディスペンサーに駆け寄って回復する敵がいるが、「ヘルスディスペンサーに罠を仕掛ける」という攻略が可能。それによりAIがゲームシステムに干渉することで、より複雑で楽しい戦法を考案できる余地が生まれる
敵を味方につける
「コッコ」は一定のダメージを与えると、画面外から大量に出現して襲ってくる最強のニワトリ。このルールを逆手に取って、敵にコッコを攻撃させると大量のコッコが敵を襲うようになる。
賢いAIはプレイヤーに反応する
Batman Arkham では仲間が倒されると警備員が恐怖する
Shadow of Mordor の例
オーク隊長はプレイヤーの行動を記憶して、次に出会ったときのリアクションが変化する
「よう! 今度は逃さねえぞ! これで終わりにしてやる!」
「お前の死で、俺はさらなる栄光を手にするだろう!」
プレイの過程が記憶に残るストーリーを作り出すことになる
プレイヤーの動きをトレースする
プレイスタイルを学習し、プレイヤーの代わりとなるAI
自らの戦法やスタイルの特徴を把握して成長する「シャドー」を作成し、闘うことができる。シャドーは自分がプレイしていない時、挑戦者と戦ってくれ、勝利するとXPやSP(シャドーポイント)を稼いでくれる。
プレイスタイルをコピーしてAIによる自動運転をする。クラウドに保存され対戦が可能となる(※これほど賢くなくてもいい)
メタルギア・ソリッド5では、敵はプレイヤーの攻略方法を記録して、それに対処する装備を強化する
攻略方法 | → | 対処するための装備 |
---|---|---|
ヘッドショットを多用して攻略した | → | ヘルメットを装着する敵が増加する |
ステルスでの基地攻略をした | → | 地雷などの罠が仕掛けられるようになる |
夜間に侵入した | → | フラッシュライトの装備を止めて、ナイトビジョンゴーグルを装備するようになる |
ガス・グレネードを使用した | → | ガスマスクを装着する敵が増加する |
フルトン(気球)により侵入した | → | フルトン警戒範囲が広がる。赤い警戒マークが広がる |
戦車などの乗り物で侵入した | → | ミサイルを装備する敵が増える |
指示されたAIが動くだけ(Scripted AI)で学習しているわけではなく、プレイヤーがある条件を満たすまで実行されないが「プレイヤーに常に同じ戦法で基地を攻略させない工夫」がされている。
ゲームが進行するとエイリアンは新たな能力を使う。それにより、ゼノモーフがプレイヤーから学習しているように見せることができる。
唯一の有効な武器であった火炎放射器も、何度か使用すると撃退が不可能になる(「火炎=脅威でない」と認識する)
AIをプレイヤーのテンポに合わせる
- Left 4 Dead: プレイヤーの状態を体力と特殊感染者との戦闘から判定し、チームが順調に進んでいる場合はゾンビの攻撃性が高くなる。ただ闇雲に攻撃するのではなく、一定の間隔で攻撃の手を休ませて緩急を作っている
- パックマン: オバケは “プレイヤーを追いかける” のと、”マップの端をうろつく” という2種類の動きを交互に行うようにした
常に追いかけられるのはつかれるので、敵の攻撃に波があるようにしました。
── 岩谷徹 (パックマンのゲームデザイナー)
賢いAIは自分の目標を持っている
賢いAIは「プレイヤーを倒す」だけではない目標を持っている。
- Rainworld: 敵は食料を求めて行動しており、ときには敵同士で縄張り争いをする(→手を出さずにスルーするのが正解)
- S.T.A.L.K.E.R. SHADOW OF CHERNOBYL: バンディットたちは計画を持っており、それに従って荒野を移動している。 敵対する陣営同士がたまたま出会って、激戦が起きることがある
- Waking Mars: 火星の内部で繁殖する生態系。多様な植物や動物が互いにどういう反応するかを理解して、繁殖可能な生態系を作り出すことができる
賢いAIは敵だけではない(味方も)
味方のAIを賢くするのは難しいので、ゲームならでは工夫がある
- Bioshock Infinite: NPCのエリザベスは無敵。戦闘の邪魔な位置に隠れて、弾薬や武器を与えてくれて、敵の種類や位置を教えてくれる
- 人喰いの大鷲トリコ: トリコは巨大な獣で敵を倒してくれるが、ステンドグラス(ガラスの目)があるとトリコが嫌がって先に進まなくなる。トリコを機能させるために、石を投げつけたり、稲妻を当てる、落とすなどのアクションでガラスの目を除去する必要があり、プレイヤーはAIと協力しなければならない
- Event[0]: 難破した宇宙船で人工知能と会話しパズルを解く
- ファイナルファンタジーXV: プロンプトが冒険中にインスタグラム風の写真を撮ってくれて、ゲームでの経験を保存するための良い思い出となる
まとめ
「より優れた」方法を取らないAIでも賢く見せることは可能。
しかし、不要というわけではなく、敵が間違った行動ばかり行えば没入感が台無しになることもある。それに頭の悪い敵を倒しても達成感が低いので、開発者は常にAI技術を洗練させ、より繊細な行動を取る敵を目指すべき。
とはいえ、AIは単なる技術的な問題ではない。ゲームデザインの目標によって、求められる解答は変化する。
Uncharted 4 でいくつか複雑なAIを試したが、結局は適当に散らばって人間みたいなふりをした方が、「予想しやすい思考で動くのでプレイヤーが背後に近寄りやすい」というAIに落ち着いた
── マシュー・ギャラント (Uncharted 4 ゲームデザイナー)
AIの目標は「プレイヤーを探し出すことではなく、面白いゲームプレイを提供することだ」
■以下、AI技術に関する予備知識
AI技術に関する予備知識
ウェイポイント(点)、ナビメッシュ(三角形)
移動可能な経路をネットワークグラフにより表現したもの
点を要素とするネットワークグラフ
角形(凸角形)を要素とするネットワークグラフ
A* 経路探索
ゴール地点への”推定距離”(ヒューリスティックコスト)を想定したトータル距離から最小のノードを探索する方法
各ノードの評価距離=出発点からの経路+"ヒューリスティック距離"
A-starアルゴリズム
A*アルゴリズムの実装方法についてはこちらの記事に書きました
TPS (Tactical Point System[戦術位置検索システム])
目的(戦術)に応じたポイントをその場で探し出す。UE4では EQS(Evalution Query System)として存在する
- 動的に移動ポイントを生成
- 条件を設定して不要なポイントをフィルタリング(除外)する
- 消去法でネガティブな要素を持つポイントを削っていく
- 最後に残ったポイントに移動する