入力ラグ軽減でPCゲームの反応速度アップ!? 「Radeon Anti-Lag」の効果を検証

文●加藤勝明(KTU) 編集●ジサトラハッチ

2019年08月30日 14時00分

「Radeon Anti-Lag」を使えば“見て反応”がより楽になる?

PCゲーム、特に反射神経の速さが求められる“eスポーツ性”の高めなタイトルで勝ち上がるには、様々な努力の積み重ねが必要となる。ゲームの知識やプレイヤースキルといった(人間側の)ソフト面は当然として、ハード面でも積み重ねが必要になる。反応を良くするためにPCスペックに余裕をもたせ、マウスやキーボード、液晶ディスプレーを高性能なものに変えるなど、様々なアプローチが存在する。

AMDがRadeon RX 5700シリーズと同時に発表したRadeon Anti-Lagもそのひとつと言えるだろう。PCゲームのグラフィック描画処理において必ず発生するタイムラグを少しでも減らし、ディスプレー表示とゲーマーの入力操作のタイミングを近づけるための機能だ。

今回はこのAnti-Lagがいったいいかなる機能か、そして実際のゲームにおいていかほどの効果を発揮するのかを検証してみたい。Anti-Lagがeスポーツシーンにおいて有効な選択であれば、Radeonを組み込む理由がまたひとつ生まれたことになる。

AMDによるAnti-Lagのインフォグラフィック。フレーム単位でプレイヤーの反応が競われるようなゲームでは、Anti-Lagを効かせるとラグが最大31%低減するとうたっている

Anti-LagはDirectX 9/11ゲームのみで発動する

まずはAnti-Lagを使うための前提条件を確認してみよう。AMDの公式情報によると、以下の条件を満たしている必要がある。

  • GPU:GCNベースのRadeon以降(HD 7700シリーズ以降)
  • OS:Windows 7または10
  • API:DirectX11&DirectX9(RX 5700シリーズのみ)
  • ドライバー:Radeon Software 19.7.1以降

これを見て分かるとおり、ここ数年のRadeon系であれば、Anti-Lagは利用することができる。Radeonはビデオカードでも良いし、現行AthlonのようにAPUとして実装されているものでも良い。そして公式情報にはあえて明言されていないが、CPUはRyzenでなくとも良い。インテルのCoreプロセッサーでも動作する、という点にも注目しておこう。

だが一番重要なのはゲームが利用するAPIの方である。Anti-Lagは基本的にDirectX 11のゲームでのみ利用できるが、(現時点では)最新のRX 5700シリーズに限り、DirectX9のゲームでもAnti-Lag対応となる。

だがここでひとつの疑問が出てくる。最新ゲームはDirectX 12やVulkanのように、より低レイテンシーなAPIを使うものが増えている。DirectX 11と12が選択できるゲームでもDirectX 12の方がパフォーマンスが出る場合も多い(マルチGPUだとDirectX 11の方が有利になることもあるが、その話は脇へ置いておく)。つまり今後より使われるだろうDirectX 12に非対応な時点で、Anti-Lagは有用といえないのではないか? と考える人もいるだろう。

だがeスポーツシーンの中心にいるゲームでは、DirectX 11ベースのゲームが大多数を占めている。完全にDirectX 11が時代遅れとなるまでは、Anti-Lagは有用なソリューションといえるだろう。

Anti-Lagを利用するには、最新のRadeonドライバーを導入したうえで、Radeon設定の「ゲーム」へと進む。各ゲームのプロファイル内にAnti-Lagのスイッチがある(左)ので、有効にしたいゲームごとに設定しよう。グローバル設定(右)では、Anti-Lagを有効・無効化するホットキーのみが設定できる
Radeonの録画機能「ReLive」を導入していれば、ゲーム中に[Alt+Z]キーでオーバーレイを出し、「ゲームの操作性」タブからAnti-Lagを有効にすることができる

Anti-Lagが短縮する“ラグ”はいかなるラグか?

ではAnti-Lagはいったいどんな“ラグ”を短縮してくれるのか簡単に解説しておこう。PCゲームの処理は、まずCPUがプレイヤーの操作を受け付けたり、攻撃の当たり判定といったゲームのロジックに関係する処理を行ない、その結果どういった画面を出すかで決定する。次にGPUがCPUが算出した情報に基づいて実際に画面をレンダリングする。

