ひらしょー

平山尚が技術のことを書く場所、にするつもりだったが、ネタを限定するのはやめよう。日記というか思いつきを書く。

CEDEC2018の1日目メモ

気がついたら3ヶ月も経っていた。

精神的に余裕がなさすぎて、文章を書くことに時間を使う気に全くならなかった。

 

しかしまあ、仕事にある程度の切れ目はあったし、

そのおかげでCEDECにも行けたので、メモを書いておく。

ここに書いたことに社内特有の事情を加味して会社向けの

レポートにする、という事情もあって、殴り書きの香りがする代物になると思うが、

気にしないことにしよう。

 

なお、セッションの内容については各所に記事が出ているし、

資料自体も配布されているので、それをここに繰り返すことはしない。

思ったこと、考えたことだけ書く。

それと、3日分まとめて書くとたぶん長すぎるので、日ごとに分割する。

 

https://2018.cedec.cesa.or.jp/session/detail/s5b1e23aaede0a

 

宮本さんの話。

 

レベルデザインのツールを企画に渡してプログラマと企画の関係を薄めたら、

企画単独でいろいろできすぎて何がいいのかわからなくなった。

そこで、いくつかのパラメータをプログラム埋め込みにして自由度を削り、

また、企画がプログラマと話をせざるを得ないようにした」

みたいな話があった。時代に逆行しているのかもしれないが、

私もその方がいいと思う方だ。

もし企画やアートにUnityを使わせるのであれば、

UIを制限してできることを減らしたい。

このご時世にその考えは古いのかもしれないし、

異論も多かろうが、前もって「その製品では何をやらないのか」

がはっきりしていないと迷走の危険が増す。

そして「何をやらないのか」は言葉だけでなく、

開発工程によっても表現されるべきだ。

でないと、絞り切れない。ある程度の規模のものを作るなら、

その製品固有の制約を前もって設計しておいた方がいいと私は思う。

 

そういえばスマホの話題が多かった。

DSなどでいろいろやったが、結局世の中はスマホになってしまったし、

今はそういう時代だ、という認識が強かったように思う。

客は嫌々ハードを買う、という言葉を今の時代にあてはめれば、

スマホは買わなくていいわけだから理想そのものだ。

現にハードを作って売っている会社がそこから目を背けていないのはすごいし、

そのことをああいう場ではっきりと話すというのもすごい。

 

全体に「面白いものを作る」と「商売」のバランスがすごいなと感じる。

商売が面白いし、面白いから商売になる。

ゲームは商品である、としてアート扱いしていないのは私は共感が持てる。

ゲームは商品だ。商品であることは何ら恥じることではない。

 

「同じようなものを作ると倍の苦労をする」という台詞にはしびれた。

パクったものを再現した上に、そこに独自の差別化を入れなくてはならない。

そんな苦労をするならオリジナルを作る方が楽だ、と言う。

なかなか言えることじゃない。パクッた方が楽だと普通は思う。

しかし、実際問題、オリジナルは大変な苦労としてゲームを発明しており、

その過程では相当な試行錯誤がなされている。

その過程をすっとばしてパクった所で、パクり切れないのだ。

オリジナルが持つ面白さに及ばない。

その状態で新要素を入れようとするものだから、

「なぜオリジナルがその要素を入れなかったのか」

ということに考えが及ばず、余計なものを足してゲームを崩してしまう

ことになりやすい。人が認識できる大きさには限りがあり、

何かを足すならばその分削らねばならないはずなのだが、

大抵は足すだけになってしまう。

よく考えもしないで新要素を足し、面白くならず、不安なのでまた新要素を足し、

というようなことを繰り返すと、どんどん焦点がぼやけていくし、

出来の悪い要素がゲームを汚していき、

そして当然のことながら時間と人数を浪費することになる。

宮本さんに限らず、多くの人が「足し算より引き算」

というようなことを言っているのだが、

多くの現場では実践されない。その理由を考えることは大切かもしれない。

 

https://2018.cedec.cesa.or.jp/session/detail/s5ab4926f6d350

 

セガのAI利用話。AI話は他にも聞いていたので、

そのことも混ぜつつ書く。なのでこのセッションのことばかり書くわけではない。

 

ゲームでAIを使う用途はいろいろあるが、一つには検査がある。

一人用のステージを作った際に、それが想定する強さで問題なくクリアできるか

検査したい、というようなことだ。

キャラや武器、スキルといったものの構成は無数にあり、

それらでちゃんと想定通りにクリアできるか、あるいは想定以下であれば

ちゃんと負けるか、といったことを検査するのは相当に手間がかかる。

テストプレイという奴はとにかくコストがかかるものだからだ。

