ネット回線のラグを減らす

Last-modified: 2024-12-07 (土) 10:31:43

https://yosshin4004.github.io/memo/input_lag/index.html
1/60フレーム、1fps(0.017秒)の遅延は確かに体感できる(ただし個人差がある)

ゲームプログラムが発行した描画リクエストは、 フレームバッファの裏画面に描画され 次のフレームで実際に表示されます。
ここで 1 フレーム以上の遅延が発生します。 モニターは液晶方式のため、 さらに 1 フレーム遅延します。

人間の「視認 → 操作」 の最短応答時間は、0.20 秒です。
現代のゲームハードでは、 実測すると少なくとも合計 50 ミリ秒(0.05秒)の遅延が発生しています。

遅延原因:OS のバッファ
Windows OS のバッファが大きい場合 4 フレーム程度の遅延が起きています。
Windows にDesktop Window Manager が導入され遅延が増大しました。
Windows 10 以降、このDesktop Window Manager を無効化できなくなりました。
その後 Windows アップデート、DirectX12 の更新で遅延は解消。
しかし、DirectX 9, 11 のゲームは改善されておらず、 4 フレーム程度の遅延が発生します。
この4フレーム遅延は、 DirectX API 経由ではなく、 GPUメーカーの提供するドライバー側で「低遅延処理ーアンチラグ」を有効にしなければ対処できません。

モニタの解像度
ゲーム画面(デスクトップ)の解像度と、 モニタのデフォルト解像度が一致しない場合、モニター側で解像度変更処理がおこり、 遅延が増大することがあります。
モニタの解像度はデフォルト解像度にしたほうが良い。

ダブルバッファ
描画結果はフレームバッファ上に生成されます。
初期のGPUは、 メモリ容量の制約から表/裏のバッファ、それぞれ 1 枚のフレームバッファがありました。
1 フレーム分の処理が VSYNC 、垂直同期までに間に合わなかった場合、 次の垂直同期まで待たされフレームレートが半分に落ちます。
フレームレートが半分に落ちるときは次の垂直同期 を待たず、ティアリング発生も直ちに HSYNC フリップする手法が利用されました。

1フレーム目.表バッファはディスプレイ表示中なので、描き換えられない。
1フレーム目.裏バッファには2フレーム目の画像が置かれており、描き換えられない。
2フレーム目.裏バッファがディスプレイ表示。表バッファ3フレーム処理中。
3フレーム目.表バッファがディスプレイ表示。裏バッファ4フレーム処理中にエラー。
4フレーム目.処理落ち:裏バッファ処理が間に合わず3フレーム目と同じ画像が表示される。
5フレーム目.表バッファが表示される。

トリプルバッファ
現行 GPU は垂直同期を待たず、次フレームの描画処理をするため「裏バッファ」2つ 、「表バッファ」1つバッファを追加、 トリプルバッファが利用されます。
フリップ処理は CPU から GPU に対して予約し、 GPU にフリップさせる仕組みになりました。 CPU は垂直同期から解放され、VSYNC と非同期で動作可能になりました。
CPU が非同期化したことにより余裕があるなら垂直同期を無視してフレームを先行処理することが可能になりました。
先行フレーム分の貯金ができ、 CPU 処理が重いフレームに出くわした時、 処理落ちを回避することができ、 フレームレートを安定させます。

  • 低遅延

HSYNC フリップ
HSYNC フリップは、最も低遅延な方法ですが、副作用としてティアリング発生します。

トリプルバッファを利用しない
トリプルバッファは、 CPU に VSYNC と非同期の処理を可能にしたりフレームレートを安定させる効果がある一方、 表示遅延を増大させる副作用があります。
アクション性の高いゲームでは利用しない方が良いです。

ラグ

スト6はPS5またはPCにコントローラーとディスプレーをつないでプレイします。
コントローラーの入力がディスプレーに送信されます。
コントローラー入力からディスプレーに映るまでにかかる時間が入力遅延。

  • 遅延
    ー.デイスプレイに表示(最短3フレーム/0.05秒)
    0.人間の反射神経 (6フレーム)
    1.コントローラーの入力遅延 1フレーム以下
    2.パソコン本体の処理遅延 PC:1~3フレーム PS5:5~7フレーム
    3.ディスプレーの表示遅延 1フレーム
  • 同期
    (快適な人の)ping 10ms~30ms サーバー側と往復する0.02秒くらいのタイムラグ
    数フレームごとに同期する必要がある(1/60fpsなら0.015秒)
    回線速度は下り/上がり100mbbpsあれば十分(だいたい50mb必要)

