kimagre inrash

感想を書きます

ゲームの入力遅延、インプットラグ( inputlag )を検証しよう

time 2020/02/22

インプットラグ(input lag)

コントローラで入力をしてから実際にゲーム画面に反映されるまでには遅延が発生します。

この時間が長いと入力遅延があると感じ、気持ちよく操作が出来なかったりそもそもまともに遊べません。

原因としては「液晶モニタ」や「USB機器」、「ゲームエンジン」に問題があったりします。

今年はクラウドゲーミングサービスが本格的になりそう+前から定期的にネットで話題になることから、検証できるような状態を作ることにしました。

※素人による検証なので間違っている箇所もあると思います。鵜呑みにはご注意を。

準備

インプットラグの検証方法は大きく分けて2パターン。

  • ボタンを押したときにLEDを光るようにしてハイスピードカメラでゲーム画面と一緒に撮影
  • ボタンを押したときにゲーム画面にその入力を混ぜ込む

後者の「画面に入力を混ぜ込む方法」は良さそうと思いましたが、揃える道具が結構多いためまずは「ハイスピードカメラで撮影」して検証する方法を選びました。

ハイスピードカメラ方式

カメラ

ハイスピードカメラはプロユースがメインっぽくてかなり高いです。

一般向けのものは解像度がかなり落ちるけど、「Nikon 1 J4」「CASIO EX-ZR200」あたりが良さそう。(インプットラグを検証してる人も使ってる機種っぽいので)

新品を買うと高いので中古で探しました。

Nikon
Nikon (2014-04-24T00:00:01Z)
5つ星のうち4.0
¥35,000 (中古品)

まずは「Nikon 1 J4」を入手。

「Nikon 1 J4」は1200fpsで撮影ができるけど、わずか3秒しか撮影できないことが購入後に判明。

それなりにお金がかかったのでショック大。これはネコ撮影用行きかなあ・・

CASIO(カシオ)
CASIO(カシオ) (2011-11-18T00:00:01Z)
5つ星のうち3.7
¥24,800

一方、「CASIO EX-ZR200」は1000fpsで撮影でき、長時間記録できる。J4と比べるとかなり安く入手できました。

故障に備えて複数台。

ディスプレイ

ディスプレイは「LG 22MK600M-B」。ボーダーブレイクの筐体が来た時に使っていたディスプレイをささげたので買ったモノ。

応答速度は5ms。画面内の色味が好み。

検証してる人を見るとゲーミングディスプレイを使ってる人が大半ですが、そこまで本気ではない環境での入力遅延に興味があるのでこれをこのまま使います。

コントローラ

コントローラ基板は「PS4+ Audio Fighting Board」を採用。

将来的には「Universal Fighting Board」に載せ換え予定。

試しに

  備考
ディスプレイLG 22MK600M-B応答速度5ms
ハイスピードカメラCASIO EX-ZR2001000fpsで撮影
コントローラ基板PS4+ Audio Fighting Board
PlayStation4SAMURAI SPIRITS20191214 v1.40 覇王丸の弱斬り(LSボタン)

PS4版「SAMURAI SPIRITS」でテスト撮影。バージョンはv1.40。

左側の赤い部分がLSボタンを入力したときに光るLEDで光った時を「入力検知」とし、右側の覇王丸で攻撃モーションに入るタイミングを「画面反映」としました。

ざっくり10回ボタン押して動画で撮影し、1フレームずつ動画を確認。結果は以下。

入力検知(ms)画面反映(ms)差(ms)差(Frame/60fps)
857937804.81F
16821771895.36F
25102584744.45F
33383416784.69F
41504234845.06F
49835067845.06F
58635951885.30F
67606850905.42F
76017683824.93F
84848566824.93F
平均83.15.00

すでに検証した方の結果を見ると結果が結構違います。(私の方の検証だと1Fぐらい遅いです)

ただ、10回程度じゃ全然わからないので出来れば1000回ぐらい検証したい。

でも人力でやるのは困難。ということでツールの作成です。

自動入力システム

まずは一定間隔毎に入力が入る仕組みを作ってみます。

タイマー回路でやる方法もあるようですが、私は「Arduino」を使ってみることにしました。(「Arduino」はプログラムをパソコンで書き換えることが出来て便利そうだったので)

Arduinoをはじめようキット

posted with AmaQuick at 2020.08.30
スイッチサイエンス
スイッチサイエンス ()
5つ星のうち4.5
¥4,390

「Arduino」から「PS4+ Audio Fighting Board」の入力を制御するにはリレーと呼ばれる部品を使えばいいらしい。

あとはプログラムを書いて制御すれば完成。

void setup() {
  // put your setup code here, to run once:
  pinMode(2, OUTPUT);
  digitalWrite(2, LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
  for (int i = 0; i < 100; i++)
  {
    digitalWrite(2, HIGH);
    waitms(20);
    digitalWrite(2, LOW);
    waitms(1000);

  }

  digitalWrite(2, HIGH);
  while (1)
  {
    waitms(1000);
  }

}
void waitms( unsigned long ms )
{
  unsigned long start_time = millis();
  while (millis() < start_time + ms ) {
    // nothing
  }
}

その後、PS4版「SAMURAI SPIRITS」を自動入力装置で100回分撮影。

これを目視で判定・・は現実的ではないので次は解析ツールの作成です。

解析ツール

前フレームとの差分で変更があった箇所をピックアップする機能を作りましたが、「CASIO EX-ZR200」の解像度が低い+ノイズが多くて誤検知しまくります。

より解像度が高い「iPhone」のハイスピード撮影(240fps)でも試してみましたが、ノイズが乗ったり画面がブレたりして思うようにいきません。

また、露出の関係で部屋のライティングやカメラ位置の調整などに時間がかかることから「ハイスピードカメラ」を使うこの方法は諦めることにしました。(セットアップが簡単になれば戻る可能性はあるんですが・・)

キャプチャ方式

「ボタンを押したときにゲーム画面にその入力を混ぜ込む」方式で再構築。

ざっくり説明するとコントローラの入力が入ったときに画面の特定の信号を切断することで画面上に入力タイミングがわかるようになる仕組み。

構築方法は inputlag.science を参考に作成。

一部誤検知はあるものの「カメラ方式」よりは安定して検証できるようになりました。

動画出力機能をつけて早速PS4版「SAMURAI SPIRITS」の初期バージョン(v1.00)と現時点での最新バージョン(v1.51)を比べてみました。

8Fから5Fとアップデートによってインプットラグが減っているのが確認できました。

データベース

検証環境が整ってきたのでインプットラグも同じくデータベースを作成しました。

インプットラグ検証データベース(inputlag database)

順次更新していきます。

前後記事

入力遅延インプットラグ( inputlag )検証方法、「アナログコンポーネント切断方式」