2015/04/05

描画遅延の基準点を調べてみる

半年ほど前にゲームのタイトル毎の描画遅延を測定する手法を紹介しました.
#LogicalGaming: ゲーム毎の描画遅延を測定してみる
今回はその測定手法を用いて,別のことを調べます.

今回は,「極限まで処理が簡略化されたゲームの描画遅延はどれくらいなのか?」という事を測ります.
これは,HIDデバイスの入力が,
PC内のUSBホスト → OS(CPU) → ゲーム → グラフィックカード → ディスプレイ
と処理されていく時の最短時間を知ることが出来ます.
この最短時間は,ゲームエンジンを描画遅延を意識して書いた時,そのゲームエンジンが到達できる最も低遅延な時間とも言えます.また,ゲームエンジンを最適化しても,これ以下の描画遅延を実現するのは難しいということになります.

プログラム

極限まで処理が簡略化されたゲームとして用意したプログラムは,今年始めに用意した自作プログラムです.SDL(Simple DirectMedia Layer)というマルチメディアライブラリを使用してOpenGL APIを制御します.

このプログラムは,マウスカーソルの移動のX軸が右方向なら赤,左なら緑を画面全体に描画します.他にはフレームレートの計測と,ESCキーが押されたら終了する処理のみです.

1フレーム(1ループ)が20行程度で書かれており,初期化が終了すればノートPCで走らせても1000fps以上出る非常に軽いプログラムです.
時代遅れになりつつある私のリグでも6200fps程度出ます(Intel Core i7 2600,NVIDIA GTX 670).
フレームレートが約6200fpsとすると,プログラム自体が持ちうる遅延は0.16ms程度ですので,遅延は非常に小さいとして無視できます.
つまり,上述の最短時間からゲームの項を削除して考える事が出来ます.
PC内のUSBホスト → OS(CPU) → ゲーム → グラフィックカード → ディスプレイ
USBホスト,OS,グラフィックカードあたりは生半可な手法では遅延を削減出来そうな設定は難しいですので,あとは「ディスプレイを遅延の少ない機種に買い換える」程度しかユーザーサイドで工夫できる場所がないということになります.

結果

右端のBaselineのラベルが付いたものが,今回紹介したプログラムの描画遅延時間です.
私の作成したプログラムは8.4msとなりました.私の環境では,入力デバイスが画面に反映されるまでに最低でも8.4msの時間が必要になると分かりました.120Hz駆動の液晶で換算すると,ちょうど1フレーム程度になります.これは,どんなに良いエンジンでも,PC側の都合で最低でも1フレーム程度の遅延は起きうるということを意味します.

また,一般的なFPSタイトルは演算や描画処理などで,さらに4~10ms程度の時間が必要になると分かります.この時間は,エンジン内の描画処理の順序の工夫等で縮められるのでしょうか.描画遅延の削減を売りにしたエンジンとか出れば面白そうですね.
ゲームエンジンは,フレームレートが特にフォーカスされることが多いですが,描画遅延に対してもより一層注目が集まると,この差は徐々に埋まっていくかも知れませんね.

2015/03/13

一段落

したはずなのですが...
色々後回しにしていた事を片付けるので3月中は終わりそうです.