ちなみにパソコンはPS5より遅延が少ないです。
コントローラー入力してから約3フレーム後に画面に反映されます。
1秒は60fpsなので3フレームは約0.05秒になります。

この遅延はオンライン対戦のラグ対策でオンラインモードにだけ遅延するよう意図的に入れている場合もあります。
意図的に遅延させることによってネットの向こう側から来る入力を待ってからゲームの処理をする必要があるから遅延がクッションになってラグが安定します。
90年代ゲームセンターの格ゲーではオフライン対戦だったのでこのような設計は基本的にはなかった。
昔ゲームをオフライン対戦でやった人が今のゲームをやるとラグってるような感覚があります。

ネット回線ラグ

オンライン対戦ゲームでは、ベースとなる0.05秒以上の遅延に加え、ネット回線ラグが加算されます。
光回線で日本国内の相手だとPing 10ms~30msくらい。サーバーとの往復で0.02秒くらい遅くなります。
全ての遅延を総合すると0.07秒くらい遅くなります。
本当は同期する間の数フレーム分のラグも加算されるはずですがCPUが位置情報などを予測するのでラグの体感は減ります。
このくらいの遅延ならラグはあまり体感できず許容範囲内でしょう。
人間は見てから手を動かすのに0.1秒かかるため、人間自体にもラグが発生します。
格闘ゲームはこの人間自体のラグを考慮して、人間の反射速度に合わせて調整しています。
なのでラグが増えると見てから操作が間に合わなくなり、ひどいとゲームバランスが崩壊します。

ラグがひどい相手だとディスプレーの表示遅延がさらに増えます。
格ゲーで許容できる遅延は0.1秒くらいが限界といえるでしょう。
アメリカやヨーロッパ、海外の人とのオンライン対戦はラグがどんなに最速でも0.15~0.2秒くらいまで増えます。
国内のラグの2倍~3倍まで増えます。
そこまで遅延すると、格ゲーのコンボなどテクニカルな入力は不可能なくらい難しくなります。
相性が悪い回線の相手だと0.5秒以上遅くなる場合もあるでしょう。
そこまでいくと遅すぎてストレスになるくらい悪化するのでゲームになりません。

リモートプレイのラグ

リモートプレイでは往復ではなく片道の通信でいいのでラグは半分に減ります。
ゲームや通信相手によってはリモートプレイのほうがラグは少ない時があります。
格闘ゲームではリモートプレイできないかというとそうではなく、むしろ格ゲーのリモートプレイのほうが快適なこともあります。
15ms~20msの描画遅延でリモートプレイができると普通のオンライン対戦とラグはほとんど変わりません。

ラグ対策

FPSや格闘ゲームはラグが生命線。
スマブラのようなサーバー非経由のP2P完全同期型のゲームでは、マッチした4人のうち1人でも回線が悪いと、その人と同じレベルのラグを全員が背負うことになります。
有線と無線は、規格的に通信速度やPing値はそこまで変わらないものの、現実的には電波干渉など通信の安定性が段違いです。
例えばSwitchのLANアダプターですが、機器毎にスペックがあり古いものを使うとよくないです。
LANケーブルにも「カテゴリ」というスぺックがあり、この数値が低いと、遅くなります。
快適にするなら、カテゴリ6/6aを用意しましょう。
ルーターのスペックやプロバイダーも重要。
NTT系の光回線プロバイダーのひとの場合にかぎり、契約がIPv6に対応しているかどうか(ルーターも対応している必要がある)も重要です。

ルーターのスペック
5年前のルーターかどうか
Wi-Fi規格が「11ac」「11ax」対応かどうか
「1Gbps(1000BASE-T)」かどうか

プロバイダーが良くない例
モバイルWi-Fi:WiMAX、○○Wi-Fi系
ホームルーター:WiMAX、ソフトバンクエアー
ADSL回線:フレッツ、Yahoo!BB
CATV(ケーブルテレビ)回線:Jcom、イッツコム
マンション回線:d.u-net、レオネット


オンライン対戦のラグ対策

PCモニターではなく家庭用テレビでプレイするときはゲームモードでプレイしましょう。
ウィンドウズのネットワーク設定をいじるとネット回線のスピードが上がる場合があります。
ラグに不満がある場合は試してみてください。
ただし、サーバー相性など運が悪いとスピードが下がります。下がったらデフォルトの設定に戻せば元に戻せます。

loading...