長久さんや三宅さんがやっている「ゲームAI連続セミナー」 に行ってみました。後半の方です。
今回のテーマは、知識表現、世界表現です。
基本的にセミナー中にメモったものを起こし直したので、 聞き漏らしたり、勘違いしているところがあると思います。すいません。
ゲームAIはコンテンツに依存しており、
ゲームの方向性に応じて、必要な技術は変化し、その蓄積によってノウハウが貯められている。
AIの技術がデザインを発展させたり、その逆の可能性もあると考えられる。
日本は、討論する場がないので、差が開いていた。
このセミナーでは、いろいろなゲームの実例を用いてAIの紹介を行う。
Q.本セミナーで取り扱うラインナップがFPSに偏っているのは?
A.公開されているのはFPSが多いから。
AIの中で一番重要なのは、周囲をどのように認識させるかということになる。
AIに周囲の状況をすべて考えさせるのは大変。
人間がヒントを与えるのが手間がかかるが確実な方法。
知識表現とは、AIのためのデータを準備してあげること。
すでにいろいろな研究がされている(依存グラフ、意味ネットワーク、etc.)。
今回は、グローバルな世界の表現を行う「世界表現」の説明をする。
たとえば、道検索のためのポイントデータ(ウェイポイントデータ)を与える。
世界表現を精密にするほど、AIができることが増え、できることが高度化する。
FPS(公式サイト)。
13人までAIが可能。マップが多彩で広い。相手も人間(モンスターとかではない)。
構造物は、ほとんど壊れない。
AIの目的は複雑で広い中を有利な場所を見つけて戦うこと。
よくあるのは、デザイナーが良い場所をデータとして仕込んだり、スクリプトによる条件反射による処理が行われる。
Killzoneは状況に応じて最適な位置を計算する。
高さや視界の広さをデータに用意して有利な場所を探す。
重み付けして一番良い点を検索したりする。
また、戦況に応じて最適な位置の検索を行ったりもする。
静的なもの(2001にやった)と、動的なもの(2005)があり、きちんと両立されているところが良い点。
Q&A
Q.実はここは変な設定で見晴らしが良いんだとか、特殊なデータを埋め込むとかはやらない?
A.やってない。一般的に行っているのが良い点
目的地が決まっていて、そこに行くには?
ウェイポイントを敷き詰めて
等間隔
地形情報を蓄積する
局所的、グループ的、他のポイントとの関係、フォーカス(偏り)
各ポイントの基本情報から抽象的な情報を抽出する
抽象的な情報をレベルデザイナーが考える
そこから必要な情報を考えて、評価関数で評価する。
たとえば、敵から隠れているかどうかは周辺のウェイポイントとの間で視線が届くかで考える。
総合的に情報を計算する。
すべての評価ポイントを足しこんで、一番良い場所を見つける
コンピュータでやらせるための手順が大変だが、一度作れば状況が変わったものをすぐ計算してくれる。
計算量が多いので、ゲームには使えないが、軽くしたのがKillzone
Q&A
Q.データの数が多くない?自動で作れない?
A.明るさや視界などは計算で求められる。あげられているものは、人間が設定するものはない。今までのものは、前計算できるものだからリアルタイムに計算するのは大変なので、やりましたということ。動的になると、人間が手で埋めるのではできないことができるようになる。
Q.抽象的な情報はどのように考える?レベルデザイナーが経験で?
A.デザイナーや企画から。正解があるものではない。
敵や味方が動く場合を取り扱う。
情報を抽出する部分が動的に変わる処理に変更される。
ウェイポイントは、グリッドではなく接続情報を持ったメッシュ
各ポイントに関して、8方向でどこまで見えるかデータを持つ。
射線判定に使う。
お互いに方向が見えていれば射線がつながる。
前もって、どこまで見えるかデータを持っているので、高速に計算できる。
キャラクタは常に動いているので、このような大雑把な計算でもOK
逆に瞬間瞬間で情報が鋭く変わるものが良いとは限らない。
具体例:敵を撃てる範囲に移動
移動する適当な候補点を近くの点として絞り込む。
攻撃したい敵の射線を計算して、各候補点に関して撃ちやすいか計算する。
他の敵から撃たれにくいか計算する。
さらに、一定距離を保つなどの最適なポイントを計算して、これを評価
最終的に評価値を足して移動ポイントを計算。
具体例;手榴弾を投げるポイントの計算
敵が移動できる位置、爆発の届く範囲、投げられる範囲、から評価を行う。
以上を用いて、広大なマップに対応したAIを実現した。
Q&A
Q.毎フレーム計算してる?
A.行動単位時間があって、5~10秒単位で計算する。ゲームデザイナーが判断。
Q.広大になると、ポイントの情報が多くなると思うんだけど
A.マップが静的なので、事前計算が大変になるだけ
Q.メモリが多くならない?
A.方向に関する距離だけもって、ポイント相互のデータを持っていないので、ポイント数にリニアに消費するだけ
Q.どうやってポイントを決めてる?
A.障害物を避けて2mおきにランダム。デザイナーが調整している可能性あり。
Q.高さのあるマップに対応できる?
A.高さ情報込みでテーブル化しているので、OK
Q.気づかれているかどうかを持っている?
A.わからない。撃たれたら気付くぐらいでは。でないとチートっぽい。
Q.立体交差への対応は?
A.マップが存在しているので、対応していると思う。
Q.最適解を利用する?完全にポイント上だけの位置を考える?
A.ポイントからの位置のずれは考えてなさそう。
Q.扉を貫通する武器とかは?
A.ほとんどのものが壊れないので、そういうものは考慮してなさそう。
Halo2では
Killzoneでは、8方向に関する距離だが、Halo2では戦術的位置を埋め込んでいる。
Halo2はあるゾーンの中をAIが移動する。
エリアの概念が存在する。
隠れるためのオブジェクトに関して、ポイントをグループ化して、
ここは隠れるのに適さないと思ったら別のグループに移動。
クロムハウンズでは
ポイントなく3角形で考えている。
水とか砂地とかの属性を持たせて、最短時間経路を計算。
障害物の破壊に応じてメッシュデータを更新して、状況変化を実現。
こんな感じで自分のゲームへ応用できるよ
Q&A
Q.どうやってフラグの評価をしている?
A.地形に応じて歩く速さが決まっているので、それで評価
Q.ものが壊れたらパスの計算やり直し?
A.してない。それより、パスがあっても実際に達成できない場合があり、「あまりに時間がかかっていたらパス検索しなおし」とか、「がけから落ちてしまったらパス検索しなおし」とかのタイミングで再計算している。
Q.上り坂とか判定していない?
A.足が遅いので、重要でないと判断し勾配による処理は入れていない。
Q.仲間の位置関係を見ている?
A.ゴール思考プランニングで処理している。目的自体を組み替えることで対応。
ゲーム製作の長さが1-5年なので、基本設計をする機会は、この周期でしかない。
機会が少ないので、かかわれる人が限られてしまう。
フロムでは、週1回ディスカッションしている(今は60回ぐらい)
企画さんと一緒に行っていて、新しいゲームデザインの創造を模索している。
成果は社内メールやwebで情報公開している。
モチベーションを高めるのにも役立つ(今回のセミナーは、それの全日本版をやりたいとおもって企画した)。
KZのAIを自分のゲームに取り込ためには?
どうやって取り組むか?
抽象化:そのままでは使えない。自分のCOMにさせたいことは?どんな追加情報が埋め込めそう?デザインの設計にAIを考える。如何にして単純化するか(認識モデルの設計の工夫が大事)?
制限の取り除き:
条件の違いから発展:
制作工程を考える:
今まで、どんなものに世界表現が組み込まれていただろうか?
ピクミンがどうかねぇ?必ずしも統一的な動きじゃないよねぇ。
パスファインでリングは工夫してるんかもね。行動は人間ほど知能が見えない。攻撃しろと言われたからしている感じ。
->じゃ、それを高度なものに置き換えられれるかなぁ
ピクミンはAIを前提にしているからかマップが平坦。立体にするのは?
PS2上の制限が取っ払われるので想像つかない方向が在るのかなぁと思う。
パワーがあがって、今までは、静的に作っていたと思うが、それを動かすのを楽しむゲームが作れるのでは?
ポピュラスと同じじゃない?プレイヤーのなした結果を取っとくのが大変かな?
それをとっとくと面白いかも知れない。
それを世界中で共有して、攻略本が役に立たないゲームがあると面白そう。
世界表現が変化するのを学習してAIが進化するのは?
「学習」は企画と技術者でイメージが違いそうだけど、皆さんの意見は?
データ取っとくという話は、ゲームをデザインするゲームをするということになる。
AIも発展できる余地を残しておかないと。
世界表現を変えるのは、最初は動かすとゲーム性が変わるというイメージだった。AIが変わることは考えていなかった。足していくというよりは変化させていくという考えだったが…
巨人のドシンがそんな感じかな?地形を変えると村人に感謝されるとか?
それは世界表現?スクリプトではない?
ポピュラス、ブラックアンドホワイトとかもそんな感じ?
自由度を増やしたときに制御できるかが難しくなる。
つまらなくなるのでは?AIも進化できないと意味ないよね。
クロムハウンズも評価関数をかなり工夫してうまく行っていた。
ユーザーから見れば馬鹿でバグにしか見えなきときもあるよね。
動くものがあるときは、避けるよりもごり押しするほうが良かったりとか在るよね。
それを考えると、結局は無限大のバリエーションに陥るんじゃ
評価関数で対応できるんじゃない?
つまらないことがあったときに評価関数を低くするとか。
シーンが変化すると評価関数で対応できないんじゃない?
メタにすれば対応できるのでは?
GAで対応は可能?GAは状況が決まっている中での対応しかできないのでは。
学習は、学習していくのが目に見えるのは楽しくなる。
GAの遺伝子を更新するときにランダムで入れて対応する手があるのでは。
メタの話をするときりがない。
大戦略も同じような感じなのかなぁ
それほど変化するわけではないし、使っているかもね。
補給車とかあるし、少なくとも使えるのかなぁ
人間の心情を決定するのに世界構造が使えるかなぁ
日本的な発想で良さそう
うまいデータ構造が大事ですよね。
どんなデータを用意すればうまくいくか考えるのが面白いところ。
デバッグの前にモデル化が…そもそものデザインやプランニングが大事だよね。
それを考えないで、変化させても無意味。
KZもAIが人間サイズが前提で、それをうまく使っている。こういうデザイン的なうまいことをやっている。
作るほうとしては自由度を高めると、バグの温床になるのでは?
テストコードを書くと思うが、あれって気休めだよね。
重要な値を調べると価値があるけれど、それは職人技。
ある数理モデルがあって、論理的な検証法で適切なパラメータ範囲を検証する手があるのかなぁ?
バグを論理的に抑えられるのであればそのような道があるかなぁ。
無限の自由度があるけど、検証可能なモデルがあるのでは?
気持ち的には、どこが適切かみえているはず。なんか押さえ切れるのでは?
いままでをまとめると:
世界を変えていくことができそうだが、メタメタメタメタな話に落ちいりそう。
ゲーム内の要求に適うかが問題。ゲーム性などの問題に絡んでくる
お題を変えて、他の発展の方向はない?
とにかく、今回のことを盛り込んで、他のゲームにいかせれば良いと思う
ディスカッションは話が飛びまくりでついていけなかったので、今回のまとめは変なものになってしまいました。
私は、A*をマスターしていないような未熟者ですが、なかなか楽しめました。