G-sync安定動作のためのフレーム生成上限を求める式
ここではG-Syncの話をしているが、VRR, Adaptive-Sync, FreeSyncについても同様である 背景:fpsがディスプレイの上限に張り付いている環境でG-syncとV-syncを有効化していると、ジッターによるG-syncとV-syncの切り替えが頻発し、細かいラグが発生、不快に感じられてしまう
通常のディスプレイは、PC側の準備ができていなくても「1秒間に240回(240fps)」などと決まったタイミングで画面を書き換えるため画面の乱れが起きやすい
ティアリング(横割れ): GPUのフレーム生成速度とモニターの表示速度がずれることで、映像が引き裂かれたように上下でずれて表示される
カクつき(スタッタリング): fpsが急激に変動した際に、映像がスムーズに動かず、カクカクとした挙動になる
フレーム生成にはジッターがあるため、一定間隔で生成し続けられるわけではなく、実際には微妙にフレーム生成の間隔が詰まってFPSが上昇したり、間隔が広まって低下したりする
画面の描画コストは一定ではない
例えば地上の大量のオブジェクトをカメラに収めたあとに急に空に向けるとオブジェクトが減り描画速度が急上昇する
OSやドライバはゲーム以外の負荷の影響を受けて微細なズレを引き起こす
G-syncはディスプレイ側がPCの描画速度に合わせて書き換えるタイミングをリアルタイムで変動させる技術である
G-syncはジッターによる描画タイミングのブレを吸収することができる
ただし瞬間的にディスプレイのfps上限を突破したときは対応できなくなってしまう
超えた場合、ティアリングするか、有効にしているならV-syncが動作する
V-sync(垂直同期)はG-syncの逆で、ディスプレイが書き終わるまでPCが待つ仕組み
フレームをディスプレイが書き終えるまでgpuが次のフレーム生成を止めるため、一瞬遅延が発生する
つまり G-sync + V-sync の組み合わせはフレームレートが変動するゲームにおいてティアリングを完全に抑制する仕組み
ディスプレイのリフレッシュレートよりPCのフレーム生成速度が遅いとき→G-syncによってディスプレイが歩調を合わせにいく
ディスプレイのリフレッシュレートよりPCのフレーム生成速度が速いとき→V-syncによってPCが歩調を合わせにいく
V-syncは悪者ではないがフレーム生成にブレーキをかける動作になるため、どうしても切り替わった瞬間一瞬入力遅延が生じるし、高頻度にディスプレイのリフレッシュレートの上下をフラフラする場合、不快な体験になる
というわけで本題
G-syncを安定動作させるためにはジッター込みでディスプレイのフレームレートを超えないように、それより低い内部的なフレーム生成上限を設定してあげる必要がある
この上限については議論があるが、以下がとてもよくまとまっている
FPS Caps = Refresh - (Refresh x Refresh / 4096)
本質的には0.25-0.3ms程度のフレームタイムのバッファを与えるとよいことが知られている
コミュニティによる計測とNVIDIA Reflexの挙動の分析に基づいている
1fpsに対するフレームタイムの変化は指数関数的である
116FPSと120Hzの差は0.28msで、236 FPSと240Hzの差は0.07ms
これをGPUの設定に入れてあげる
NVIDIAならNVIDIA Control PanelかNVIDIA Appsから