なので、そこを自動化したいという欲求は常に出てくる。

 

しかし、これが簡単ではない。

まず、さまざまなキャラから選んでパーティを組む、みたいに

準備に創意工夫があるゲームだと、どのキャラを選ぶか、

どの装備を選ぶか、みたいなところにすでに難しさがある。

企画が想定していない強い組み合わせがないか知りたい、

みたいなことになると、キャラを選ぶところにAIが必要だ。

ランダムで全通り試す、とかいうことは普通は不可能で、

ちゃんとキャラの相性や特性を把握して選ぶ相当賢いAIが必要になる。

 

そこに加えて、実際に操作する余地が大きいゲームであればその操作の

賢さ、上手さも必要になる。ランダム操作では、

ダメージを食らう前に回復するような事が起き、

ちゃんと人が操作するよりも弱くなってしまうので、正しく見積れない。

 

スマホの場合、ゲームで客に要求することが大きすぎると

「難しいゲーム」になってしまって売れないので、

普通はやることを減らして設計する。

例えば、キャラを選んで編成する比重が高いのであれば、

実際の戦いはオートにしてしまう、というようなことだ。

実際の戦いがオートなのであれば、すでにそのオートのプログラムはあるので、

操作に関して別のAIを作る必要はない。

オート操作しかないのであれば、人が介入することは元からできないので、

そのオート操作が上手かどうかを気にすることはできない。

この場合は、編成を自動化するAIさえあれば済む。

しかし、編成も大切で、実際の操作の上手い下手の大切、

というようなことになると、両方のAIが必要だ。

さすがに大変なので「編成はいくつか用意して固定。他の編成は無視」

という選択になることも多かったように思う。

それなら操作だけで済むが、この操作のAI化は結構難しいはずだ。

 

セガスマホメガテンではそこをやっていたとのこと。

ニューラルネット(NN)でAIを構成し、NNを遺伝的アルゴリズム(GA)で鍛えるという。

NNでやるならそのままNNで学習させればいいのにとも思うが、

そのためには、個々の行動について「正解」が必要だ。

人が操作したデータを「正解」として、それに近づける学習はできるが、

それだと予想外の行動をしなくなってしまうので検査が弱くなる。

人が思いつかない選択肢で勝ててしまう、というようなことが起こるかどうかを

知りたいのであれば、正解を前もって与えたくはないだろう。

それでGAが出てきたのだと思う。

テキトーなパラメータでたくさん作って戦わせ、

成績がいいものを残し、その間でパラメータを混ぜて、

また戦わせる。

 

なお、NNの実装は自前とのこと。

画像認識のように何万何十万のデータが入力されるわけではなく、

NNの実行時間自体はさして長くない。入力ノードはたかだか数百だ。

隠れ層一層なので総ノード数も少ない。

GAのためにバトルを回す時間の方が支配的であり、

tensorFlowを使ってGPUで実行する、というようなことは不要だったとのこと。

C#で実装してPCで動くクライアントにつっこんだようだ。

 

https://2018.cedec.cesa.or.jp/session/detail/s5ac0e28614177

 

データ分析の話だが、よくわからなかったので書くことはない。

ただ、

スマホゲーム各社、基本的に水着キャンペーンとかやると思うんですけど」

とおっしゃっていて、「いや、そんな常識みたいに言われても」

と思った。パワポの背景も胸と尻な感じの水着キャラ画像で、

いいのかなあ感。CEDECには女性開発者も多く来るし、

学者さんとかも招待していて結構いる。

あんまりそういうノリは良くない気がする。

 

https://2018.cedec.cesa.or.jp/session/detail/s5a9c9f23a9c0a

 

流体力学つっこんで炎のエフェクトを出す話。

GeForceGTX1080で1msとかかってて、まだ我々には早いなという印象。

スマホに持っていったらそれだけで1フレーム丸ごと持っていかれるだろう。

品質は文句なさそうな感じだが、強いて言えば煤の描画には

まだ工夫の余地がありそうな雰囲気はあった。

 

そういうわけで、また今度かなという思いはあるのだが、 

ああいう技術は無理にでもつっこまないと感じがわからないので、

無理矢理製品につっこめる場所を作る方が良いのかもしれない。

「なんでここの炎だけこんな妙にリアルなんだ?」みたいなことになっても、

まあいいんじゃないだろうか。

流体力学は動的計算できるといろいろと使えることがわかっていて、

使い回し感がないエフェクトをいろんなパラメータのバリエーションで出せる。

パラパラアニメで用意する伝統的なやり方だと、リアル感はないし、

容量は食うし、バリエーションを作ろうとするとそれだけ手間がかかる。