つまりCPUが処理を始め、GPUが描画を終えて画面に表示されるまでが1サイクルとなる。今回は話を簡単にするために、GPUのレンダリング終了とともに映像が表示されるとしよう。つまりV-Sync無効、あるいはFreeSyncなどのVRR技術を有効にしている状況だ。

かなり乱暴だがゲームの処理の流れはこんな感じになる。まずCPUがフレーム1の処理を行ない、続いてGPUが処理を行なう。Aの映像を見て操作Aを実行しても、それが映像Bとして反映されるには、間に1フレーム挟んだ後になる
GPUの処理時間(GPUのフレームタイム)が長くなると、操作が映像に反映されるタイムラグがさらに長くなる

上図で赤色矢印のタイミングでプレイヤーの操作を受け付け、黄色矢印のタイミングで画面が表示されるとしよう。プレイヤーはAという映像が表示されると、それにリアクションするために操作Aを入力するが、図から分かる通りAとは、Aが表示されるずっと前に処理されたCPUフレームでの状況を反映したものであり、画像Aを見て入力した操作Aが実際に画面に反映されるのは映像Bである。

プレイヤーの反射神経という要素を除外して考えたとしても、常に画面から得られる視覚的入力に呼応するレンダリング結果を得るためには、一定の時間が必要になる。この時間をAMDは「インプットラグ」と呼び、Anti-Lagを利用することでより短くできると提唱しているのである。

Anti-Lagが一体何を行なっているかについては、具体的な資料は提供されていない。だがAnti-Lagの動作原理とは、単純にCPUの処理するタイミングを調整するものらしい、ということは分かっている。

要するに入力を処理するタイミングをドライバー側でギリギリまで遅らせることができれば、プレイヤーの目からは入力に鋭敏に反応するように見える。敵のアクションを見てから反応するタイプのゲームにおいて、インプットラグの短縮は非常に重要なのだ。

実際Anti-Lagをオンにするとゲーム中のCPU占有率はわずかに増える。CPUの処理タイミングを後ろにずらすということは、それだけCPUの処理時間が長くなる。占有率が増えるのは当然の帰結となる。

Anti-LagはCPU側の処理を少し遅らせることで、ギリギリまで入力を受け付けるタイミングを後ろにずらせば、操作が実際に画面に反映されるまでのインプットラグを短縮させることができる
Anti-Lagを無効にした状態(左)と有効にした状態(右)でのCPU占有率の違いを「Apex Legends」で比較してみた。Anti-Lagを有効にすると、ややCPUの占有率が増えている

CPUの処理タイミングを調整してインプットラグを減らすというAnti-Lagの仕組みは、それがそっくりそのままAnti-Lagの利用制限につながる。Anti-LagがDirectX 12非対応なのはDirectX 12のゲームではドライバー側の工夫でCPUの処理に介入することができない(ゲームプログラム側が一連のグラフィック処理を制御する)ためである。

さらに言えば、Anti-Lagが効くのはゲームの処理において「GPU Bound」なシチュエーションに限られる、ということだ。GPU Boundなシチュエーションとは、グラフィック描画においてGPUの性能が律速になっているという状況。逆にCPUのパワーが足りない「CPU Bound」な状況では、CPUの処理タイミングを調整するAnti-Lagは意味をなさないというわけだ。

CPUのコア数が少ないのにCPU負荷の高いゲームを遊ぶような状況では、「CPU Bound」な状態になりやすい。この状態でAnti-Lagを使っても、CPUが律速になっているため、効果が得にくいということだ

どのようにインプットラグを計測するか?

GPUのパフォーマンスは「3DMark」を始めとするベンチマークを回せば知ることができる。ではインプットラグはどう計測すればよいか?

答えは簡単で、ゲームを起動しマウスボタンの押下から画面にアクションが反映するまでの様子を動画として撮影し、それを分析すればよい。一番わかり易いのはFPS系タイトルでマウスボタンを押下してから、ゲーム側で発砲処理が始まる瞬間までの時間を見ることである。

実際の検証に移る前に、今回筆者が利用したやり方を紹介しよう。完全な力技ではあるが、Radeon RX 5700シリーズのレビュアーズガイドにも記載されている順当なやり方のひとつである。マウスの改造を伴うが、これにより故障を含めた何らかの損害が出たとしても、筆者や編集部は一切の責任を負わない。完全な自己責任の下で実行していただきたい。

1.マウス:ロジクール「G300s」+LED+ボタン電池など

