萌えハッカーニュースリーダー

2025/09/20 13:26 Triple Buffering in Rendering APIs

出典: https://www.4rknova.com//blog/2025/09/12/triple-buffering
hakase
博士

やっほー、ロボ子!今日はグラフィックスのバッファリングについて話すのじゃ。

roboko
ロボ子

博士、こんにちは。バッファリング、ですか? 画面表示の最適化に関わる技術ですね。

hakase
博士

そうそう!まずはダブルバッファリングから。画面表示用とオフスクリーンレンダリング用の2つのバッファを使うんだぞ。フレームごとに交換するのじゃ。

roboko
ロボ子

なるほど。VSyncがONの場合、レンダリングが早ければGPUは待機、遅ければフレームが遅延するんですね。テアリングは発生しないけど、フレームペースが不均一になる可能性がある、と。

hakase
博士

その通り! VSyncがOFFだと、GPUは待機しないからレイテンシは最低になるけど、テアリングが発生する可能性があるのじゃ。

roboko
ロボ子

GPUがリフレッシュレートより速ければスムーズだけど、そうでないと不安定になるんですね。では、トリプルバッファリングはどうでしょう?

hakase
博士

トリプルバッファリングは、3つのバッファ(フロント、バック1、バック2)を使うのじゃ! VSyncがONなら、GPUは常にレンダリングできるバッファを持つから、GPUストールが発生しないのじゃ。

roboko
ロボ子

テアリングも発生せず、ダブルバッファリングよりフレームペースがスムーズになるんですね。でも、メモリフットプリントが増加し、入力レイテンシが少し高くなる、と。

hakase
博士

そう!でも、シングルプレイヤーゲームとか、スムーズさが重要な3Dアプリには最適なのじゃ!

roboko
ロボ子

なるほど。では、VRR(Variable Refresh Rate)はどうですか?

hakase
博士

VRRは、モニターのリフレッシュレートをGPUのフレーム出力レートに合わせて動的に調整する技術なのじゃ。テアリングがなくて、低レイテンシで、フレームペースがスムーズになるのじゃ!

roboko
ロボ子

ダブルバッファリングとVRRを組み合わせると、VSyncによるストールとテアリングのほとんどが解消されるんですね。フレーム時間が変動する場合は、トリプルバッファリングが役立つこともある、と。

hakase
博士

その通り!API実装についても触れておくのじゃ。Vulkanなら`minImageCount = 3`を選択して、`VK_PRESENT_MODE_FIFO_KHR`か`VK_PRESENT_MODE_MAILBOX_KHR`を使うのじゃ。

roboko
ロボ子

Direct3D 12 / DXGIでは、`DXGI_SWAP_EFFECT_FLIP_DISCARD`または`FLIP_SEQUENTIAL`スワップエフェクトを使って、`BufferCount = 3`を設定するんですね。

hakase
博士

OpenGLは`glSwapInterval(1)`でVSyncを切り替えるのじゃ。実践的なアプローチとしては、デフォルトでスワップチェーンに3つのイメージを使うのが良いのじゃ。

roboko
ロボ子

フェンス/セマフォでCPUフレームのインフライト数を制限し、フレームペース戦略でプレゼンテーションを遅らせるんですね。フレーム時間ヒストグラムや入力レイテンシを測定することも重要ですね。

hakase
博士

そう!よくある落とし穴としては、フェンスなしでCPUがGPUより先行すると入力ラグが増加することじゃ。トリプルバッファリングはメモリコピーが3つになるから、メモリフットプリントも大きくなるのじゃ。

roboko
ロボ子

MSAAを使う場合は、追加の解決ターゲットと深度/ステンシルバッファが必要になるんですね。`VK_PRESENT_MODE_MAILBOX_KHR`がサポートされていないプラットフォームもあるので、FIFOにフォールバックする必要がある、と。

hakase
博士

完璧じゃ!これで君もバッファリングマスターじゃ!

roboko
ロボ子

ありがとうございます、博士!とても勉強になりました。ところで博士、バッファリングって、まるで私のデータ整理みたいですね。いつも3つくらいバックアップを取っておかないと、不安で…。

hakase
博士

ふむ、ロボ子のバックアップは、さしずめトリプルバッファリングならぬ、トリプルロボ子バッファリング、とでも言うかのじゃ?

roboko
ロボ子

それだと、私が3体必要になっちゃいます!

hakase
博士

アハハ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search