実装は大変でも、一旦動いてしまえばパラメータ設定だけ

でいくらでも生成できるわけで、できればそういう方向に行きたいとは思う。

 

https://2018.cedec.cesa.or.jp/session/detail/s5adda2d837027

 

「弱いロボット」。たぶん、今回一番考えさせられたし、

5年経っても10年経っても覚えていると思う。

 

自動販売機が「アリガトウゴザイマシタ」とか言うことはあるが、

驚くほど心に響かない。そこに「コミュニケーションした感」がない。

銀行のATMも、いちいちキャラ絵入れて動かして、

声まで出してるが、「それ意味あんの?その工数正当化できんの?」

と毎回思って腹を立てるくらい、伝わった感じがない。

あの先生はそれについてずっと考えて、いろいろ実験している人だった。

 

これをどうにかするアプローチには二つある。

一つは人に似せればコミュニケーション感が出るだろ、というアプローチ。

人そっくりにすれば、人っぽくなる。石黒先生のマツコロイドとかで、

足し算のアプローチと呼んでいた。

もう一つは、コミュニケーションの必要条件が何かを見極めて、

そのギリギリを作る。引き算のアプローチ。

 

ゲームデザインでも足すと金がかかるし焦点がぼやけるので、

私は引く方が好きだ。しかし、引き算が滅多に行われないのは難しいからで、

実際問題「何があればコミュニケーションしてる感が出るか?」

という問いはそう簡単に答えられない。

 

いろんな実験があったのだが、説明しやすいものとして、

ゴミ箱のロボットがある。自分で移動するゴミ箱なのだが、

手がないので自分では掃除ができない。

人の近くにヒョコヒョコ寄っていって、揺れているだけの代物だ。

しかし、人の方がつい気になって、ゴミを入れてあげてしまう。

つまり、人間がこのロボットの機能の一部として設計に組み込まれている。

そして人は、なんとなくいい気分になる。

 

ここには「コミュニケーション感」が確実にある。

人は何かをしてあげたくなり、事実して、いい気分になる。

 

もう一つ。目を合わせている間しか情報を出さないスマートスピーカーがある。

カメラを積んでいて、人間の視線が自分を向いていないと「えーとね」「うーんとね」

という具合になって話が進まない。気まずいのでロボットの方を向くと、

「今日は花火大会なんだよ」的な感じに話をしだす。

実用性があるかどうかはさっぱりわからないが、しかし、

「なんか気まずい」と感じた段階で、「コミュニケーション感」

が生じているということだ。合成音声が子供風で無視すると罪悪感が起こりやすい

作りになっている、というようなこともあるが、

それだけではないだろう。

 

「言葉自体の意味を削ぎ落としていくと、関係から意味が出てくる」

と話していたが、なるほどそういうことかもしれない。

無言の時間。仕草。「えーと」「うん」「そっかー」のような

意味の薄い言葉。そういったものが関係を作り、

関係の中から意味が現れてくる。

完結しない言葉に内的な説得力が宿る。

完結した、切り出して意味が伝わる言葉には、内的な説得力がない。

わかる。私に足りない奴だ。

 

さて、ゲームに応用するには?と考えるのがもったいないくらい深いテーマ

だと思うのだが、ゲーム屋なのでゲームに応用することを考える。

わかりやすいのは、AIと対戦なり協力をした時に、

どういう挙動をしたらAIを単なる支配や攻略の対象でないものにできるか?

という課題だ。そしてさらに言えば、

対戦なり協力なりのゲームにおいて、

「人とつながってる感」をより強く感じさせるには何をやればいいのか、

ということにもつながる。ネットの向こうにいる人に「つながり」を感じるには、

ゲームにおいて何が起こればいいのだろうか。

それがわかればAIにもコミュニケーション感を出させることにもつながる。

 

「人の参加する隙間をデザインする」という言語化は深い。

協力ゲームであれば、一人で完結しないようにゲームデザインするのは基本だ。

戦士と僧侶と魔法使いが組んで初めて勝てるように作る。

しかし単なる有利不利を超えて、感情を動かすような何かがそこにあれば、

単に「いいタイミングで連携できた」とか「回復してもらった」

とかいう以上のことが生まれるかもしれない。

 

具体的にどうすればいいのかはまだ何も実験していないのでわからないのだが、

「不完結な言葉」というのは大きなヒントである気がしている。

ゲームにおける行動は何bitかに収まる程度のデータだ。

「ここへ動く」「この魔法を打つ」といったデータは、

言わば「完結した言葉」だ。誤解のしようがなくそこに意味がある。

調整の余地がない。

しかし、移動の軌道が妙に揺れているとか、

行動と行動の間の間隔が変に長いとか、