マウスの左ボタンにLEDを取り付け、ボタン押下でLEDが点灯するように改造する。ただLEDを左ボタンのスイッチに接続したとしても、マウスの電力では十分な光量が得られないため、電池も組み込んでおく。設置環境にもよるが、LEDには長め(30cm程度)のリード線をつけ、マウス左ボタンを担当するマイクロスイッチに回路をハンダづけしよう。

改造を伴うのでハイエンドなゲーミングマウスを使うのは適さない。筆者は安価かつ性能もほどほどに高いロジクール G300sを利用した。LEDの+極(アノード)につながるラインとスイッチ側のー極(GND)に接続すると、スイッチを押下した瞬間にLEDが点灯する。今回は1個で3Vの電圧が得られるボタン電池(CR2032)を使用したが、一般的な1.5V乾電池2本を直列に接続しても問題はない。

LEDは以前買っておいたものを利用した。スペックが忘れてしまったがCR2032で点灯したので順方向電圧が3V程度、電流が15mA〜20mA程度で点灯するタイプだと思われる。一応LEDの+極側に電流制限用のCRDをいれておいたが、330Ω程度の抵抗でもよいだろう
電池はLEDが点灯すれば何でもいい。今回はパーツ箱に転がっていたCR2032用の電池ボックスを利用した。電池の+極側がLEDの+極側になるようにリード線で結線する。リード線は長めにしておこう
G300sの基板を取り出し、左マウスボタンのスイッチから出ているピンを探す。スイッチのー極(GND)からスタートし、電池ボックスのー極から+極→LEDの+極からー極→スイッチの+極(Vcc)とループになるように配線しよう。電池を入れるとLEDが常時点灯しボタンを押したときに消灯するが、この状態でPC本体に接続すると押したときに点灯するようになる

2.デジカメ:オリンパス「Tough TG-5」

操作の模様を動画で撮るためのカメラは、ハイスピード撮影が可能で、フレームレートがしっかり把握できているものを選ぼう。iPhoneの標準カメラのスロー撮影機能は、途中でフレームレートが変化するので避けたい。

今回はオリンパス製のTough TG-5を利用した。もっと高フレームレート撮影ができるカメラもあるが、TG-5なら640×360ドット時480fpsで撮影できるのでスペックとしては十分だ。

3.液晶ディスプレー:GIGABYTE「AORUS KD25F」

インプットラグの計測はGPUでレンダリングした映像を遅滞なく表示できるディスプレーが必須。リフレッシュレート60Hzの製品では遅すぎる。なるべく高リフレッシュレートのディスプレーがほしいところだ。

今回はGIGABYTE製のAORUS KD25Fをピックアップ。240Hzの超高リフレッシュレート対応なので、今回の計測にはうってつけだ。

ディスプレーの中心近くにLEDをテープで貼り付け、FPSの銃口とLEDが同時に入るようにカメラをセットアップする。カメラで録画を始めたら改造したマウスの左ボタンを押して発砲し録画を止める。これを必要なだけくり返すのだ。

今回の計測環境。ハイスピード撮影すると解像度が下がるのでカメラのポジション決めが重要。1つの検証条件につき15回位は撮影して、上手く撮れた映像12回ぶんをピックアップして解析した

4.動画編集ソフト:Adobe「Premiere Pro CC」

最後に撮った映像を分析する。動画プレイヤーや動画編集ソフトで読み込み、LEDが最初に光ったフレームから、画面に発砲エフェクトが描画される時のフレームまでのコマ数をカウントする。そのコマ数の実時間を換算すれば、インプットラグが求められる。今回はPremiere Pro CCを使ったが、1フレーム単位でコマ送りができるものであれば、どんなソフトを利用してもよい。

ただゲームやシチュエーションによっては、発砲エフェクトが分かりづらい、あるいはほとんど見えないこともある。また連射できる武器を使ってしまうと2発目のエフェクトを拾ってしまうので避けておきたい。発砲エフェクトが見づらいサプレッサー付き銃は避けるとか、銃口をなるべく暗い場所に向ける、といった細かいノウハウも必要になる。

Premiere Pro CCに撮影した動画を読み込ませて解析。タイムコードではなくフレームナンバー表示にすると作業が進めやすい

Apex Legendsを利用した計測例。807フレーム(左下スミ)まではLEDは消えているが、808フレームで点灯しているのでここがクリックの瞬間。そして826フレームで銃口に発砲エフェクトが描画された。インプットラグは826-808=18フレームという結果になる。480fpsで撮影したうちの18フレームなので18/480秒、これを1000倍してミリ秒単位にした37.5msがインプットラグになる

