このページの本文へ

前へ 1 2 3 次へ

ロードマップでわかる!当世プロセッサー事情 第462回

いまさら聞けないIT用語集 画面のカクつきを抑えるG-SYNCとFreeSYNC

2018年06月11日 12時00分更新

文● 大原雄介(http://www.yusuke-ohara.com/) 編集●北村/ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

 今週のお題はG-SYNCとFreeSYNCだ。G-SYNCはNVIDIAの、FreeSYNCはAMDのディスプレー同期技術であるが、その目的とするところはおおむね同じである。

 G-SYNCは週刊アスキー、FreeSYNCはASCII.jpで過去に解説があるが、両者の違いを含め改めて解説していこう。

スタッタリングとティアリングを抑える技術

 基本的にはどちらも、解決しようとする問題そのものには代わりがない。それはスタッタリング(Stuttering)とティアリング(Tearing)という現象の解消だ。それぞれどんな現象かをまず説明しよう。

 大前提として、通常のモニター表示モードの説明である。下図がそれで、たとえばモニターのリフレッシュレートを60Hzとすると、モニターは一定期間(1/60秒)ごとに新しい画面を表示し、その間は同じ画面を表示し続ける。

リフレッシュレートが60Hzのモニターの場合、一定期間(1/60秒)ごとに新しい画面を表示する

 一方GPUは、やはり一定期間内に新しいフレームを生成することになる。だいたいはGPUのフレーム生成時間の方が短いので、これであれば別に問題は発生しない。

 問題は、GPUのフレーム生成時間が1/60秒を超えてしまう場合だ。4Kで描画品質最大でゲームをプレイしている場合、描画性能が60fpsに達しないことは珍しくない。

 下図がそれで、Frame #2の生成が1/60秒を超えたらどうなるかというと、Frame #2の表示が間に合わないためFrame #1を再表示することになる。

Frame #2の生成が1/60秒を超えると、Frame #1を再表示する

 厳密に言えばこれはモニター側の処理ではなくGPU側の処理である。通常GPUはマルチバッファ(デュアル・バッファリングあるいはトリプル・バッファリングなどが採用される)という構成になっている。

 たとえばデュアル・バッファリングでは、出力用Buffer #1と#2が設けられている。この際GPUはまずFrame #1の出力をBuffer #1に書き込み、リフレッシュ用のポインターをこのBuffer #1に指定する。するとBuffer #1の中身がモニターに転送されるので、その間にGPUはFrame #2の内容をBuffer #2に書き込む。

 次のフレームではBuffer #2からモニターに転送されるので、GPUはその間にFrame #3の内容を再びBuffer #1に書き込む、……という具合に、2つの画面出力用バッファを交互に切り替えて使うのがデュアル・バッファリング、バッファを3つにするのがトリプル・バッファリングというわけだ。

 話を図に戻すと、GPUによるFrame #2の描画処理が1/60秒を超えた場合、モニター出力用のバッファはBuffer #1のままで固定になる(Frame #2への描画処理が終わった段階で切り替わるため)。結果、Frame #1は2フレーム連続して表示されることになる。

 これは人間からみると、一瞬動きが止ったかのように感じられる。これがスタッタリングである。

 ちなみに上図の方式では純粋に1フレーム分遅延するだけだが、Frame #3の描画が間に合わない場合にはこれをスキップしてFrame #4の描画にかかるというようなアプリケーションもある。この場合、Frame #3も飛ばすことになり、動きがさらにカクカクすることになる。

GPUの描画が1フレーム以上遅延すると、さらに動きがカクカクする

前へ 1 2 3 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン