reinterpretcast

上記の例では、最初はリフレッシュ レート 0.26 Hz とフレームレート 0.2 FPS (Frames Per Second) が十分に近く、正しく表示できるように思えるかもしれませんが、デモの実行を見てみると、2 つの同期が完全にずれていて、スクリーン テアリングが定期的に発生することが明らかになりました。 ディスプレイに供給されるバッファに直接フレームを書き込むので、ディスプレイが画像を更新したいときに、まだ完全に終了していないフレームを取得するリスクがあります。 実際のアプリケーションでは、フレームレートは特定の状況によって劇的に変化することがよくあり、シングル バッファ アプリケーションのこの問題を悪化させ、スクリーン ティアリングをさらに予測不可能なものにします。 この描画方法は、フレームデータをバックバッファに書き込み、フレームが完了したときだけプライマリバッファ (ディスプレイへのビデオフィード) にコピーするものです。 これなら、ユーザーが中途半端なフレームを見ることはないでしょう? しかし、データのコピーには時間がかかるので、バッファ コピーのプロセスの途中でモニターが画像を更新することは完全にあり得ます。 この問題は、シングル バッファ テーリングとまったく同じように視覚化できます。前のデモでは、プライマリ バッファに書き込まれるピクセルがグラフィック カードによって直接生成されたのではなく、セカンダリ バッファからのコピー操作の結果としてバッファに順次配置されることを想像してみてください。 垂直同期」の略で、VSync はディスプレイが更新された直後にバック バッファからプライマリ バッファに書き込むことによって動作します。 これにより、次のリフレッシュの前にバッファのコピー操作が完了することが期待される。 これは、画面のテアリングを劇的に減少させるのに有効ですが、問題があります。

High フレームレート アプリケーションを使用している場合、VSync は通常完璧に動作します。 フレームレートはモニターのリフレッシュ レートに制限されますが、モニターがとにかくそのレートで表示されるため、問題ありません。 問題は、ディスプレイのリフレッシュ レートよりも低いフレーム レートを達成した場合です。

75 Hz のモニターで 60 FPS を達成したとすると、フレーム バッファはリフレッシュ レートの 80% で更新されていることになります。 VSync が有効な場合、フレームはリフレッシュ レートを細分化してスクリーン バッファにコピーされる必要があります。 この場合、アプリケーションは1サイクルおきに「締め切り」を逃すので、結局、リフレッシュレートの半分がフレームレートとなります。 37.5 FPSです。 これは、グラフィックス カードが達成できる 60 FPS を大幅に下回ります。

Double-Buffered VSync の TL;DR は、リフレッシュ レートより常に高い FPS を達成する場合、画面テアリングを減らすには良いアイデアかもしれませんが、FPS がディスプレイのリフレッシュ レートを下回る場合、VSync は大幅に FPS を減らす可能性があるということを意味します。

Triple Buffering + VSync

The Holy Grail of this whole mess is usually triple buffering with VSync.これは、トリプル バッファリングと VSync を組み合わせたものです。 ダブル バッファリングでの VSync の限界は、セカンダリ バッファをプライマリ バッファにコピーする適切なタイミングを待つ時間が原因で、フレームレートが大幅に低下する可能性があることです。 待機は、回避できるコンピューター サイエンスではしばしば素晴らしいアイデアではないので、ここでの解決策は、単に別のバッファを追加することです。

3 つのバッファで、2 つのバック バッファは交互に描画できるので、常に、1 つのバッファが完了し、1 つは進行中というケースになります。 これは、モニター更新の直後に、現在完了しているいずれかのバッファをプライマリ バッファにコピーできることを意味し、前に説明したフレームレートの欠点なしに VSync の利点を提供します。 これは、グラフィックカードによって直接使用される高速メモリであるため、場合によっては、トリプルバッファリングによって、ネイティブVRAMの不足を補うために高レイテンシRAMが使用され、FPSが大幅に低下する可能性があります。 通常、3つ目のバッファによって占有されるメモリ量はVRAMの合計サイズに比べて小さいことが多いため、これは大きな問題ではありませんが、2つのバッファのみを使用するVSyncは、非常にニッチなケースでより良いフレームレートを提供するかもしれません。 一長一短ですね

コメントを残す

メールアドレスが公開されることはありません。