「Rainbow Six Siege」の場合、常に発砲エフェクトが完璧に表示されるわけではない。上図のように画面の下の方に少しだけ表示される場合もかなりの確率で観測された

筆者がこれまでベンチマークに使っていた「OCAT」でもインプットラグ(正確にはドライバーラグと呼ばれるもの)を計測できるが、8月上旬時点でなぜかOCATのリポジトリが消滅しており、開発の中心になっていたGPUOpenからもOCATに関する記事が軒並み削除されてしまった。

RX 5700およびRX 590でインプットラグを検証する

それでは今回の検証環境を紹介しよう。ビデオカードはRX 5700とRX 590の2つを準備した。GPU Boundな状況で効くのであれば、パフォーマンスの低いRX 590の方で効果があることが予想されるからだ。もちろんRX 590と最新のRX 5700でインプットラグが違うことも考えられる。今回はそのあたりをチェックしたい。

さらに比較対象として、ZOTAC製のRTX 2070およびGTX 1660カードを準備した。厳密ではないが、パフォーマンス的に近いGeForceと比べてAnti-Lagの効き具合を調べたい。GeForceには明確にラグ対策と銘打たれている機能はないが、NVIDIAはドライバーの設定で「レンダリング前最大フレーム数(PreRender)」を「1」に固定することでAnti-Lag相当の働きになると表明している。Anti-Lagと比較して効果があるのかないのかにも注目したいところだ。

ドライバーはRadeonは19.7.5、GeForceは431.68を使用している。マザーのBIOSはAGESA 1.0.0.2 AAB対応の「F5l」で検証している。

検証環境
CPU AMD「Ryzen 7 3800X」(8コア/16スレッド、3.9~4.5GHz)
マザーボード GIGABYTE「X570 AORUS MASTER」(AMD X570)
メモリー G.Skill「F4-3200C16D-16GTZRX」(CPU定格で運用、8GB×2)
ビデオカード AMD「Radeon RX 5700リファレンスカード」、ASRock「Phantom Gaming X Radeon RX590 8G OC」(Radeon RX 590)、ZOTAC「ZOTAC GAMING GeForce RTX 2070 MINI」(GeForce RTX 2070)、ZOTAC「ZOTAC GAMING GeForce GTX 1660 AMP 6GB GDDR5」(GeForce GTX 1660)
ストレージ GIGABYTE「GP-ASM2NE6200TTTD」(NVMe M.2、2TB SSD)
電源ユニット Silverstone「ST85F-PT」(850W、80Plus Platinum)
CPUクーラー Corsair「H110i」
OS Microsoft「Windows10 Pro 64bit版」(May 2019 Update)
GeForce系の場合、NVIDIAコントロールパネルにある「レンダリング前最大フレーム数」を「1」にすることで、ラグを最小限に押さえることができる

では検証の内容を見てみよう。今回は「Apex Legends」「Overwatch」「PLAYERUNKNOWN'S BATTLEGROUNDS」「Rainbow Six Siege」の4タイトルで検証した。Anti-Lagの効果を見るために、ドライバーのデフォルトの状態、VRR(FreeSyncもしくはG-SYNC)を効かせた状態、インプットラグ対策(Anti-Lagまたはレンダリング前最大フレーム数1設定)を有効にした状態、VRRとインプットラグ対策両方を有効にした状態の4パターンでテストした。リフレッシュレートはディスプレー側最大値である240Hzとし、V-Syncはどの条件でも無効とした。各条件においてそれぞれ12回の計測を実施した。

以下のグラフはゲーム別に、全12回の平均値を比較するためのものである。どのゲームも解像度はフルHD、画質は一番上になるように設定した。OverwatchとRainbow Six Siegeはレンダースケールを100%(ドット等倍)としている。

Apex Legendsの平均インプットラグ。トレーニングステージにおいて計測

今回の検証で最も劇的な効果が得られたのはApex Legendsだった。RX 590環境では、Anti-LagもFreeSyncもない状態では極めてインプットラグが長いが、Anti-Lagを有効にすると3分の1近くまで短縮。ただFreeSyncを入れても同様の効果が発揮されたので、Anti-Lagの効果というよりも、今回の検証環境特有の結果ともいえる。

