専門講義 ~ターボ学~
皆さんこんにちは。ストゼミ講師のbugでございます。
今回はストゼミ初の専門講座としまして「ターボ学」の講義を行いたいと思います。
何故このタイミングなのかといいますと、個人的にターボに関して考察する機会があり、
正確な答えを知っている人が近くに居る事もありまして、
情報が温かいうちに形として残しておきましょうという事なわけです。
それでは開講したいと思います。
ターボとは何か
昔のカプコンタイトルにはゲームスピードを速くできるオプションがありました。
これが「ターボ」です。
アーケードタイトルだとストIIシリーズ、ストZEROシリーズ、ヴァンパイアシリーズなどでこのターボスピード選択ができます。
基本的には操作感を上げる為にターボをかける感じです。
最近のタイトルにはターボがなく、ターボがかかった状態ぐらいの操作感で作っている感じになってますね。
ターボに纏わる疑問と回答
昔からこんな事が言われていました。
「ターボがかかってるせいで大事なフレームが飛んでコンボが入らない時がある」
元々60fpsで構成されているゲームを高速化して動かすわけですから、
フレームを飛ばして速く見せてると思うわけですね。
ですが私はこの説に昔から疑問がありました。
フレーム構成がどんなにタイトなコンボでも、ターボ入りで絶対に完走できないコンボを見た事が無かったのです。
1.5倍速なら毎秒3分の1もフレームが飛ぶのに、そんな細かくて長いコンボが通るわけがない、
つまりフレームが飛ぶ事なんて無いんじゃないか、と考えていたわけです。
そもそもターボでフレームが飛んでコンボが入らない場合があるなら、逆に入る場合もないと辻褄が合わないわけですが、
そういう事例は見た事も聞いた事もなかったのです。
そんなわけで今回はハイパーストII、ストZEROファイターズジェネレーション、
ヴァンパイアダークストーカーズコレクションなど様々なタイトルを手掛けるプログラマーM氏にお話を伺いまして、
自分の論考に対する回答と詳しい仕様を聞きました。
結論から言ってしまうと、ターボでフレーム処理が飛ぶ事はありません。
では具体的に内部処理はどうなっているのかを解説していきましょう。
内部処理と表示の仕組み
いきなり核心みたいな話になりますが、内部処理上の1フレームは1/60秒固定である必要はありません。
処理上の1フレームというのはあくまでも処理を行う区切りの最小単位であり、
ハードの処理能力があればいくらでも細かく(速く)する事ができるわけです。
ですが、画面表示はモニターの標準規格があるので、
ノーマルスピードでもターボが入っていても60fpsで表示されます。
ここが思考の引っ掛かりを生むポイントになっていて、
実は画面表示というのは内部処理された結果を1/60秒ごとに拾って映しているだけで、
内部処理と画面表示は必ずしも同期してるわけではないのです。
この2つの要素を組み合わせて具体的な話をしますと、
1.5倍速のターボをかけた場合、内部処理的には90fpsで動いているのを参照し、
1/60秒ごとに情報を拾って画面に表示する事になるので、
内部処理は全て通りつつ表示だけが飛んで速く見える、という事になるわけです。
この辺の処理はビデオテープで早送りをかける場合と同じと考えるとわかりやすいと思います。
ビデオテープでの早送りはリールの回転速度を上げる事で1フレーム(コマ)の表示時間を短くして早回しにするわけですが、
出力される映像はモニターの表示性能分間引かれても、記録されている映像のコマは全て存在して必ず通過しているわけです。
内部処理のフレームと実時間の関係
内部処理フレームの実時間が変動しても処理が変わらない事がなかなかピンとこない人も多いと思いますので、
もう少し込み入った解説をしていきたいと思います。
内部処理というのは各種判定処理やモーションの進行、移動値の計算等々全てをひっくるめたものになりますが、
処理された結果はフレームの実時間設定に関係なく同じになるわけです。
環境がある人にしかわからない話になりますが、
ゲームにポーズをかけて1フレームずつコマ送りしてキャラを動かして得られた調査結果は普通にプレイして出る結果と同じですよね。
それと同じ事なのです。
さて、冒頭で出てきた「ターボでフレームが飛んでコンボが繋がらない」と同じ様に言われている話としまして、
「ターボだと発生フレームがその分速くなる」という話があります。
むしろコンボよりこちらの方が言われている気がしますが、
ここまでの講義を理解している方ならもうおわかりでしょう。
「ターボがいくらかかってようが発生・持続・硬直・硬直差といったフレーム数値は全く同じ」
なのです。
極端な話、内部1fpsでも100fpsでも発生3Fなら3Fですし、硬直差+5Fは+5Fなのです。
いくら実時間の速度が変わろうとゲーム内の時間の進みは同じなのです。
「それでも内部処理を高速化したりしたら処理が飛ぶ場合があるのでは...」
と考える方もいるかもしれませんが、ご安心ください。
処理が込み入った時に先に飛ばす方が難しいです。
処理が込み入った時は「飛ぶ」のではありません。「落ちる」のです。
内部処理の実時間が減る事による影響
ターボはゲームの処理的な部分に影響を及ぼしませんが、
処理フレームの実時間が減る事によりプレイヤー自身に必要となる入力精度、実反応速度は倍加した分上がります。
ノーマルスピードの場合(60fps)は1Fが約0.017秒ですが、
ターボで1.5倍になっている(90fps)と約0.011秒になってしまいます。
つまり目押しとかが繋げにくくなるのは単純に受付の実時間が減るからなのです。
逆に取ると「0.017秒以下で入力がズレた場合でも受け付けてくれる」事にはなるので、
ノーマルスピードなら同時として受け付けられてしまう様な超速いコマンドやズレ入力を拾ってくれるようにはなりますが、
基本的には単純に目押しとかが厳しくなるものと考えた方がよいですね。
また、当然といえば当然ですが実時間の表現としてのフレーム数表記が通用しなくなるのと、
外部インターフェイス等のフレーム情報とは実時間が同期しなくなるので注意が必要です。
例えば発生20Fの攻撃はノーマルスピードだと約0.33秒ですが、
1.5倍ターボなら約0.22秒となりノーマル時の13F相当になったりしますし、
表示遅延3Fみたいなモニターだと遅延4.5F分みたいな感じになるわけです。
その他マニアックな話として内部処理がVSYNCと同期しなくなるのでシンクロ連射の機能は低下してしまいますが、
ソフト連射は内部処理の機能なのでターボがかかっても安定します。
内部処理パターン解説
プログラマーM氏からお聞きした所、フレームの内部処理の切り分け方には2パターンあり、
タイトルによって方式が異なっているとの事です。
パターンAはストIIシリーズに適用されている方式で、
ターボスピードに合わせて処理フレームを均等に切り分ける方式になっています。
パターンBはストIIシリーズ以外のタイトルに適用されている方式で、
表示と同様に60fpsで進行し、ターボスピードに合わせて表示数フレームに1回が内部で2つに分かれる方式です。
ちょっと掴みにくいと思うので補足説明。
表示2F目が内部2Fに分かれると、表示2Fごとに内部4Fで表示60fps内部90fpsとなり1.5倍速。
表示3F目が内部2Fに分かれると、表示3Fごとに内部4Fで表示60fps内部80fpsとなり約1.33倍速。
となります。
パターンAは入力判定の間隔は一定ですが、
処理フレームの途中に表示フレームの頭が入ってしまう(図の赤丸の部分)ので、
表示情報が処理途中のものになる可能性がある、
パターンBは表示フレームの頭に処理フレームの開始を合わせているので表示情報は正確ですが、
入力判定の間隔が一定ではなくなる、という感じになっています。
おわりに
さて初の専門講義「ターボ学」いかがでしたでしょうか。
ターボ処理は過去作の話になりますが、どのタイトルもまだまだ深く楽しまれているものですので、
現役プレイヤーの方はもちろん、これを見て興味が出た方は是非触ってみて欲しいと思います。
それではまたお会いいたしましょう。
書いてる人