한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

ゲームラグ白書 › L1 クライアントのゲームプロセス

V-Syncとレンダーキュー V-Sync, render queue

原因ID cg-vsync · 主担当 ゲーム開発チーム・クライアント開発 · 副担当 外部・外部

図と実験のあるメインページでこのカードを開く →

GPUが描画したフレームを何枚かキューにためておき、モニターの周期に合わせて出力する間、入力が遅れます。

なぜ グラフィックドライバーがフレームを1〜3枚先にキューにためる → すると 入力が画面に反映されるまで、その分余計に時間がかかる → 画面では Pingは低いのに、操作が重くもたつく

症状
入力遅延, カクつき
要因
遅延
誰に起きるか
自分だけ
いつ
常に
担当
主担当 ゲーム開発チーム・クライアント開発 · 副担当 外部・外部
ゲーム開発チームの対応
低遅延モードへの対応、フレームキューを減らす、リフレッシュレートより少し低く設定するフレームレート上限オプションの提供、スマホではフレームペーシング機能を有効化。
外部の対応
ユーザーに、可変リフレッシュレート対応モニターと組み合わせてリフレッシュレートより少し低いフレームレート上限を設定すること、グラフィックドライバーの低遅延モードを有効にすることを案内。
数値の目安
60Hzでは1枚あたり16.7ms。CPUがGPUや画面の周期より速く、キューの3枚(DirectX 11のデフォルト)が埋まると、50msが上乗せされます。ダブルバッファのV-Syncでは、17msかかったフレームが次の画面更新タイミング(33.3ms)まで待ち、その間は前のフレームがもう一度表示されます。
グラフでは
最初から常に高い · 入力〜画面の遅延
確認箇所
PresentMonのMsClickToPhotonLatency・MsAllInputToPhotonLatency(マウス・キーボードの入力から画面への出力まで)とDisplayLatencyを、V-Sync・低遅延モード・フレームレート上限を切り替えながら比較。MsPCLatency(PCが入力を受けてから画面に送るまで)は、ゲームがPC Latencyイベントを出力する場合にだけ記録される
該当する場合
V-Syncを有効にしたときやフレームレート上限がないときにこの遅延が1〜2フレーム(数十ms)増え、低遅延モードやリフレッシュレートより少し低いフレームレート上限では減る。Pingは変わらない
該当しない場合
PC内の遅延は低いのに操作が遅れるなら「ディスプレイ・入力デバイス・フレーム生成による遅延」、Pingが高いならネットワーク側
確認手段
ユーザー側の環境で確認
もっと詳しく
V-Sync(垂直同期)は、モニターが画面を切り替える瞬間にだけ新しいフレームを出力する設定です。ティアリングはなくなりますが、その瞬間を待つ分だけ入力が遅れ、FPSが60を下回ると60と30の間を行き来してカクつきます。可変リフレッシュレート(VRR)対応モニターは、フレームの準備ができたタイミングに合わせて画面を切り替えるため、この待ち時間を減らせます。スマホでも同じことが起きます。30FPSのゲームが60Hzの画面にフレームを均等に出力できないと、平均は30FPSなのに1枚あたりの表示時間が49・16・33msのようにばらつき、カクつきます(Androidの開発者向けドキュメントの例)。Androidのフレームペーシング(フレームの出力間隔をそろえる)ライブラリや、エンジンの同様のオプションで軽減します。

出典

  1. IDXGIDevice1::SetMaximumFrameLatency Microsoft
    ドライバーがキューにためられるフレーム数のデフォルト値は3(1〜16)
  2. Reduce latency with DXGI 1.3 swap chains Microsoft
    キューが空くまでPresentがブロックされ、描画から表示までほぼ1フレーム余計に待つことになる。待機可能なスワップチェーンで減らす
  3. Frame Pacing library Android (Google)
    60Hzの画面で新しいフレームがなければ前のフレームを再表示する。30FPSのゲームのフレームタイムが49・16・33msのようにばらつく例
  4. PresentMon Capture Application (README-CaptureApplication.md) Intel
    MsPCLatency(PCが入力を受けてから画面に送るまで)、MsClickToPhotonLatency(マウスクリック〜画面)、MsAllInputToPhotonLatency(キーボード・マウス入力〜画面)、DisplayLatency(フレームの提出〜モニターへの出力)
  5. PresentMon Console Application (README-ConsoleApplication.md) Intel
    MsPCLatencyは、アプリがPC Latencyイベントを出力しないと記録されない(--track_pc_latency)。MsAllInputToPhotonLatencyはキーボード・マウス入力が基準

あわせて読みたい原因

同じ層:L1 クライアントのゲームプロセス

同じ症状(入力遅延)を起こすほかの層の原因

図と実験のあるメインページでこのカードを見る