2月と3月前半はブログ更新はおろか,シューターすらプレイできない日が大半でした:(
デバイス勢の方々のブログは欠かさず見ていましたが,私自身のアウトプットが少なかったです.
来年度は,「時間をうまく使う」ことを重要視していきましょう.

ゲーミング・ゲーミングデバイスへのモチベーション的には去年の今頃より高いですし,
ネタ自体はちょくちょく作っているのでボチボチ更新していきたいと思います.

2015/01/25

マウスが見ている視界はどれくらいの大きさなのか?

以前マウスが見ている景色について調べたという記事を書きました.
マウスのセンサはマウスパッドをカメラのようなもので撮影して,そこから動かした距離を測定しています.
そのセンサの仕組みの中で,「マウスがどのような写真を撮影しているのか」という事を調べました.

今回はマウスのセンサがマウスパッドの表面でどれくらいの範囲を見ているのかを明らかにしていきます.
範囲が分かることにより,マウスが読み取れるような凹凸パターンのサイズに検討がつきます.
例えば,凹凸のサイズが非常に大きい面ですとマウスは小さい範囲しか見えないので変化がないように見えます.逆にマウスからは滑らかに見えるくらい小さい凹凸しかなければそれも変化を読み取ることが出来ません.どちらの場合も良好なトラッキング結果は得られないでしょう.

それではいくつか撮影してみましょう.撮影環境は前回と同じです.
まず最初はどこのご家庭にもあるノギスです.目盛の部分を撮影しました.
ノギスの目盛部分
目盛の黒い線がくっきり写っています.
"目盛の太さ"は目測ですが0.1~0.07mmくらいだと思います.

次はレシートに印刷してあったQRコードを撮影しました.
レシートのQRコード
こちらも綺麗に写っています.
このQRコードは12.2x12.2mmの範囲に33x33ピクセルで印刷されています.


この2つの画像から考えると,ADNS-5090が見ている範囲は0.8x0.8mm程度であることが分かります.ADNS-5090は19x19ピクセルの画素数ですので,1ピクセルが表す範囲は0.04mm程度であると分かります.


補足 : レンズ倍率について
レンズの倍率を低くしてDPIを犠牲にしつつ最大トラッキングIPSを上げたりするようなこともあるらしいです.

倍率を変更すると見える範囲も変化するので適切なパターンのサイズも変化します.
例えば低倍率にすると見える範囲が大きくなり最大トラッキング速度は上昇しますが,その分小さな凹凸は見えなくなります.その場合は表面の凹凸パターンが大きめのマウスパッドの方がより良いと考えられます.

生存報告も兼ねて.

2015/01/06

2015年

あけましておめでとうございます.
今年も#LogicalGamingと@systema_,(CG/計算機な人は@aaax3001も)をよろしくお願いします.

・2014年を振り返って

ブログを立ち上げたのが2014/01/10なので,ちょうど一年程になります.
1-3月はあまり更新していませんでしたが,4月にrafa様のブログで取り上げて頂いてから本格的に活動を始めたような気もします.そういった中で様々な人から反応を頂きまして,更新のモチベーションになりました.
書きたいと思った記事はその時その時でタイトルだけ書いて全部下書きにしているのですが,下書きの個数は減るどころか増えています.ブログの更新するネタがないなんて言っている人が羨ましい・・・ :D

3月の終わりにこんなツイートをしたのが懐かしいです.
宣言通り「ゲーミンググレードのデバイス開発を目標とした試験と解析」はしていたのでよしとしましょう.センサ・スイッチの制御とUSB関係の基礎的な知識がついたのが良いですね.


ついでに去年の記事の中で印象深いものを幾つか紹介.

・USB HIDデバイスのクリックの最速応答を考える
USB HIDが制御出来たのが嬉しくて突発的に書いた記事です.
私でも比較的容易にクリックレスポンスの速い実装が出来ました.つまり,クリックの応答速度が速いメーカーが秘伝のタレを持っているのではなく,速度が遅いメーカーが何らかの理由で遅くしているという事でもあります.理由に関してはマーケティングやサポートであったり,優先度の低さなどもあると思います.
そういう意味でも良いゲーミングのためには,ユーザ自身が明確なデータを測定して公開するというのは大事なのだと思います.


・マウスの光学センサが見ている世界を見てみる 
ADNS系センサの制御は組み込み方面ではそこそこ見かけるのですが,PixelGrabberについてはちょこっと動画があっただけであまり使われていません.
そういった中で,ゲーミングマウスパッドがマウスの光学センサからはどのように見えているのかを示しました.解像度が低いのでもっと意味不明な感じだと想像していたのですが,思ったより顕微鏡画像っぽく見えたのがナイスですね.
今後の私のマウスパッドレビューではPixelGrabberで取得したマウスパッドの表面画像がつくようになるでしょう.泡沫ブログなのでレビューに個性が出すいいツールになるかもしれません.
光学・レーザーにおける差異を見てみたいのでレーザセンサもやるべきなのですが・・・今年の課題ということで.


どの記事も内容的に「訳わからん」と言われがちなのでもう少しわかりやすくしたいです.
このブログを訪れるユーザが「rafalogの過去の記事を全て読んでいる」という前提で話を進めているのが問題なので,もう少し導入部分に力を入れていきたいです.


次は"ゲーミングを定量化する"という,このブログ本来のテーマに基づいたものです.

・ゲーム毎の描画遅延を測定してみる
「ゲームのタイトルによって入力が画面に反映される時間に差異がある」という現象事態は多くのゲーマーが感覚的に認識しつつも公表はあまりされていません.「遅延というパラメータがゲーミングのパフォーマンスに影響する」という事自体が,ここ数年でやっとメジャーになってきたというのが私としての認識です.
その"遅延の差"の存在を証明し,ミリ秒単位で定量的に測定できる手法について示しました.
遅延の差の存在を証明することと,タイトル毎の優劣を明確に測定・公開することによって,ハードウェアの遅延だけではなくゲームエンジンや実装における遅延低減がフォーカスされると良いですね.


・Reaction Time (反射神経)とAimの関係
Reaction TimeがAimとどう関係するのか?Reaction Timeを縮める為に効果的な物はあるのか?
こういったことをゲーミングを指向して調査しました.結論として,人間も含めて全てを「システム」として捉えると,ハードウェアやOSに起因する遅延を出来るだけ低減するようにセッティングするべきだということと,人間のReaction Timeに関してはばらつきが大きく明確に改善する方法はないという事を示しました.
人間においては「集中力」というのがかなり重要な要素になっているのが分かったので,暗示(条件付け)についてもう少しフォーカス出来ると面白いと思います.


・FPSにおける武器の精度について考えてみる
この記事で最も言いたかったのは,精度が高い武器を使用すると許容される誤差が大きくなるという点です.あまり反響がなくて残念ですが :(
私はシューターにおいて初弾の精度はかなり重要なパラメータだと考えているのですが,世間一般ではそうでもないのでしょうか.


・最近

年末年始は描画遅延の調査に必要になったためOpenGLを触っていました.
極端にシンプル(数ステップ)なルーチンを持つOpenGLアプリケーションを作成して,入力→ディスプレイへの描画における遅延時間の基準点を調べる予定です.
とりあえず実行ファイルは出来たので後は撮影とデータ整理ですね.ハイスピード撮影で動画は撮ったもののコマ数を数えるのが面倒でやっていない,という事態がここ2ヶ月程度続いているので・・・作って満足してしまうタイプなのかもしれません.

また,あのページ自体も「とりあえず測る環境は出来たので記事にする」という感じで公開した物なので,もうより体系的・定量的にまとめる必要があります.


あと,私はFPSでもスペースキーで射撃するという結構独特なスタイルだったのですが,レイテンシが気になってきたので構成を変えました.射撃はキーボードの下に置いたG302でやることにします.
こうすればクリック中に右手の筋肉の動きは制約を受けないし,レスポンスも最速クラスです.
マウスはアレ以来ずっとG100sを使っています.


もう一つ,COUGAR Gaming Mouse Pad - CONTROL series買いました.
このシリーズ,ControlタイプとSpeedタイプという2種類がラインナップされていて,Speedタイプは巨匠ことMysticSiva様がレビューされています.
Cougar SPEED gaming mouse pad | Chocolate Device

このマウスパッド,中々いい感じなのと,Controlタイプは3次元形状を持つ滑走面が売りらしいのでそのうちレビューしたいです.



と言いつつ・・・1,2月は相当忙しくなりそうであまり更新出来ない予定です.

2014/12/12

G100sファーストインプレッション

「より軽量であること」がどれだけ有効なのかを確かめるために試用してみるテスト.

錘を外すために通電して全スイッチの動作を確認したら即分解.開封から5分程度でしょうか.
多分自己最速ですね :D

ピストルサーバーをプレイしていて思ったのですが,このマウスは重量が軽いので慣性が小さく,ダイレクトに思考をマウスに伝えられる能力が高いと感じました.未だかつて無い一体感ですね.

G302の形状に慣れ,G100の形状にはすぐに適応出来たのでしばらくはG100sで行こうと思います.

初日でG100sに大きく傾いたので,AM010搭載の可能性が低いG300と,G100s選べと言われたらかなり微妙なライン・・・


ちょっと良いAIMだったので動画をアップロード :D


2014/12/10

ADNS-9500 Logitechカスタムを殻割りしてみる

巷でのブームに乗って撮ってみました.
Nikon 1 V1だと全然寄れないので苦し紛れでVICTORINOXについていたルーペで拡大してなんとか撮りました :D
ADNS-'S'9500
手元に潰していいセンサは・・・と思ったらG700の基板がぶち転がしてあったので,センサを外して,殻割り.
「殻を割った」というよりはプラスチックのカバーを剥がしただけですね.センサの基板とカバーはゴム状の接着剤で貼り付けられていました.

このセンサは表面の印字では"S9500 B1212TD 103"となっており,通常のADNS-9500の"A9500 xxxx"という印字とは異なっています.S9500はロジクール向けのカスタムモデルのようです.
ピン数はAは8x2の16ピンですが,Sは7x2の14ピンになっています.何が省かれているのかは詳細に調べないと分かりませんが,Aのデータシートを見た感じレギュレータの出力ピンを省いたのかなーとか思ったり.

フォーカスが外れていますが,穴の位置的にセンサーダイから外れた右端の四角い物体がレーザ発光部だと思われます.チップLED的なものを想像していたのですが非常に小さいです.
ADNS-9500はダイ上に発光部があるので外部にレーザ用のドライバ(トランジスタ)をぶら下げなくてはいけないのですよね.


●PMW3310DHと似ている?
rafa様の記事を見ると,PMW3310DHとかなり似ている構成だと分かります.
参考 : rafalog: Pixart PMW3310DH殻割り
周辺部を見れば判別は容易ですが,ダイのみで9500と3310差が見分けられる方は,極端にレベル高いソムリエですねこれ.是非お知り合いになりたいです.
また,センサの系統を考えるとADNS-9800もこれらとクリソツな可能性が高いと考えれます.

また,AM010ともおおまかなレイアウトは似ているのですよね.3050の世代からダイのアーキテクチャが変わったのかもしれません.


そろそろ,やり残した遅延ネタに移行していきたいのですが他にもやりたいことが幾つか・・・

2014/12/08

ROCCAT KAVEのモード設定

KAVE自体はもうディスコンになっており新型のXTD 5.1chが出ていたりとちょっと時期遅れな感じですが気になったので実験.

重量・性能共に最高クラスと名高いのヘッドセットであるROCCAT KAVEですが,手元のコントローラには[Game]  [Movie]なるモード切り替えスイッチがついています.この設定,どちらがTop Choiceなのか調べてみます.

とりあえず公式マニュアルを見てみましょう.
http://www.roccat.org/Downloads/Manuals/ROCCAT-Kave/ROCCAT-Kave_Manual_EN.pdf
OPERATION,Game vs. Movieから引用:
Two options are available to you which control how the headset sound is mixed: ‘Game’ and ‘Movie’.
The ‘Game’ setting is equivalent to the original 5.1 sound setting and is best suited to games, particularly first-person shooters.
If you intend to watch films on the computer, ‘Movie’ is the best setting as it ensures that the voices sound clearer and more defined.

何をもって"best suited to games"と言えるのか明確なDefinitionが示されていないので詳細は良く分からないのですが,とりあえず「ゲームやるならGameモードが最適で,映画を見るならMovieモードにすると良いですよ.」という事らしいです.ほほう.

何が起きているのか確認してみましょう.
検証に使うのはCS:GOのカスタムマップ「Audio Test Chamber」です.
http://steamcommunity.com/sharedfiles/filedetails/?id=337790613

KaveのGameモードとMovieモードを切り替えながら足音を聞いてみます.
モードの切り替えの時にラグや音の途切れが全くないので,スイッチでコントローラ内の回路を直接切り替えているみたいです.

足音を鳴らしたままで自分の視点をグルグル回すとよく分かるのですが,Movieモードだと正面±30°くらいに音源がある時だけ音が大きくなります.他の状況だとGameモードとの差は知覚できません.

本来は自分が回っているのですが,音源のほうが回っているとするとイメージだと下図のような感じ.


「現実に近い」というか音の軌道として正しいように聞こえるのはGameモードです.
ゲーム用途なら間違いなくGameモードを使ったほうが良いと思います.

Movieの方は前方の音を強調した音響設定にしてあるみたいですが,それがなぜMovieに適するのかは不明です.何らかのサラウンドの規格に準拠していたりするのでしょうか.


KAVEの簡易レビュー :

ついでにレビューをば.
結論から言うとこのヘッドセットが壊れたら2万円出して後継機のXTD 5.1chを買うレベルで気に入っています.
サラウンドに対応しているタイトルのみに限定されますが,2chヘッドフォンと比較すると「定位感」の次元が違います.BF3をメインでプレイしていた時に購入したのですが,立ち回りが変わりました.

わかりやすく言うと,目を閉じた状態で
・2chでプレイ・・・敵の居る方向が30度刻みで分かる
・5.1chでプレイ・・・敵の居る方向が15度刻みで分かる
という位の差です.
足音を聞いてPrefireする時の精度も上がりますし,後ろから足音がした時に厳密にどこに敵が居るのかかなり正確に分かります.


もちろんある程度のサウンドカードも必要ですが,定位感を重視するならサウンドカードよりもヘッドフォンがリアル5.1chな物を買うべきでしょう.
120HzのモニタとKaveのどちらかしか使えないのなら120Hzのモニタより60Hzモニタ+このヘッドフォンのほうが強いと思います.

私のデバイス優先度は,
マウス > マウスパッド > Kave > モニタ > キーボード > サウンドカード
という感じですね.あくまでサラウンド対応しているゲームに限定すればですが.


・音質
少し低音が強めでほかは普通という感じ.
他のチャンネルのドライバを入れなくてはいけないのでドライバ径も小さいですし,2chヘッドフォンだと考えると約1万円というのはかなりコストパフォーマンスの悪い製品だと思います.これに音質に期待して買う人も居ないでしょうけど.ただ,音質的には3000円くらいのヘッドフォンよりは良いと思います.


・装着感
耳全体を覆う感じのタイプで,重い以外は良いです.密閉型なので蒸れます.
私もゲーム中以外はスピーカーを使用しており,基本的Kaveは使いません.


Pros
・次元が違う定位感
・特に難点のない音質(特筆して良くないが悪くはない)
・耐久性が高い(3年間毎日数時間使用しても壊れない)
・装着感

Cons
・サラウンド対応タイトルでしか効果を発揮しない
・重い(人によっては装着できないと感じるほど)
・蒸れる(密閉型のため)
・音質の割には高額(2ch用途のみなら別なものを買うべき)

2014/12/02

CS:GOのFoV(視野角)を擬似的に下げてみる

超小ネタ更新.

Counter Strike Global Offensive では視野角(FoV, Field of View)は固定となっています.
垂直方向の視野角は一定で,モニタのアスペクト比に応じて水平方向の視野角が変化します.
CS:GOの日本語Wikiに大変分かりやすい図が乗っているので参照下さい.

アスペクト比に関しては,4:3+黒枠(Black Bars)の方が良いとか,4:3を16:9に引き伸ばすと敵の横幅が大きくなるので当てやすいとか,横方向の視野角が大きい16:9ワイドが強い等々の説ありますがプロですらこのあたりの設定はマチマチであり,「自分がやりやすいと思うものが一番良い」というのが一般的な意見のように感じます.

今回はいつも少し毛色の違った話で,簡単にFoVを下げる方法を考えようというトライです.

体感的にはこんな感じ.


やることは簡単で,

1.ディスプレイを物理的に近づける
2.HUDサイズを小さくする

この2点です.
2をやらないとレーダーやキルログなどの重要な情報が見れなくなってしまうので結構重要だなと思います.
HUDサイズはビデオ設定のHUDサイズから設定できます.



あとは下図の暗部を見ないようにするだけ :D



CS1.6で大変有名なSionさんもこういう意図で画面と近いようなプレイスタイルでプレイされていたのかもしれませんね.

【ニコニコ動画】Counter-Strike1.6 Sion -all view-

2014/11/29

レンズ距離とセンサの関係 ~ソール・オン・ソールにするとマウスに何が起きるのか?~

ゲーミング界隈では,いわゆる「純正ソール」の上に自分の好きなソールを重ね張りするというセッティングを使用している人がそれなりに居るようです.
詳しくはソール・オン・ソールの語源(?)ともなった下記事を参照下さい.
4Gamer.net ― DHARMAPOINTに聞く新型マウス「DRTCM37&38」。これが「俺達のIE 3.0」だ!?

また,重ね張りでなくとも自前のソール(トスベールや各メーカがラインナップしているマウス用のソール)を使っている人は多いでしょう.この時,純正ソールと厚さが違えばレンズと滑走面の距離は変化します.また,純正ソールを使っていてもソールの摩耗によってレンズと滑走面の距離は変化します.

レンズと滑走面の距離はデータシートで指定されており,メーカは純正ソールを貼った時にデータシートの距離と等しくなるように筐体の設計を行っているはずです.基本的にはデータシートの指定値で最もパフォーマンスが高くなるはずです.また,レンズと滑走面の距離によってDPIが異なる事を述べましたが,DPIの設定値が真に"Dot Per Inch"を意味するのもこの距離になります.


そこで,
ソールを重ね張りした時マウスはトラッキング面をどのように見ているのか?
そして,逆に純正ソールを剥がして薄いソールに張り替えた場合にどのようにマウスはトラッキング面を見ているのか?
というのを先日作成したシステムを用いて視覚的に解き明かしていきたいと思います.


装置概要

下記事参照.
#LogicalGaming: マウスの光学センサが見ている世界を見てみる

今回はマウスパッドをSteelSeries QcKとして滑走面とレンズの距離を変化させます.
そして各距離でのピクセルアレイの様子を観察します.

高さを変化させるのに使用するのは一円玉で,一枚の厚さは約1.5mmです.
rafa様のようにすきまゲージがあれば良かったのですが...

今回は筺体を外して基板とレンズのみの構成にします.
これでデータシート通りの寸法で測ることが出来ます.
ADNS-5090 Low Power Optical Mouse Sensor Datasheet
Figure 5. Distance from lens reference plane to tracking surface (Z)


結果

0枚から4枚までの順に下に示します.
0枚(0mm)
1枚(1.5mm)
2枚(3.0mm)
3枚(4.5mm)
4枚(6mm)
この結果を見ると,もう少し詳細に調べたほうが良さそうにも思えますね.

1.5mmが一番良好な結果になりました.標準の距離は2.4mmなので,差が小さい3.0mmの方が良い結果になると思ったのですが.
これから考えると,ソールが多少薄くなる分には性能には大きく影響しない可能性が考えられます.
逆に厚めのソールを重ね張りする場合は性能に影響がありそうです.一時期ソールの重ね張りをしていた時,高速動作時のトラッキングエラーが頻発した経験の裏付けが取れた感じですね.

また4.5mm程度,つまり標準の距離から2.1mm程度で暗くなり始めます.6.0mm(標準の距離から3.6mm)程度では真っ暗になるという結果になりました.
これから考えると,前に示唆した通りLoDが長い機種は「特にカットオフのアルゴリズムは使用していない」という可能性が高いということが分かります.

2014/11/28

サーバーのPingが高いので何とかしてもらった話

近頃のGO界隈で流行りのVPSサービスはFOREVER.NETですが,仙台からこのVPSに繋ごうとするとPingが140ms程度になっており中々困っていました.他の国内のサーバは10~15msなのですが.

「そのうちに治るかな」と1,2週間様子見していましたが変化がありません.
コマンドプロンプトにてサーバのIPでtracertしてみたところVPSの運営会社のノードまで到達した後100ms遅延しています.(何故かオーストラリアへ行っている模様?)

とりあえずサイトの問い合わせ欄からコマンドプロンプトでtracertしたログを添付してお願いした所,翌日には改善しておりPingが10msになっていました.


今回の場合,直接お願いして改善して頂きましたが,こういう時普通ならどうすれば良いのでしょう?とかネットワークの知識は全然ないので思ったりもしました.