Hatena::ブログ(Diary)

プログラマーの脳みそ このページをアンテナに追加 RSSフィード

2009-08-24

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

21:34 |  ゲーム内の絶対時間はフレーム数だよを含むブックマーク

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

ゲームのシステム上、絶対あってはならないミス - くむのなんとなくきまぐれに。 自由奔放な人の日記。

 ゲーム内時間とリアル時間の差に文句を言っているけど、ゲーム内では通常フレーム数で時間をカウントする。だからリアル時間で何分だったとしても、ゲーム内時間はひとしく平等に与えられる。一般的にゲームは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時報 by UpUplod 科学/動画 - ニコニコ動画

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

補足

 このエントリでは一般的なゲームのフレームレートである秒間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:設定されている時間というだけで本当に正しい標準時間というわけではない

tamtam3tamtam3 2009/08/25 04:23 他のすべてのモンハンシリーズが、同じ問題を発生させているのならともかく
Wii版だけ起こる現象に対する言い訳とすると、その説は弱すぎると思います

NagiseNagise 2009/08/25 08:11 wiiのスペックに関して言えば「処理速度に関してはXbox並」
http://ja.wikipedia.org/wiki/Wii#cite_ref-10
PSPはPS2並みのスペックあるみたいだし、最新作を低スペックなハードで出したんだから「その説は弱すぎる説」は弱すぎると思いますね。

むしろ、過去作でリアル時間ときっちり連動しているのだとしたら、ゲーム内での絶対時間であるフレーム数が削られて調整されていたということで、むしろ不公平だったのは過去作です。
見えない不公平と、不公平に見える公平だと見えない不公平の方がよかったのかもしれませんね :-P

玉瀬玉瀬 2009/08/25 10:13 その説が正しいという事は、他のWii(もしかしたら他のハード全て?)の似たような設計のゲーム全てに等しく起こりうる現象という事になりませんか?
しかし今のところそういった現象が注目を浴びたというのはMH3が初めてのような気がします。

とおりすがりとおりすがり 2009/08/25 10:56 そんな言い訳一般人には通用しないよ。
仮にあなたの主張が正しいとして、説明書に書いておかないとおかしいでしょ。
専門知識を持ちすぎると一般常識とかけ離れてしまうんですね。

NagiseNagise 2009/08/25 10:59 プログラミング上はずれるのが普通なんです。式神の城のタイマーも処理落ちがかかればずれますし、斑鳩も処理落ちがかかればタイマーがずれます。ミスタードリラーでもそう。でも、実時間とずれても誰も気にしなかっただけ。

ゲーム内タイムを実時間の「分」とか「秒」とかの単位で表現したゲームなら通常起きます。処理落ちもしなければ通信もしないゲームだとずれないこともある。通信とかやってるゲームだと原理上は非常にズレやすい。それをどうにか手品で辻褄合わせするんです。

今回のは手品の種が見えちゃったという感じかな。

NagiseNagise 2009/08/25 11:01 僕に文句ぶつける人ってなんなの?カプコンに言いなよw 僕は言い訳してるわけじゃなくて現象を説明しているだけなのにw
「システム設計的な視点で言えば、見えない不公平と、時計とずれることで不公平に見える公平とどちらがいいか、ということだろう。」と言ってる通り。

一般人に築かれないようにすることで不公平が発生するのとどっちがいいかね?ということでエンジニア的には不公平だからゲーム内絶対時間は等しく与えるべきだと考えるだろうけど、そうするとユーザが騒ぐんだから中の人も大変だね。

通りすがりのランカ通りすがりのランカ 2009/08/25 11:27 不具合を指摘した方を批判して貶しているので現象を説明してるだけではないですね
ところでその現象は100%正しいと言えるのでしょうか?
プログラムは齧ってますが、今回の説には納得し難い部分が多いように感じられます。

うーんうーん 2009/08/25 12:00 この方ですが
ゲームバランスがこの時間で調整されてるなら問題ないともコメントで言ってますよ

ただ何を言おうともバグなのは事実ですねこれ
モンスターハンターはカウントダウン時計を別に作って挿入してるそうです

AA 2009/08/25 12:48 PS2・PSPで処理落ち前提で調整してた部分がWiiでは思ったより処理落ちしなくて早くなってるってことですよね。
今まで話題にならなかったのはPS2・PSP→Wiiのゲームが少ない、あっても売れてないから気付く人がいない。もしくはちゃんとWiiに合わせて調整してる。
ゲーム内時間が重要である程度売れたMH3ならでは。
バグとは思わないけどチェック漏れだろうねぇ。
もしかしたら処理落ちするパターンがあってそこに合わせてるとか・・・。

通りすがりのランカ通りすがりのランカ 2009/08/25 14:05 連投ごめんなさい
不具合を指摘した方のblogを読んだのですが、致命的なバグとは一言も言ってないですね
デバッグで発見出来てない事に対して致命的って言ってるみたいです。
ちゃんと読むと、在らぬ方向に広がっちゃってるんだなって事が解ります
なんかかわいそう

