フレームレートのお話


ゲームのメインループ、フレームレートのお話です。

フレームレート固定 / 戻る / トップページ


フレームレート固定

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

戻る