NVIDIAがゲームにおける“遅延の少なさ”の重要性を説くイベントを開催 実際にプレイしてグラフィックスカードを当てよう!(2/2 ページ)

» 2021年12月14日 23時00分 公開
[西川善司ITmedia]
前のページへ 1|2       

おさらい:そもそも「NVIDIA Reflex」って何だっけ?

 読者の中には「『NVIDIA Reflex』って何?」という人もいるだろう。ここでNVIDIA Reflexについて振り返っておこう。

 大前提として、ゲームにおける「遅延(レイテンシー)」にはいろいろある。大きく分けると「周辺機器における遅延」「PCにおける遅延」「ディスプレイにおける遅延」の3つがあり、PCにおける遅延はもう少し細分化できる。詳しくは、後に示す図を参照してほしい。

 先述のNVIDIAの論文で扱った遅延は、「プレイヤーがゲームコントローラを操作して、そのプレイ操作結果が映像に反映されるまでの時間」である。後の図で言うところの「システムの端から端までの遅延(End-to-End System Latency)」だ(論文では、マウスのクリック操作からディスプレイ表示面のフォトダイオードが印加されるまでの遅延を計測している旨が図解されている)。

 ただし、下の図にはかなりの“うそ”が含まれている。分かりやすく示すことを意図した結果なので悪意はないのだが、もう少し泥臭い次元で解説していこう。

遅延の概略図 ゲームにおける「遅延」は複数の要素が絡み合うことで発生するものである(出典:NVIDIA)

 現代のモダンなアーキテクチャのゲームプログラムでは、「プレイ操作の入力処理」「各種ゲームロジックの処理」「シミュレーション処理」「GPUに伝送する描画コマンドの生成」……などなど、CPUが担当する各種処理系は非同期かつ並列で進行する構造になっていることが多い。加えて、GPUが処理する「映像の描画」と「映像のディスプレイへの送出」も、CPU側の処理系とは非同期かつ並列で行われることが多い。

 「なぜ同期させないの?」と思うかもしれないが、それは互いに依存関係が発生しない限りは、徹底的に並列処理させた方が全体のパフォーマンスが良くなるからである。逆に、各種処理系が同期して逐次実行されるようにすると、ある処理系における処理に時間が掛かってしまうと後段の処理にも遅れが生じるため、全てが遅くなってしまうのだ。

 それに対して、NVIDIA Reflexは描画処理である程度の逐次処理を許容することを根本的な思想として持っている。

 モダンなアーキテクチャのゲーム(特に「DirectX 12」ベースのもの)では、フレームに登場するオブジェクトの描画を司る「GPUへのコマンドリスト(命令書)」は、CPUが同時並列的に複数のバッファメモリ(レンダーキュー)に書き出すように設計されている。GPUを常に稼働状態にするため(≒GPUに一瞬の暇も与えないようにするため)に、バッファメモリにためられた描画コマンド群は隙あらば発行される。CPUは他のゲーム進行処理と非同期かつ並列してこの処理を行っている。

 “GPU視点”に立って見ると、GPUはCPUで行われている処理を気に掛けることなく、混在して送られてくる「描画に時間の掛かるフレーム」と「それほど時間を掛けずに描画できるフレーム」をどんどん処理していくことになる。もしも「描画に時間の掛かるフレーム」を連続して処理することになると、プレイヤーのプレイ操作が反映された映像が描画されるまでに“タイムラグ”が生じるが、GPUは休みなく描画することになるのでフレームレートは最大化される

