2014/10/19

ゲーム毎の描画遅延を測定してみる

---------------------------------------------------------------------------------
2015/05/20 : Baselineを追加 (当該記事参照)
2014/10/20 : QUAKE LIVEを追加
2014/10/19 : 初出
---------------------------------------------------------------------------------

                「このゲーム、視点移動がモッサリしてね?」

こんな感想を抱く事ありませんか?
良く「ヌルヌル」しているというポジティブな表現が用いられますが、私的にはせめて視点移動は「サクサク」している方が良いのです。
特にシューターだと、視点移動の描画遅延が少ない方が競技性的にも、ユーザビリティのためにも良いことだと思います。

本記事の目的は、体感では評価しにくいミリ秒単位の描画遅延を定量的に測定して公開することで、ゲーミングにおける描画遅延低減への取り組みを促進する事を意図しています。

このトピックは2年程前からやりたかったのですが、ひょんな事からUSB Mouseのcountを自由に制御出来る環境が整ったので実施。

測定方法

・撮影機材 : Nikon 1 V1 (レンズ : 1 NIKKOR 10mm f/2.8)
・MCU : CY8CKIT-050 PSoC® 5LP Development Kit

PSoC 5LP上にフルスピードUSBのHIDデバイスを作成し、3-button Mouseと設定。
今回はX軸のみに左右30 Countsを転送します。
また、MCUから0位外のカウントを送る際にLEDを点灯するようにプログラムしています。LEDの点灯からデータ転送間の遅延はμsオーダになっているはずなので無視できる範囲だと思います。


流れはこんな感じ。
・右に30countを128回(128ms)
・128回(128ms)停止
・左に30countを128回(128ms)
・128回(128ms)停止
これを繰り返して、LEDと画面の様子を撮影します。

Nikon 1 V1 のハイスピード撮影を使用して、ゲーム中の視点移動の様子を1200fpsでの撮影を行います。
そして、撮影データを1フレーム毎に表示し、LED点灯から描画の開始までのフレーム数を数え10回の平均を取り遅延時間を算出します。


最後に動画を載せるので雰囲気を掴んでいただければと思います。

結果

 結果は以下の通り。



Warsowがかなり優秀ですね。1.5系はかなり綺麗な描画ですので、「(体感は出来ないにしても)結構遅延がありそうだな」と予想していたのですが。

 BF4に関しては予想通り。自分が初めてBFBC2をプレイした時「何だこの描画遅延!?」と動揺したのですが、Battlefieldシリーズは描画遅延が多めな印象でした。特に3以降は輪にかけて遅延しているような。BF3とBC2も計測すべきですね。

もっと色々なタイトルで測定したいのですが、とりあえずプレイしている(していた)タイトルだけで計測しました。CoD:Gはかなり描画遅延があるようなので気になりますがゲームを持っていないのでフリーウィークエンド待ちだったり。

追記(2014/10/20) : 似たような事をしている方が居らっしゃいました。
rafa様、情報ありがとうございます。
ESR - Input lag tests QL/CSGO/Q3A - Hardware Forum
http://www.esreality.com/post/2640619/input-lag-tests-ql-csgo/

こちらとデータが違うのはシステムのコンフィギュレーションが原因なのか測定方法が違うことに依るのかは不明です。こちらとしては、最低でも±2msくらいの精度は出せる計測システムだと自負していますが :D

色々なマルチプレイヤー対応タイトルを計測して一覧でグラフを出せればよいのですが。
ゲームを買うお金がありません。gg.

おまけ

撮影した動画は以下。

2 件のコメント:

  1. 前のCSの武器精度記事と併せて凄く興味深く読ませてもらいました:)
    Realもお忙しい中ご活動お疲れ様です。

    ESRealityでもCasioのハイスピード撮影を用いて
    似たような事をされている海外の方が居ました。
    ただそちらの手法では使用したマウスそのものが持つ
    モーションデータ通信Lagも混ざった結果となるため
    そこの不確かさを除くことができるsystema様の手法はかなりの精度が出ると思いました。
    PSoCから直に移動カウント送信する独自のシステム構築が流石ですね:o

    外人さんの結果ではCS:GOよりQuakeLiveやUT4のほうが7~8ms低かったので
    systema様の結果と照らし合わせると、これらのエンジンは10msを切るくらいの
    かなり優秀な描画遅延みたいです。

    しかしこれが出来てしまうと夢が膨らみます。
    逆に3DGame側を固定してやることで
    LCD本体の描画遅延の差を測定できますし
    グラフィックドライバのオプション設定によって描画遅延に変化が起こるかとか
    またレンダリングAPIを変えれるゲーム(Direct3D OpenGL Mantle etc.)では
    どのレンダラが遅延的にベストかも調査できそうです。
    考えれば考えるほど色々な応用が効くので素晴らしいです:q

    長文コメント失礼しました。
    あとSteamのほうでお誘いありがとうございました。
    全然Logicalではなくthe脳筋Gamingな私ですが:p

    返信削除
    返信
    1. rafa様

      コメントありがとうございます。
      ESRealityのスレッドを確認しました。かなり長いスレッドなので全部のコメントは読んでいないですが XD


      UT4は未確認ですが、Steam版QUAKE LIVEのlatencyと動画を追加しました。
      結果はCS:GOより3ms程悪い値となりました。ESRealityの方とは傾向が違うようです。

      原因は今のところ不明です。とりあえずQLの垂直同期は切っているのを確認しましたが・・・
      QLは殆どプレイしていない事もありコンフィグが適当なのが一因かもしれません。


      >逆に3DGame側を固定してやることで
      >(略)
      >どのレンダラが遅延的にベストかも調査できそうです。

      そこまで考えていませんでした。
      確かに、USBデバイス以降のシステムである
      ・OS
      ・ゲームエンジン
      ・GPU
      ・ディスプレイ
      全ての描画遅延の合計を(一応)ms単位で計測できますので、
      低遅延環境へのコンフィギュレーションの模索が出来ますね :D

      しかし、完璧なコンフィグを探るには数多くのパラメタがあり果てしない労力が必要そうです。

      Steamのフレンド申請を受けていただきありがとうございます。

      systema

      削除