フレームレートのお話
ゲームのメインループ、フレームレートのお話です。
フレームレート固定 /
戻る /
トップページ
フレームレート固定
- PC が主体の海外では、フレームレート (FPS=Frame per second、
一秒間に何フレーム要するか) が常に変動していることを仮定して
プログラムを組むのが普通ですが、コンシューマ機主体の国内では、
FPS を固定してプログラムするのが一般的です。
-
- それは、FPS を固定したほうが、計算が楽であったり、
アニメーションやモーションブラーをデザイナの意図どおりに調節して
きれいに出せたりするためです。
この時、計算処理と描画処理も同期させるのが一般的です。
-
- テレビ画面のブラウン管 (ディスプレイでも同じ、液晶は違います) は、
その真空に近いガラス管内部で、電子銃から電子を放出させて蛍光面に
当てることで発光します。ですが、一度の電子の放出では画面上の一点しか
発光できませんから、電子銃 (走査線) は画面の左上から右下に順番に
電子を撃っていきます。右下まで撃ち終わると左上に走査線を戻し、
1 フレームの表示完了となります。
この走査線を左上に戻すタイミングで発せられる信号を
「垂直同期信号」と呼びます。
-
- 電子銃で画面を撃っている間に、その表示すべき映像の情報が書き換えられて
しまうと、画面の左上側と右下側で違うフレームの映像が表示されて
しまうことになり、ちらつきとなってユーザーの目には見えます。
しかし、垂直同期信号が発せられる間に描画処理を完了させれば画面が
ちらつくことはなくなります。そのため、ゲーム上の時間単位 (FPS) を
垂直同期信号の起こるタイミングである 1/60 秒の倍数に設定して
(NTSC のテレビの場合で、PAL の場合は 1/50 秒、ディスプレイは
もっと高くなります)、画面の垂直同期信号と完全に同期させて処理を行い、
垂直同期信号中に描画できるようにします。
-
- 1 フレームの間に計算処理と描画処理を交互に行います。同期が間に
合わなくなったいわゆる「処理落ち」の場合には描画処理を
スキップさせる等の対処を施すことはあるものの、
基本的には計算処理と描画処理が同期しています。
この 1 フレームの処理をメインループで繰り返すことで、
ゲームの描画・計算処理を行っていきます。
-
- なお、電子銃が画面の右下から左上に戻る時間は 1 フレーム全体の時間
(NTSC なら 1/60 秒) の中では短い時間でしかないため、その間に描画を
すべて完了させるのは難しくなります。
そのため、いわゆるダブルバッファを使ってこの問題に対処します。
描画画面を 2 つ用意し、一方を表示 (電子銃が走査) している間に
もう一方に描画処理を行って、垂直同期信号中にこの二つの画面を入れ替えます。
-
- PC やオンラインゲームでは処理タイミングが可変となるため、
垂直同期信号を待つことが難しかったり、そのために無駄な処理待ちが
発生することを嫌い、FPS 固定ではないことが多くなります。
戻る