Android 2.3 or higher
このページでは、簡易遅延計測アプリを使って実際に遅延を計測した結果をレポートします。
先日、PS4でゲームアーカイブスの「忍者くん 阿修羅ノ章」をプレイしている際に、三角飛びのタイミングが異様に難しく感じる事がありました。これはひょっとして遅延が発生しているのでは無いか?PS4購入にあたって導入したHDMI切替機が遅延を引き起こしているのではないか?という疑問がこのアプリの開発の切っ掛けとなりました。
何とかお手軽に遅延を測れないものか?と情報収集すると、「LCD Delay Checker」というPCソフトの存在に辿り着きました。遅延計測でのデファクトスタンダードとされる素晴らしいソフトなのですが、いざ、このソフトをつかって計測しようとすると、PCはもちろんの事、CRTモニタや分配器などが必要で計測セットが大がかりになってしまい、かなり敷居が高いです。そこで、精度には多少目をつぶることで、HDMI出力できるAndroid端末を使った簡便な方法を試してみようと思いつきました。最初は出来合いのストップウォッチアプリなどを使って実験したのですが、一般的なデジカメでは、撮影画像の数字がダブってしまって読み取れず、専用のアプリの作成が必須であることを痛感しました。その後、試行錯誤を経て本アプリが誕生したのです。
と言うわけで、早速計測してみましょう。
この計測実験で使用する機器は以下の通りです。つまり、我が家のプレイ環境ですね。
計測にあたっては、あえて高性能では無い端末とデジカメを使って、どこまでの計測が可能かチャレンジしてみました。
本アプリをインストールした端末とTVなどを接続しアプリをスタート。端末とTV画面が共に写るようにして、デジカメで通常設定のムービーを撮影します。
撮影動画をコマ送りで再生しながら判定するのですが、通常、この程度の機器のシャッタースピードはせいぜい1/50~1/60程度ですので、画像には、白い四角マーカーが2~4個写ります。
マーカーは時計回りに表示されますので、その最先端のマーカー位置で判定することにします。マーカーの濃度で露出時間を推定するような方法も考えられますが、遅延が少ないはずといった恣意が入るのを防止し、なにより測定が面倒にならないよう、最先端位置にほんの僅かでも写っていればその位置で判定する、という単純なルールにしました。
端末にしろTVにしろ、所詮、1/60秒程度の間隔で非連続な画像のパラパラ漫画です。動画をコマ送りにしても、シャッタースピードの速いカメラを使ってたとしても、原理的に得られる画像は、1フレームの整数倍毎に移動するマーカー位置の情報に過ぎません。つまり、1枚の画像から読み取れる遅延時間はフレーム時間の整数倍以上の精度を持ちえません。
そのため、多数のデータを用意する事で、より精度の高い推定を試みることとなります。
例えば、撮影した画像を10枚調べ、遅延1フレームが7枚、遅延2フレームが2枚、遅延3フレームが1枚なら、平均1.4フレーム遅延だな、などと推定するわけです。
写真を連続撮影してもOKですが、面倒なので、動画を撮影し、コマ送り再生して調べることで手間を省きました。
このAndroid端末は、処理性能ははっきり言って低いのですが、本アプリを動かすと1080p接続で一応54.27fpsで安定動作します。*マークが付いていないので、これがこの端末のリフレッシュレートのようです。時たまGCなどによってlostが発生する事があるので、画像の読み取り時には、その点に注意しゴミデータはスキップしました。
TVのモードによる遅延と、接続機器による遅延を調べます。予備調査を踏まえ、
をざっくり調べることとしました。また対照として最も遅延の多そうな標準モードも計測しました。
簡易計測が売りのアプリですので、数秒動画を撮ってそれぞれ30点ほど数えるだけ、という適当な処理でどこまでの推定が可能かチャレンジしてみました。実際の計測時間は機器のつなぎ替えを含めても数分程度、データ処理時間を合わせても15分程度です。
結果を表にまとめました。
接続 |
モード |
R+ |
遅延(フレーム) |
遅延(ms) |
直接 | 標準 | あり | 4.3 | 71.8 |
ゲームスムーズ | あり | 1.1 | 18.4 | |
なし | 0.4 | 6.7 | ||
ゲームダイレクト | あり | 0.6 | 10.0 | |
なし | 0.4 | 6.7 | ||
ホームシアター | ゲームダイレクト | あり | 1.1 | 18.4 |
なし | 0.5 | 8.4 | ||
ホームシアター
+切替器 |
ゲームダイレクト | あり | 1.1 | 18.4 |
なし | 0.5 | 8.4 |
本アプリを用いた、お手軽で精度の低い計測からも、幾つか分かる事がありました。
以上となります。
実際の遅延データで答え合わせができれば良いのですが、メーカーサイトを見ても、どのモード設定でどれだけの遅延と明記してあるわけでは無く今ひとつ不明瞭です。が、「2Dゲームで0.7フレーム遅延」「補完フレーム生成を行いながら低遅延(約1.3フレーム)」という記述がありますので、これが上記表のゲームスムーズR+ありの1.1フレーム遅延もしくはゲームダイレクトR+ありの0.6フレーム遅延あたりの数字の正解なのかな、と思いました。
計測結果からの推定値にもっと精度を求める場合には、安定した端末や精度の高い撮影機器を使用するほか、データを増やすと良いと思われます。多分上記の結果にはかなり誤差も入っているはずです。それでもざっくりと影響の有無やモードによる傾向などを見る分には短時間の計測で十分という事が分かりました。
みなさんも、ぜひ、試してみてください。