そういうことで何かが伝わることもあって、

それはどちらかと言えば「不完結な言葉」だ。

そこに内的な説得力が宿るのだとしたら、

そういったものがもっとたくさん伝わったらいいのではなかろうか。

例えばスマホゲームであれば、タップの頻度をなんとなく送信して、

頻度が高いほどモーションが早回しになる、とかだと、

なんとなくテンションが伝わるだろう。

内側カメラで顔認識して視線方向を認識して、それでキャラの顔の向きをいじっても

いいかもしれない。何かしら、それ自体では意味がない情報を、

絶えずやりとりし続けていたら、何かが伝わらないだろうか?

そこに気配が感じられたりはしないだろうか?

 

https://2018.cedec.cesa.or.jp/session/detail/s5aab888dcd265

 

自動パラメータ調整でAIな話。

 

一人用のステージ作って、それが想定通りの強さでクリアできるか調べる、

ということで、セガの話とだいたい似ている。

テストプレイの手間を削りたいというのが動機。

すでに運用して遊んでる人がたくさんいるので、その操作ログを教師にして

機械学習しようとしたが、ログがAIに使うことを考えてなかったりして、

その路線は頓挫したらしい。

元々オートプレイがあるゲームなので、

とりあえずは勝手にゲームをグルグル回す機能を作ることで

手間の問題はおおむね解決できたようだ。先にそれを試すべきでは?と思う。

いくつかキャラや装備の編成を作っておいて、

描画をスキップしながら高速にバトルを回す機能を作れば、

少なくとも手動で試すよりは相当マシになる。

それをやる前に機械学習を試すのは違和感があった。

セガは実プレイデータを教師にせずにGAで学習させていたが、

そのアプローチの方が筋がいい気がする。

 

次に、対人のテスト。

このゲームの対人は、「自軍を編成して置いておくと誰かが戦いに来る」

という放置ゲー(あるいは非同期対戦)で、問題はどの編成にすると強いか、だ。

新キャラや新装備が出てきた時にバランスが崩れないか、

といったことを試すには、自軍を編成して戦闘を繰り返すところを

自動化しないといけない。

まずはその自動化の手段として画像認識でボタンを押すのを試したとのこと。

しかし、メニューが半透明で認識がうまく行かなかったりして、頓挫。

結局、各コマンドをCUIのシェルみたいなものから叩く口を作ったとのことだが、

なぜ画像認識から始めるのかよくわからない。

なお、編成そのものをAIにやらせる、という話ではなく、

どのような編成にするかは手で与えたということでいいんだろうか。

流行っている編成がいくつかあるので、それに関して試すと。

 

最後がボス戦のテスト。各ボスには「こういう編成で来るべき」

的な編成があるらしく、その編成だけテストすればいい一方、

人が操作しないと勝てないように作りたかったので、

操作をAIでやる必要がある。

そこでベイズ最適化でAIを書いた。

お手本の操作があるわけではないので、

ニューラルネットワークというわけにも行かなかったようだ。

セガがやっていたようにGAでの改良という手もあったかもしれない。

どちらがいいかはわからないが、GAは数学全然わかってなくても実装できる

という利点はあるなと感じる。

 

この取り組みはプロジェクトの外にいる専門家が一時的に

チームに入ってやったそうで、

妙に高度な技法を先に試しているのはそのためっぽい。

画像認識とかやってみたかったんだろう。

中の人がやっていたらそういうノリにはならないよなあ。

 

チームをまたいだ分析チームみたいなのがある会社は多いのだろうか。

チームの中には大抵そんな余裕ないし、専門性が高いことは専門チームにして

プロジェクトをまたいでやった方が使い回せて効率がいい。

しかし、専門家が「ドメイン知識」と呼ぶもの、

つまりゲーム固有の知識は無視できないほど大きい。

一人用の難易度が想定通りになっているか?

みたいな話は、「あくまでダメなステージを探す検査」

とわきまえて使えばいいのだが、

それが面白いかはまた別の話だ。

AIがステージをクリアした時に、人があまり取らないやり方で

クリアしていれば、それは新しい攻略が見つかったということで

そこには価値があるのだが、人が自然に思いつかないやり方で

クリアしたのであれば、普通の人にとっての難易度の参考にはならない。

結局ログを見ておかしなことが起こっていないか見ないといけないのだが、

自動で検査できるとなるとどうしてもそこがおざなりになりやすい気がする。

何せ便利な道具でテストプレイの時間を大幅削減できるわけだから、

「最低限クリアできることはわかったしいいよね」

となってしまいそうで怖い。

省力化のためにバンバン取り入れていきたいとは思うが、

いろいろ気をつけないといけないことは多そうだ。