とはいえ、RX 5700でもデフォルト平均31.6msからAnti-Lag有効時25.35msに短縮しているので、確かに効果はあるようだ。今回は得られたデータに対しt検定も実施した。RX 5700のデフォルトに対し、FreeSyncだけ有効にした時は“有意傾向にある”程度の結果だったが、Anti-Lagを有効にした時のp値は極めて低く(p=0.00001程度)、統計的に差があると判断できる値であった。

t検定:平均値を対象とした検定手法のひとつ。今回の場合、グループ(ビデオカード)ごとの平均値の違いを検定している

p値:統計解析の結果を解釈する際の目安。p=0.05であれば、95%の確率で(今回の場合は平均値が違うという)仮説が正しいことを示す

「Overwatch」の平均インプットラグ。トレーニングステージで“アッシュ”を操作して計測

今回の検証で分かったことは、インプットラグはGPUのパフォーマンスと関係がある、ということだ。RX 590よりもRX 5700の方が、GTX 1660よりもRTX 2070の方がよりインプットラグが短くなる。そして同クラスのGPUならば、Radeonの方が若干インプットラグが短い傾向にある、ということも分かった。

さらにOverwatchの場合はAnti-Lagやレンダリング前最大フレーム数の設定は大きな効果が期待できないことも分かった。各GPUのデフォルト設定に対してのt検定結果で有意と判断できたのはRX 590のみ。RX 5700のインプットラグはわずかに短縮したが、有意であるとは言えないレベル。GTX 1660およびRTX 2070も同様にt検定で有意であるとは言えない結果となった。

PLAYERUNKNOWN'S BATTLEGROUNDSの平均インプットラグ。トレーニングステージでFPSモード、UMP45を利用して計測

PUBGの傾向もほぼ同様で、統計的に有意な結果が認められたのはRX 590のみ。GeForce系のレンダリング前最大フレーム数の設定を1にしても、インプットラグはほぼ変わらない。

Rainbow Six Siegeの平均インプットラグ。シチュエーションプレイの最初のステージを利用して計測

Rainbow Six Siegeについては、前述の通り発砲時を見分けるのが難しいサンプルが多量に見られたため、結果がバラつきやすいゲームだということをまず強調しておきたい。これまで試した3種類のゲームにおいて、GeForceはレンダリング前最大フレーム数設定の効果がほとんど見られなかったが、このゲームではレンダリング前最大フレーム数を1にした方がインプットラグが短くなる傾向が認められる。

t検定で統計的に意味のある結果といえるのはRTX 2070でG-SYNCとレンダリング前最大フレーム数の両方を有効にした設定のみ(p=0.04)で、GTX 1660の場合は有意な傾向がありそうとかろうじて言える(p=0.09)程度にとどまっている。Radeon勢はRX 590でAnti-Lagをオンにした時に統計的に意味がありそうな結果(p=0.05)が得られたが、計測の誤差も大きいので積極的に効果絶大と言うのは避けたいところだ。

Radeonの描画性能が低いモデルなら、より高い結果が期待できる?

以上でAnti-Lagの検証は終了だ。計測の手間の割に曖昧な評価が多くて少々落胆した部分はあるものの、Apex LegendsやPUBGなどでは何もしていない状態に比べ、Anti-Lagをオンにすればインプットラグが統計的に意味のあるレベルで低くなったことが分かった。

ただAnti-LagはどんなRadeonでも使える機能だが、今回の観測範囲ではより性能の低いRX 590で効きやすい傾向が見られた。これはGPU Boundな状況で効くというAMDの主張と一致する。Anti-LagをオンにしたRX 590のインプットラグよりも、Anti-LagをオフにしたRX 5700のインプットラグの方が断然短いことも確認できた(GTX 1660対RTX 2070でも同傾向)。高リフレッシュレートディスプレーを活かせる状況下では、Anti-Lagよりも素のGPUパワーが効くことが示された、といっていいだろう。

まだ試せていないゲームも数多くあるし、ディスプレーもリフレッシュレート60Hz環境では試していないなど、どういう状況でAnti-Lagが有効なのかは全体像を掴めていない。あくまで今回観測した範囲では“統計的に意味のあるデータがとれなかった”ものもあるため、Anti-Lagはあくまでゲームを少し快適にする(かもしれない)機能のひとつに過ぎない、としか言えない。

だが冒頭で述べた通り、ゲームの優位を作り出すのは努力と地道な効果の積み重ねである。Anti-Lagもその努力の一つとカウントしてよいのではないだろうか。

■関連サイト

■関連記事