ゲーム内の絶対時間はフレーム数だよ

 ゲームのシステムを語るならゲームのシステムとはどんなものかについて多少は理解しておいた方がいい。

2009-08-22

 ゲーム内時間とリアル時間の差に文句を言っているけど、ゲーム内では通常フレーム数で時間をカウントする。だからリアル時間で何分だったとしても、ゲーム内時間はひとしく平等に与えられる。一般的にゲームは1秒間に60回画面を書き換える。モニタがそういう仕様だからそれに合わせて描き換える。*1この1回の書き換えの間にやれる操作は一緒。まぁボタンを押すか離すかだ。1/60秒以内でのボタンの操作はゲームが感知できない。だから連射速度の限界は秒間30連射。画面の描画タイミングに合わせてON/OFFをするシンクロ連射装置というのがソレ。

 スーパーマリオエミュレータで1/2の速度でプレイしたとしても、2倍速でプレイしたとしても、ゲーム内の絶対時間は変わらない。TIMEが100でクリアできるステージは等しくTIME100でクリア可能。もっとも倍速とかじゃ人間側の反応が追い付かないだろうけど。*2

 1秒=60フレームで、あるクエストのフレーム数が10分×60秒×60フレーム=36000フレームだったとしたならば、普通は10分ちょうどでクエストが終了するハズだ。しかし、ゲーム内絶対時間であるところの1フレームが常に正確に1/60で進んでいるかと言うと例外ケースがある。処理落ちというやつだ。

 ゲームは1/60でコントローラの入力情報を取得し、プレイヤーやら敵やらの動きを計算し、さらにポリゴンの全ての計算を終え、テクスチャマッピングを変形し回転しポリゴンに張り込み、光のような半透明処理を重ねて画面を再描画しなければならない。*3これらの計算が1/60で終わらなかった場合、今回の描画はおとして次のタイミングで描画する。リフレッシュレートと言って画面の描画のタイミングは決まっていて、1/60のタイミングでしかやってこない。今週のヤンマガに載ってなかったマンガは1日遅れの増刊号が発刊されて載るということは決してなく、翌週のヤンマガに載る*41週空きができるわけだ。同じように画面描画に1/60の空きができることがある。

 PCのゲームなどはモニタのリフレッシュレートが一定しない*5ので、割と好き勝手なタイミングで画面更新を行ったりしてるけど、コンシューマゲームの場合は機械に合わせて描画するのが普通。

※以下の記述は詳細が判明する前の時点での推測である

 さて、件のモンハンだけど、処理落ちによるゲーム内絶対時間とリアル時間のズレというだけじゃないかと僕は思う。あるいは通信ディレイでの待ちとかも発生しているのかもしれないけど。複数人でプレイしている時にどこかのマシンで遅れが出たら、みんなで遅れを待って時間を調整しないとどんどんずれが大きくなる。*6そういう見込み時間があらかじめ入れられているのではないかと思うのだ。

 だから、ソロプレイの場合は比較的そうした待ちの発生が少なく、ゲームの進行はつつがなく進むのだろう。あらかじめ遅れを見込んで巻いていたら、予定より早く終わりました、というわけだ。そうはいってもゲーム内の絶対時間であるフレーム数は不変だろうから、ゲーマーに与えられたチャンスはひとしい。

 まぁアレだ、ちょっとずつ時間がずれたところで人間には知覚できないんだよ。うるう秒時報だって比較しないと分からないだろう?
うるう秒のNTT時報 - ニコニコ動画

 鬼の首でもとったかのようにバグだとか騒いでないで、せっせと狩りに精を出せばいいと思うよ。

