Cyber_F的レースゲームTA考 | Cyber_F の雑記帳

Cyber_F の雑記帳

Twitterだと書ききれない話題等を書く予定です。よって更新日は不定期。
ミニ四駆、グランツーリスモ、車なご、ドリスピその他

Twitter: @cyberf0112358

 僕のTwitterの過去ツイートを漁ればわかるが、基本的にCyber_Fという人間はプレイしているレースゲームでタイムアタックがあると開催母体がゲームの製作・運営陣だろうとほかのプレイヤーであろうと首を突っ込む人間であるということはご理解いただけると思う。今回は「TAで良い結果(=速いタイム)を出すと」いうことについて考えてみようと思う。

 

"限界"は決まっている

 ここで少し僕の思想めいたものを開示すると、"少なくとも我々がこの宇宙空間(いうまでもなく、地球もその一部だ)に存在している以上、物理法則に反した運動はしないしできない"というのが大前提にある。

 我々がレースゲーム、あるいはレースシムと呼んでいるソフトウェアもその現実の物理法則を計算によって再現している(これを"simulate"という)にすぎない以上はゲーム上のクルマ達もこの物理法則に反する挙動はできないハズであり、開発者の味付けや単にハードウェア上の制約などによってアレンジされているとしても同じバージョンならば同じソースコードのコピーである以上は異なるプレイヤー間で異なる挙動をする、ということはありえない。また同様の理由でコースの形状やクルマにかかわる(セッティングで変更できる領域を超えた)物理量も同一である。

 

速い/遅いプレイヤーの差

 となれば必然的にゲーム、コース、クルマの条件をそろえれば理論上のタイムは一意に決まるはずである。しかし、現実には速いプレイヤーと遅いプレイヤーの別が存在し、ランキングを見れば我々のような凡人のタイムの横にはトップとの差が正の実数として表示される。

 ではランキングトップの走りとランキング3桁で一喜一憂する我々のそれは何が違うのか?前段で述べたような理由から最速のラインどりは一つに決まるし、そうなれば必然的にアクセル/ブレーキやステアリングなどの操作を行う位置や量も決定する。それを正確に再現できるならば最速不倒のタイムは簡単に出る。下記の記事はAI(人工知能)がグランツーリスモSport上でどの"生身のプレイヤー"よりも速いタイムを出した、という物だが、なるほどコンピュータならばその手の"作業"は得意だろう。実際に記事中で紹介されている動画を見る限り、AIの最速タイムと1周目を除いた最遅タイムの差は0.1秒以内に収まっているのに対し生身の人間であるTG氏のそれは1.3秒程開いている。

 しかし、トッププレイヤーに属するとされるTG氏が上記の記事で述べている通り、我々生身の人間にはそれはほぼ不可能である。以前に僕がグランツーリスモSport上で行い、Twitterで公開した実験もそれを示している(詳細は以下に示すリンク先のスレッドを参照されたい)。

 

 

 

 

AIに近づけ

 以降ではもう少し具体的な例を出しながら考察を深めていこうと思う。題材とするのはこの記事を執筆してる2020年9月現在、Code Masters社のDiRT Rally 2.0上で開催中のDiRT Rally World Series 2020だ(所謂e-Sportsというヤツである)。

その中で、今回はRally Cross Round1 3rd Weekの舞台となったLohéac-Bretagne/RX S1600 のタイムを例に用いたいと思う。ちなみにこのコースの僕のベストラップタイムは0'34.825だ。以下、避けえぬロスタイムであるスタンディングスタートによるロスとラリークロス特有のジョーカーラップによるロスは足して3.5秒ジャストとして考える。

 さて、前述のとおりベストラップタイムは僕ができる範囲で"完璧"な走りをしたタイムとする(最終セクターでコンマ数秒落としているし、全プレイヤー間の最速からは1.5秒近く遅れているが無視する)。さて、6周すべて完璧な走りをしたとすれば上記の避けえぬロスも併せて3'32.450でセッションを終えられる計算になる。しかし、実際に僕が出した記録は3'38.270である。

 どこで6秒もロスしたのか?実はどこか1か所で6秒ロスした、というわけではなく、ばらつきによるロスが積もり積もって6秒になった、と考えるほうが妥当であるし、実際にスピンなど1回で6秒失うようなロスは発生していないが、コーナーでインにつけなかったりという小さいミスを多数犯している。

 では、仮にスタンディングスタートとジョーカーラップを無視したとして、「すべて0'35.000にそろえたレース」と「0'34.800が1回だけ出るが他の5ラップはすべて0'35.100、0'35.200、0'35.300、0'35.400、0'35.500のレース」はどちらが速いのだろうか?計算していただければわかるが、前者の方が1.300秒速い。

 ここでは1周40秒にも満たない短いラップタイムを一つの区切りとして考えたが、これを区間タイム、各コーナー通過タイム、コーナー入り口/中盤/出口...と細かくしていっても同様の結論を得るはずである。

 