BB 2009/08/25 14:37 遅延で時間経過が遅くなる、っていうのならわかるんだけど
早くなるっていうのはどういう実装なんだよ!って話じゃないの?

NagiseNagise 2009/08/25 14:42 大事なことなのでもう一度書くけど「システム設計的な視点で言えば、見えない不公平と、時計とずれることで不公平に見える公平とどちらがいいか、ということだろう。」というのが私の見解。

「不具合を指摘した方を批判して貶している」ってのはどのへんでしょうかね?ちゃんと読まずに在らぬ方向に広げられちゃってる私もかいわいそうと思ってくれると嬉しいですね :-P

> ただ何を言おうともバグなのは事実ですねこれ

予見しないミスによるバグではないですよ。意図的に設計しないとこのようにはならないですから。狙い通りだとして、その仕様がいいか、悪いかは別。

モンハンのゲームバランスについて語る気はさらさらないけど、実時間とゲーム内時間はどうしてもずれる。

実時間にあわせて不公平感をなくしゲーム内時間を不公平にするか、ゲーム内時間を公平にすることで実時間がばらついて不公平感が残るか、どっちがいい?というシステム設計上の問題と考えています。冒頭にも同じこと言ったけど。大事なことなので何度でも言います。

まぁ、単位を実時間の「分」とかにしなければよかったというのはあるでしょうけどね。スーパーマリオのタイムとか実時間の秒じゃないけど「そういうもんだ」ってみんな思ってるでしょ。

NagiseNagise 2009/08/25 14:43 > 遅延で時間経過が遅くなる、っていうのならわかるんだけど
> 早くなるっていうのはどういう実装なんだよ!って話じゃないの?

遅延を見越して速くしてあるから、遅延しなかったら早く終わったって話でしょ。

通りすがりのランカ通りすがりのランカ 2009/08/25 16:02 あくまで見解であって予想に過ぎない事は解りました。

【鬼の首でもとったかのようにバグだとか騒いでないで、せっせと狩りに精を出せばいいと思うよ。】
十分批判して貶している、馬鹿にした発言だと思いますが?しかも上から発言にも見える。
これは現象説明とは全く関係ない発言ではないのですかね?
書くなとは言いませんし、その気がなかったならないでいいんですが、私にはそういった発言に見えるんですよ

通りすがりのプログラマー通りすがりのプログラマー 2009/08/25 20:11 >複数マシン間でのゲーム内時間のずれは変動フレームで描画レートだけおとしてゲーム内時間を進める方式では同期できない。
少なくとも一定範囲内に収めることは可能ですが。
これができないんだったら、PCのMMORPGやFPSは成り立ちませんね。
もちろん、モンハンがそういう方式を取ってるかは別問題ですけど。

hirohiro 2009/08/25 20:15 遅延しなかったら速く進む、なんて実装のゲームは聞いた事ないです。その分待てばいいんですから。人間ってFPSの変動には結構敏感ですから、1割もふらつくと気持ち悪く感じます。FPSはなるべく安定させるように実装するはずです。
僕もこれをバグだとは思いませんが、現象の説明としては不十分な気がしますね。

単にわざと速くしてるだけかもしれませんね。出かける前に1回プレイしよう、というときに実時間より速い分には困らないけれど遅いと遅刻するかも。

noom_snoom_s 2009/08/25 21:18 システム設計的な視点って、システムの利用者が目的を達成できることを目標として設計すべきであり、局所にスコープを当てて、いずれにしろ利用者の不利益になる択一のどちらがよいかを検討するものではないと思います。

NagiseNagise 2009/08/25 21:23 >遅延しなかったら速く進む、なんて実装のゲームは聞いた事ないです。
「見込み時間があらかじめ入れられているのではないか」と言っている通り。早送りされるなんて言ってません。
「単にわざと速くしてるだけかもしれませんね。」ということを述べているだけですね。

NagiseNagise 2009/08/25 21:24 >利用者の不利益になる択一のどちらがよいかを検討するものではない
不公平感があるだけで不公平ではないという話です。不利益の択一なんて話ではないですよ。

NagiseNagise 2009/08/25 21:25 > 少なくとも一定範囲内に収めることは可能ですが。
> これができないんだったら、PCのMMORPGやFPSは成り立ちませんね。
すでに補足2のバトルフィールドの例で取り上げていますね

とおりすがるとおりすがる 2009/08/25 21:28 元記事はソロのまま棒立ちで1割もズレがあるのに
処理落ちがズレの原因ってどゆこと??

モンハン3はそんなに処理が大変なのか

NagiseNagise 2009/08/25 21:31 >処理落ちがズレの原因ってどゆこと??
ディレイを見込んで1割あらかじめ削ってあるってこと

HHHH 2009/08/26 13:55 処理落ちではなくフレーム落ちにすれば
リアル時間とゲーム内時間のズレは解決しそうな気がしますがどーなんでしょう

HHHH 2009/08/26 13:58 変動フレームの項で書かれてましたね。すみません。

リンク元