序
「フレームレートとリフレッシュレートは同じもの」と言っている人がいたので、説明しようと思う。
両者は似てはいるが明確に違う概念であり、実質同じ意味になる場合も極めて稀だ。 なので「同じもの」というのは混同が見受けられ、省略した言い方にしても非常にまずい。
ここでしっかり解説しておこう。
なお、普段は映像生成プロセッサを持つものを「ビデオカード」という呼び方で統一しているが、今回は「グラボ」と表記する。
フレームレートとは
フレームレート(frame rate)は言葉としては「フレーム」と「レート」に分けられる。
このうち、「レート」は「時間あたり(の量)」を意味する言葉として使われている。 フレームレートは一般にfps、リフレッシュレートは一般にHzが使われるが、どちらも秒間あたりの回数を示す単位であり、このレートは「時間(秒)あたりの回数」として使われている。
では「フレーム」とはなにかというと、「絵」(画)である。
セル画のアニメーションを考えて欲しい。 この場合、絵の数はセルの枚数に等しい。 秒間24枚で、5分のアニメーションだとすれば7200フレーム存在するということになる。使い回さなければだが。
これを「コマ」と表現するが、動画データにおいても同様だ。 ただし、セル画のアニメーションの場合は基本的にはセルを等間隔で表示するという前提である。 対して、動画のほうは動きの粗密に合わせて秒間のフレーム数を変更する場合がある。 「秒間のフレーム数が変わる」は「1フレームあたりの表示時間が変わる」でもある。 これを「可変フレームレート」=VFR(Variable Frame Rate)という。
VFRの場合、1秒あたりのフレーム数の変動よりは表示時間の変更と見たほうが正確である。 というのも、1秒区切りでその中に何フレーム配置するかを等間隔に分けているわけではなく、1フレームごとに長さが変動しているからだ。
VFRでない(CFR=Constant Frame Rate)である場合、フレームレートは1秒をその数だけ均等に割った長さになる。 つまり、24fpsであるとき、1フレームの長さは約41.666ms(=24/1000ms)である。 ちなみに、動画データとしては有理数として格納されることが多く、再生時は場合によっては浮動小数点数として扱うようになっている。 つまり、フレームの長さは秒間何フレームであっても均等である。
録画時のフレームレートは3種類ある。 ひとつは格納する動画データのフレームレート。24fps CBRなら常に24fpsになる。
ふたつめは、入力された映像データをフレームに変換するフレームレート。 映像データをスクリーンショットするようなイメージでいいだろう。秒間に何回撮れるかということだ。 これは「秒間あたり何回変換しろ」という指定をすることもできる。ただ、指定したところで間に合わなければスキップされる。
そして、動画データにできているフレームレート。 これは動画データのフレームレートより高ければ余すことなくフレームを収録できているということになる。 入力データのフレーム自体は作れていて、エンコードが間に合ってない場合はバッファにたまる。 この状態が続くといずれは出力できないフレームが発生する。この場合は、VFR化して不均一なタイムスタンプを設定したり、既に生成できている前のフレームを繰り返したりして、帳尻を合わせる。
そしてゲームの場合を考えてみよう。 ゲームの場合は映像ソースがなく、絵を作る必要がある。 ゲームにおけるフレームレートとは、そのまま「絵を作った秒間の回数」を意味している。
表示する絵がなければ表示はできない。 ゲームの場合はこれを演算して作る。絵を作るための演算は常に行われ、これによって動きを表現することができるわけである。
絵の生成に演算を伴うため、絵の生成時間はばらつきがある。 このため、ゲーム描画におけるfpsは秒間を均等に割ったものではなく、1秒間に作れた絵の数の実績である。
ゲームにおいてフレームレート制限をした場合。 例えば60fps制限となった場合、1/60秒は約16.66ms。 対して直前のフレームを出力するのに12msかかったとすると、4.66ms待機してから次のフレームの生成に取り掛かる。 これにより、およそ指定されたフレームレートに近づくわけである。 また、この仕組み上越えることはないが足りないことはある。60フレーム目の生成に時間がかかれば、間に合わずに59fpsになってしまうのだ。
リフレッシュレート
リフレッシュレートは更新周期である。 リフレッシュレートも色々あるのだけど、ここではディスプレイだけの話に限るとする。
ディスプレイは周期的に画面を書き換える。 書き換えを行う時間は一定であるため、単位にはHzを用いる。 Hzは秒間周期の単位であり、粗密はない。
どんなに映像が出力されても画面側が画面を更新しなければそれは反映されない。 画面の更新は最終的な画面が書き換わる頻度である。
注意点として、60Hzと言った場合に本当に60Hzかどうかはブレがあるということだ。 よくあるのが60Hzと称して実際は59.94Hzというもの。 これはテレビへの対応で、NTSCのフレームレートの倍数になっている。 60Hzと59.94Hzが別に用意されている場合もある。
私が使っているS3422DWGは143.97Hz, 119.99Hz, 99.98Hz, 59.97Hzをサポートする。 ここまで「微妙にずれている」のは稀だが、こういうのもある。 24HC5QRPbmiipzxは165.00Hz, 143.98Hz, 119.98Hz, 84.90Hz, 60.00Hz, 59.94Hz, 50.00Hzをサポートする。
60Hzのディスプレイであれば、約16.66msごとに画面を書き換える、ということである。
注意して欲しいのが、この周期できれいに書き換わるということではない。 ディスプレイの書き換えは光源の状態の変更だが、変更が間に合わない場合もある。 その場合は前の画面が消え切らないため、残像が発生する。 どれくらい素早く切り替えられるかの指標が「応答速度」だ。 これはディスプレイの性能として示されるものだが、実際は状況によるため応答速度の値より猶予があれば絶対に完全に書き換わるというわけではない。
あと、映像が入力されてから書き換えを開始できるまでのラグというものもある。 これは一定ではなく、ディスプレイ内で処理するのにかかる時間だ。 それにより、出力としては間に合っているが表示の準備が間に合わないということが発生しうる。 見て反応する系のゲームでは結構重要な要素だ。
このラグの小ささはディスプレイ製品の性能指標として示されることはまずない。 理由は色々だが、定められた測定方法がない、というのが一番大きい。
ゲームにおける「捨てフレーム」
さて、ここで120fpsで描画できるグラボと60Hzのディスプレイがあるとする。
当たり前だが60Hzのディスプレイは秒間120枚のフレームを表示することができない。 つまり、生成したフレームは捨てられる。
では誰が捨てているのか。
V-syncが有効な場合、ディスプレイの更新タイミングをグラボが理解しているので、ディスプレイで表示が間に合っていないならグラボがフレームを捨てる。
V-syncが無効な場合は、グラボはディスプレイの事情を知らないので生成したものを次々に出力していく。 ディスプレイは送られた最新のフレームを表示するが、描画途中で最新のフレームが書き換わってしまうとそこから先は新しいフレームのものを描画することになる。 これで発生するのがティアリングである。
ゲームのために気にするなら
まず、「フレームレートは出す側の事情」「リフレッシュレートは受ける側の事情」と理解しよう。 それぞれ別の概念だが、実際の表示を考えるとフレームレートがリフレッシュレートよりも低いとディスプレイ側は描画する絵がないので結局カクカクする。
このあたりの性能指標が直接的に目指しているのは「映像のなめらかさ」である。 対して、FPSや格闘ゲームなどでこれらが問われるのは主に「速さ」のためである。 これらが上がれば速くなる、というのは副次的にはそうなのだが、絶対ではない。
ディスプレイで遅延が少なく絵がしっかり切り替わる、というのはリフレッシュレートでは測れないものだ。 ここらへんを気にするのであれば、実測値を掲載しているレビューサイトを参考にしたり、大会で実績がある製品を使うなどする必要がある。
あと言葉の問題としては、ディスプレイはフレームを生成したりはしないので、フレームレートという概念がない。 「ディスプレイのフレームレート」というのは「写真の音量」みたいな言葉なので違和感がすごいし、シンプルに間違っている。秒間フレーム数を表すfpsという単位という単位もそうだ。 逆に、グラボは一定の周期で映像を出力しているわけではないので、単位としてHzは使えない。これも単純な間違いだ。もちろん、更新をかけているわけでもないから、グラボにリフレッシュレートはない。
これを覚えておくと恥ずかしい思いをしなくて済む。