2016/08/23

Overwatchのウィンドウモードごとの遅延


先日Twitterに書きましたが,Overwatchの描画遅延を測定しました.この検証により,どのウィンドウモードでプレイするのが「最も強いのか」ということを解き明かしました.
また,Windows10にアップデートしたので,ゲーマーにおけるWindows 10の最大のテーマ「Aero 3フレーム遅延説」についても簡単に議論します.


測定方法

測定方法は今までの記事と同様で,視点を左右に動かすようなデータをHID Device経由で送信すると同時に,LEDを点灯させます.ここで,LEDの点灯(HID Deviceのモーション送信)からディスプレイの映像が実際に動き始める時間を描画遅延とします.LED点灯からディスプレイの映像が動き始めるまでは数十msしかないので,Nikon1 V1のスローモーション撮影機能を用いて1200fpsで撮影しておきます.撮影されたスローモーション映像をPCでコマ送りで確認することで,描画遅延の時間を測定します.

この手順で,フルスクリーン・枠なしウィンドウ(フルスクリーンウィンドウ)・ウィンドウの3種のウィンドウモードの描画遅延を測定します.


評価環境 Experimental Setup

評価環境の概要は以下のようになります.OSとHID Deviceが変更になりました.
  • PC
    • OS : Microsoft Windows 10 Home
    • CPU : Intel Core i7 2600 (HT Enable)
    • GPU : NVIDIA GeForce GTX670
    • Display : BenQ XL2410T (120Hz)
  • Camera : Nikon1 V1 with 1 NIKKOR 10mm F2.8
    • F : 2.8,SS : 1/1250s
  • HID Device : CY8CKIT-059 PSoC 5LP Prototyping Kit (CY8C5888LTI-LP097)
  • Overwatch Settings
    • Resolution : 1920x1080 120Hz
    • Render Scale : 50%
    • Graphic Settings : Low or OFF
    • V-Sync : OFF


評価結果 Experimental Results

まず,測定したデータを時系列にまとめたものを図1に示します.
図1 時系列の遅延データ

図1のように,ディスプレイのリフレッシュレートが低いため描画遅延のフレーム数がバラけています.
また,Fullscreen(青線)では測定回が奇数の場合と偶数の場合で1フレームほど数値が異なります.
(※なぜこういう傾向になったのかは不明です.データは一発取りなのでもう少し詳しく測定する必要がありそうです.)

図1は描画遅延のフレーム数なので,わかりやすいようにミリ秒に換算し,平均値を出します.
Nikon1 V1のスローモーション撮影は1200fpsなので描画遅延の時間は,
描画遅延時間[ms] = 描画遅延のフレーム数×(1/1200)×1000
となります.この描画遅延時間から平均値を出したものが図2になります.

図2 描画遅延の平均時間

また,奇数/偶数を考慮した場合の平均値は図3のようになります.

図3 奇数/偶数を考慮した描画遅延の平均時間
図2,3のように,フルスクリーンの時が最も描画遅延が少ないです.要するに,フルスクリーンのほうが敵が早く見える上に,マウスの動きと画面の動きのラグが少なくなるのでAimもしやすいということになります.


Aero 3フレーム遅延説@Windows10

いわゆるAeroが有効だと,この環境では2フレームの遅延の差があると言えます.
(奇数偶数を考慮しない場合は1フレームですが,おそらく考慮した方が正しいデータであると考えています.)
Windows 10はWindows 7のようにAeroを明示的に切ることができないので,コンペティティブなタイトルは基本的にフルスクリーンに設定するのが無難だと言えるでしょう.
Windows 7のようにAeroを切れるOSであれば,そこまで大きな遅延は発生しないのですが・・・(それでもフルスクリーンが最速です)

参考 : Win8.1で測定されたデータ http://www58.atwiki.jp/grassan/pages/17.html


Overwatchのゲームエンジンは低遅延なのか?

今回の測定にあたり,OSをWindows7 → Windows10へと変更したため,他のゲームエンジンとの描画遅延の優劣は比較できないと考えています.

ただ,Windows7の時のデータを参考に考えるとOverwatchのエンジンはSource Engineと比較して大きな差はなく,結構リッチなグラフィックである割に低遅延なエンジンであると言えます.


まとめ

まとめます.
  • この環境では,フルスクリーンが最良
  • Windows 10ではウィンドウモードでは2(?)フレーム遅延する
    • 他のタイトルでも調べる必要がある
  • Overwatchのゲームエンジンは低遅延な部類だと思われる
  • (コマ送りで動画を再生して確認するので,とてもめんどくさい)


Appendix

撮影した動画を掲載します.







3 件のコメント:

  1. systema様

    お久しぶりです。いつもバリューの高い検証記事恐れ入ります。

    本記事に関連して、最新パッチで追加された”Reduce Buffering"という興味深い設定の
    遅延低減効果を検証した方が居られましたのでご紹介まで。
    https://www.youtube.com/watch?v=sITJ3V_fyv4

    マウスのボタンにLEDを直結して、ハイスピードカメラで動き出しまでの時間を測定しており
    systemaさん自作HIDによるMethodを手動化したような手法を使われてます。
    結果としては300fps付近の高いフレームCap環境では殆ど効果無しで、
    150fps以下くらいのフレームCap環境だと、約1フレーム分くらいの遅延低減効果があるとのことです。
    これが本当ならそこそこインパクトの高い設定になりますね。

    systemaさんの検証によるとOverwatchのエンジンは元から低遅延の部類に入りそうですし
    さらに遅延軽減のための内部設定を公開してくれたのは嬉しいところです。
    描画面が優秀なOverwatchの場合、ネットワーク遅延のほうがクリティカルな問題で
    Tickrate60まででしか遊べないという状況が変わってこれば、遅延面で隙の無いFPSゲームとなりそうです。

    返信削除
    返信
    1. rafa様,
      コメントありがとうございます.
      紹介していただいた動画を拝見しました.
      私のやっている測定方法とほぼ同じ方法を用いていますね.
      (測定した時間が違うのは,動画の方はキャラクタの動きをトリガーとしているからだと思います.)

      遅延を少なくする設定を用意するとは素晴らしい試みだと思います.数ms削れればかなり大きいので,かなり有効な設定項目だと言えそうです.
      機会があればこちらでも検証してみたいと思います.

      削除
  2. windows7のAeroの遅延はタスクバーの右下にカーソルを合わせたときの半透明処理(Aeroプレビュー)が主によるものでOFFにすれば遅延がほぼ解消されたりすると書いてるとこがあります
    検証データは見つかりませんでしたがwindows10にも同じ機能があるしウィンドウモードでしたいゲームもあるので気になりますね

    返信削除