Reflexオフ NVIDIA Reflexを無効にした場合のゲーム進行処理のパイプライン(イメージ図)。ゲームの各種進行処理(Sim N)が行われてから実際に映像が描画/表示されるまでの待ち時間が長くなるものの、GPUは休まず動作することになるため、フレームレートが最大化される(出典:NVIDIA)

 タイムラグを低減させるためにフレームレートを多少犠牲にしてでも“同期”を行う――これがNVIDIA Reflexのメカニズムの正体である。

 まず、休む暇も与えないように積み上げられていく指令書、すなわちレンダーキューを「1フレーム分のみ」に制限してしまう。こうすると「描画に時間の掛かるフレーム」が発生した場合にフレームレートが低下してしまうが、代わりに直近に指令された描画は確実に実行されることになる。

 加えて、NVIDIA Reflexでは、CPU側で行われるゲームの各種進行処理が始まるタイミングをシステム側に伝達する仕組みも用意されているため、各種進行処理が過剰に進まないように描画/表示処理を制御できるようになっている(ただし、ゲームプログラム側で明示的に命令する必要がある)。簡単にいえばCPU側の進行処理を意図的に遅らせることもできるということだ。この辺りの考え方は、AMDの「Radeon Anti-Lag」と似ている。

Reflexオン NVIDIA Reflexを有効化した場合のゲーム進行処理のパイプライン。レンダーキューを直近の各種進行処理(Sim N)専用のものと割り切る(制限する)ことで、描画と表示が逐次処理化される。これにより遅延は低減される一方で、GPUを幾分か遊ばせることになるためフレームレートは低下する(出典:NVIDIA)

 そうなると「Radeon Anti-Lagとの違いは何?」と疑問に思う人もいる思うので、簡単に解説しよう。

 Radeon Anti-Lagは、ゲームを“改造”することなく遅延を軽減できる技術だ。DirectX 9〜11ベースのゲームで幅広く利用できることが特徴で、新しい「Radeon Software」ではDirectX 12ベースのゲームでも利用できるようになった。一方で、OpenGLベースのAPI「Vulkan」を使うゲームには対応しない。

 対して、NVIDIA Reflexはゲーム側でも対応が必要となる。古いゲームにおける遅延低減効果はないが、DirectX 12ベースのゲームに加えてVulkanベースのゲームにも組み込めるようになっている。ゲームに組み込むという特性から、ほぼ全てのReflex対応ゲームにはゲームオプションにReflexの有効/無効を切り替える項目が用意されている。初期値は「無効」であることが多いので、Reflexを使いたい場合は「有効」にしよう。

Valorant FPSタイトル「VALORANT」のゲームオプションにおけるNVIDIA Reflexの項目。Valorantを含めて、対応ゲームのほとんどは初期設定でNVIDIA Reflexを「無効」としているので、有効にする場合は設定を変更しなければならない

NVIDIAコントロールパネルの「Low Latency Mode」には要注意!

 ややこしいのだが、GeForceシリーズの「NVIDIAコントロールパネル」には「Low Latency Mode」という設定項目がある。「『低遅延モード』ということは、NVIDIA Reflexの設定かな?」と思うかもしれないが、先述の通りNVIDIA Reflexの有効/無効は対応ゲームのオプションから切り替えることが原則だ。つまりLow Latency Modeの有効/無効は、NVIDIA Reflexの有効/無効とは連動しない

 「ではLow Latency Modeとは何なのだ?」ということになるが、これはレンダーキューを意図的に縮小することで描画遅延を抑えるモードで、NVIDIA Reflexに対応しないゲームでも利用できる。ただし、CPU側で実行されている処理には介入できないため、Reflexほどの効果は得られない。筆者も「ストリートファイターV」を始めとする幾つかのゲームタイトルで実験したことがあるが、ほとんど測定誤差レベルの効能しかなかった。

 ところで、Low Latency ModeとNVIDIA Reflexの両方を有効にした場合はどうなるのか気になる人もいるだろう。答えは「NVIDIA Reflexが優先される」である。豆知識として覚えておくといいだろう。

コントロールパネル NIVIDAコントロールパネルの「Low Latency Mode」は、NVIDIA Reflexの設定項目ではない。ややこしいが、別の設定だと思っておくと混乱しないだろう
前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

アクセストップ10

最新トピックスPR

過去記事カレンダー