補足

 このエントリでは一般的なゲームのフレームレートである秒間60フレームで計算している。モンスターハンターシリーズは通信同期しやすいためだか知らないが秒間30フレームの設計らしい。描画の処理落ちよりも通信同期の関係の処理落ちの方が大変なのかもしれないね。

 今時のゲーム機はハードに時計が組み込まれているため、現実世界の時間も取得できる。*7なので、開始から終了までの実時間を表示させることもできる。じゃぁそれを使えばいいじゃないって?はたしてそうだろうか。

 ゲーム内での絶対時間である36000フレームでクエストをクリアした場合、処理落ち、通信ディレイによるウェイトがまったくかからない理想的な状態でリアル時間は10分間(60フレーム換算)だが、同じ36000フレームでクリアしても状況によっては10分以上の時間がかかる。

 例えばリプレイのような機能があったとして全く同じプレイをした場合、実時間側の時計で測るとタイムが伸びたり縮んだりする。実時間の時計で計測するということはそういうこと。ゲーム内10分=リアル時間10分だということは、ゲーム内のフレーム数を削って調整しているということを意味する。

 システム設計的な視点で言えば、見えない不公平と、時計とずれることで不公平に見える公平とどちらがいいか、ということだろう。

補足2 変動フレーム

 ブクマで変動フレームの話が出ていたので少々。

 変動フレームというのは、ゲーム進行の基準となるフレームは維持しつつ、描画フレームを変動させる処理だ。

 変動フレームではない場合、処理落ちした場合、描画できなかったフレームを次の描画タイミングで表示させる。マガジンの休載に例えたが、休載した回の話を次号に繰り越して掲載する方式だ。休載することで話の進みは遅くなる。処理落ちしてゲーム全体がスローがかかったようになるのをイメージすればいい。

 変動フレームの場合、休載した号の話を掲載せずに次号ではその次の回を掲載する。1話飛ばすわけ。1話飛ばすことで、物語は進んでいるけども、そのネームを絵にしてペン入れベタ塗りトーン貼りをするような手間をざっくりカット。遅れを取り戻すというわけだ。プレーヤーにはそこの絵は描画されないが、物語は進んでいく。描画部じゃないところで処理が追いつかない場合はどうにもならいけどね。ストーリーが詰まってしまうと変動フレームでは連載ペースを復活させられない。

 なお、一人プレイのゲームは自分の都合だけを考えればいいので変動フレームにしてごまかすことができるけども、通信プレイを実装する場合、通信ディレイなどで発生した待ち時間はみんなで揃って待つより仕方がない。遅れたのが描画じゃなくてストーリーの部分だからだ。複数マシン間でのゲーム内時間のずれは変動フレームで描画レートだけおとしてゲーム内時間を進める方式では同期できない。

 PCゲームのバトルフィールドとかは実時間が基準になっていて、低スペックのマシンでプレイすると秒間数フレームという状態でプレイする羽目になる。他のプレーヤーが秒間60フレームで操作する中、低フレームでプレイするとまともに操作できなくてあっさり殺される。低スペックな奴がいるからってゲーム内世界の時間の進みを遅らせれるかよ!ってことで低スペックな奴は死ね!という非情な設計。

 方式はいろいろ。メリットもデメリットもいろいろ。

補足3 面倒な奴はここだけ読め

  • - モンハンの時計は実世界の時計とは進み方が違う
  • 実際のフレーム数は変わらないだろうから平等。安心して狩りをお楽しみください。

*1:それより速く書き換えてもモニタに表示されないので無駄

*2:というか、スーパーマリオのTIMEってそもそも1減るのが1秒じゃないよね。アレ。そこにクレーム付ける人もいないだろうけど。

*3:プログラムをやると分かるけど、今時のゲームがやってる計算量は半端ない。ゲームを作るぞ!という意気込みでプログラムを始めた場合、彼我のあまりの技術的ギャップに絶望して途中で投げ出す人が多い。

*4:ヤンマガはあまりに日常的に休載があるもんだから最初に目次を見るようになってしまった

*5:モニタの設定で変えれる。60Hzより高く設定されている人も多いと思うよ

*6:ある程度のずれがあっても動くように設計しているだろうけど、ずれが酷くなると止まったりすることになる。だから、常時ちょっとずつずれを修正してタイミングを合わせているはず。そして人数が多いほどずれの調整が入る確率は高くなる

*7:設定されている時間というだけで本当に正しい標準時間というわけではない