タイムアタックと確率論

 さて、以上から「すべての操作を完璧に行う」ことができれば最速タイムを出せる、ということは理解していただけたと思う。しかしどうしても周回ごとにバラツキが出てしまうのが人間という物だ。一方、ラップタイム、言い換えれば「各ラップの完璧度合い」はある種の確率分布を持つであろうことは上記で示したグランツーリスモSport上の実験結果から推測できる。ここで一つの思考実験を行ってみよう。

 3つのコーナーからなるコースを想像してもらいたい。

グランツーリスモSportのブルームーンベイはこの例にかなり近いレイアウト。

ここではコーナー1つを単位として考え、各コーナーを完璧に決められる確率をそれぞれ70%、20%、60%としよう。このコースにおいて完璧な周回を刻むことができる確率は

0.70*0.20*0.60=0.084

より8.4%ということになる。つまり理論上、10周もすれば最低1回は最速タイムを出すことができる。

 先に提示したAIの記事中のTG氏の

「深層学習モデルは非常に攻めた走りをしますが、これは正確なアクションができるからこその芸当だと思います。技術的には私も同じ軌道を走ることができますが、1000回中999回は壁に車体をこすってしまい、タイムを台無しにしてしまうことでしょう」

というコメントも同じように考えられる。つまり、極端に言えば「1000周アタックを行えばAIと同じ(=理論上の最速タイムが出せる」ということである。しかし、人間には集中力と体力に限界がある。

 

我々人間がタイムを向上させる方法

 となるとより現実的な策としては完璧にこなせる確率を上げる、つまりTG氏のコメントを借りれば「1000回中999回は壁に車体をこすってしま」うのを「1000回中900回」「1000回中800回」...と減らしていくことである。それを実現するための方法として考えられるのは

 

1.各操作を行うタイミングを明確にする目印を決める

2.上記1.で決めた目印を確認してから実際の動作を行うまでの時間をなるべくそろえる(必ずしも速くする必要はない)

3.各操作量を一定にする

 

という3つが考えられる。

 実は"初心者向け"とみなされがちなドライバーアシストはこれらに焦点を絞ったものとみることができ、例えばグランツーリスモSportにアシスト機能として実装されている「走行ラインアシスト」のパイロンマーカーはまさに上で言う1.を容易にするものだし、オートブレーキやオートドライブは2.と3.に作用するアシストといえるだろう。

100m看板の下に見える縞模様のパイロンがアシスト機能でブレーキングポイントを示すために置かれる目印。

さらにはTCSやABSといったアシストも2.と3.に寄与するかもしれない。

 

There is no "Silver Bullet"

 しかし往々にしてゲームとして採算の取れるレベルのアシスト機能はトッププレイヤー達の操作には遠く及ばない物であるから、彼らと同じレベルで戦おうとすればアシストが行っていた物をそれ以上の精度で行う必要が生じる。そしてこの精度というものは一朝一夕に身につく物ではないから、結局何千、何百という周回と失敗を繰り返す必要がある。ここでいう「失敗」には単にタイムが伸びなかった、という以外にコースアウトやクラッシュも含まれる。幸いレースゲームならばたとえ200km/h近い、あるいはそれ以上の速度で壁に突っ込んでも失うのはゲームに使える時間のみであり、ボタン操作だけでリトライできる。

 個人的には所謂スポ魂モノ("スポーツ・コンパクト"ではない)に出てくる熱血教師が振りかざすような精神論や根性論の類は"嫌い"の中でも上位に位置するのだが、結局はそのような結論に至らざるを得ない。どうせならばお気に入りのクルマで楽しみながら気楽に行こう。

GTSメイン機のNSX Gr.3。12,000km走ったがタイム的にまだランカーには程遠い。

 

 最後に、スマートフォン向けゲーム「車なごコレクション」(現在はサービス終了。復活してくれ)で個人的に最も"お気に入り"のキャラクターであるところのホンダ・ヴェゼル女史(通称"ヴェゼ姉")のセリフを掲示し、筆を置く。