2014/11/16

USB HIDデバイスのクリックの最速応答を考える

rafa様が公開されている超有益かつ膨大なデータである下記事ですが,つい最近最速のマウスが更新されました.

rafalog: ゲーミングマウスのクリック応答特性を比較する The measurement of gaming mouse button lag
http://utmalesoldiers.blogspot.jp/2013/02/114.html

記事によると,TL8のG300と比較して1.2ms高速というのが最速値です.

「じゃあ,ただのデバイスオタクがファームウェアを書いたらどうなるの?というか限界まで簡略化すればどこまで速くなるの?」という疑問があるわけでして,レッツトライでございます.


ファームウェア

ソースはこんな感じ.
-------------------------------------------------------
ここまで初期化(USB,Clockのスタート等)
while(1)
    {

        //USBのACK待ち
        while(!USBFS_1_GetEPAckState(MOUSE_ENDPOINT));


        //Pin_1を読んで,Lowなら右クリックが押されたとして記録
        mouseData[0] = (!Pin_1_Read())*2;


        //USBコンポーネントに右クリックの状態のデータを送る
        USBFS_1_LoadInEP(1u, mouseData, MOUSE_DATA_LEN);
    }

-------------------------------------------------------
3行,というかACK待ちとかUSBのコンポーネントへデータ転送する処理以外は一行というファームウェアです.アセンブラで考えるとざっと数~十数クロックでしょうか.APIの処理時間は良くわかりませんが:D
これならCPUは33MHzで動いているので1μs以下で終わるはずです.

これでスイッチのON/OFFを読んでUSBで転送するだけのマウスの出来上がり.


測定方法,スイッチングについて

基本的な測定方法はrafa様の記事と同様ですので割愛.都合でマウスはG300rですがリネーム品なので変わらないはず.

しかし,私の書いたファームウェアの方はチャタリング処理を入れていないのでスイッチングはPSoC5LPで電子的にやってもらいます.

Pin_1が入力,つまり右ボタンです.G300の方を左ボタンとします.
Pin_2はスイッチです.1秒間に一度ONになります.(構成の都合で1024Hzを1024で割っています.)
このクロックは初期化時にClock_1_Start();を呼べば後はMCUのCPUを介さず勝手に動くので処理時間に影響はありません.


測定結果

生データです.良きに計らって下さい.
G300r vs LogicalGaming Advanced Technological Demonstrator Mouse
https://docs.google.com/spreadsheets/d/14YjSU0z3lwasOa2duRpI_JlFT0zq0COzGRFpRNL1nhQ/edit?usp=sharing

平均はG300rと比較して,0.76ms高速という結果になりました.

データを見ると0.1~0.3msのものと1.0~1.2msのものが多いですね.これはポーリングのタイミングにたまたまあぶれた時のばらつきだと考えられます.
ここで1ms以上差がある場合に関してのみデータを拾って平均を取ると,1.09msとなります.
これはIkariと同じくらいの値です.ここから考えると,TL8とIkariはおそらく割り込みを使っていて,スイッチが押された瞬間に最優先でボタンが押された旨を転送するルーチンを持っていそうです.
ここらへんの機種は,かなり気合が入っていると思います.



まとめ

測定結果から考えると以下のことが分かります.

・上位陣のIkariやTL8はおそらく割り込みを使って最優先で処理している
・G300から-1.1ms程度がUSBの仕様上の最速で,IkariとTL8より劇的に速い機種は存在しないはず

上位の機種はチャタリング対策は転送した後にやっているんだと思います.
おそらく,「押されたらまず転送,その後の十数msはスイッチの状態に関わらず押したままにする」という感じでしょう.確かに毎秒100連射出来る人なんていませんしこれでも良いです.
というか私も最近こういうコード書きました.

2014/11/15

レビュー:G302 MOBA ゲーミングマウス - ロジクール ( Logitech )

Review : G302 MOBA Gaming Mouse Logicool ( Logitech )

Logitechファンボーイ化が著しい昨今ですが,G302着弾からの即分解でレビューを行います.

Roccat Lua,G402,Perixx MX-2000Ⅱ等々,マウスパッドも含めると10発以上の弾はあるのですが,ブログ更新へのモチベーションは唐突なものです.
今回の場合,G300sへの期待が高まるばかりなのでG302で予行演習をしておこう的な :D

--------------------------------------------------------------------------------------
2014/11/15 初出
2014/11/16 DPI設定等のスクリーンショットとコメントを追加
2014/11/23 1週間での使用感を追記
--------------------------------------------------------------------------------------

Overview

[JP]G302 MOBAゲーミングマウス - ロジクール
http://gaming.logicool.co.jp/ja-jp/product/moba-gaming-mouse-g302

[EN]Daedalus Prime G302-MOBA-Gaming Mouse-Logitech
http://gaming.logitech.com/en-us/product/moba-gaming-mouse-g302


特徴的なのは後部の蜂の巣状のイルミネーションでしょう.カタログ上ではG402の方が横幅が大きい(72mm)ですが最大幅の部分は底面付近のスカートの部分ですので,持つ部分の横幅はG302の方が大きいです.持つ部分の横幅は,おおよそG402が60mm,G302が65mmです.横幅に関して言えばG302の方が大きいと感じる方が多いと思います.


底面デザインはGx02系は六角形を基調としたデザイン統一されています.センサー周りのソールは理由が気になるところです.配置から推測すると埃の侵入防止なのかなと思います.
分解は先端(画像左)に2つと後端(画像右)1つの小さめのプラスネジを外せば上蓋が外れます.


Internal Structure

内観の全体像はこん感じになります.後部のLEDが目立ちますが,他は妙な部品が生えている訳でもなく極普通の構成と言った感じです.手前のボケている部分はサイドスイッチ用の小型基板です.

写真のLEDの光が当たっている部分がポイントで,上半分は半透明の樹脂て覆われています.これによって使用者には眩しくないように見せて,下半分は下の写真のようなマウスパッドへの照明効果を作っています.ユーザビリティを考慮したギミックですね.



ロゴと後部の光は細かく制御出来ます.ブリージング効果のON/OFF,周期と最大輝度を変更
出来ます.

ブリージング効果をOFFにすると双方の明るさを個別に設定できます.
輝度を最小にすれば点灯しなくなりますのでロゴのみを光らせる,とか全部消灯するみたいな設定も可能です.

光源の制御は約10ms周期のPWMのDuty比を変えるというスタンダードなもの.輝度が最大以外の場合,高速に振ると光が分身するのでPWM周期をもう少し短くしたほうが良いと思うんですけどね.


・新機構
巷で噂のスイッチ部.バネのおかげがスイッチ部の筐体のおかげか押した感じはカチカチ感が少なく,若干「しっとり」とした感じです.ストロークはG402やG300(r)と比較すると少し深め.
個人的にはこのスイッチの感触はかなり好みです.
G300rとG402とG302で連射速度を比較したのですが回数はほぼ同じでした.連写してる時のフィーリングはかなり良いです.

最近のLogitech製品でよく見かける謎の樹脂片は健在.
個人的な推察では表面を滑らかにしたいからだと思います.見ての通り,周囲のような通常の成形だと表面がザラザラしていたりヒケがあったりするので,別に専用の樹脂を取り付ける事でマイクロスイッチのキートップとの接触面の品質を安定させたいのではないかと思います.

 分解で注意したいのがこの絶縁パーツ.初めは製造で混入したゴミだと思ったのですがUSBコネクタ部の絶縁パーツです.
これがないとネジでUSBコネクタがショートしてマザーボードごと持っていかられるかもしれません.

LED部. G402もロゴ用のLEDって緑と青の2色のチップLEDが使われていた記憶がします.ロゴ色にこだわりがありそうです.
左の①~⑫まで印刷してあるシルクには③にチェックが入っていました.


Switch

メインはF2FC-F-7N(20M)で,OMRONの2000万回耐久モデルです.

中ボタンはいつものゴミタクトスイッチと思いきや・・・見た目は極普通のタクトスイッチですが押した感じがマイクロスイッチっぽいです.従来機種と比較して中ボタンの感触がかなり良くなりました.DPIサイクルがバインドされている背面中央のボタンはKailh製.

サイドボタンもKailh製.擦れていて微妙なのですがNF 16ZA(?)という印字があります.
基板裏面を見たらヤニの後があったのでサイドボタンは手半田みたいですね.

サイドも含め全て日本製OMRONのマイクロスイッチ搭載!みたいな謳い文句でPro版とか出ると面白いですよね.私は欲しいです.


Main Control Unit



いつも通りのSTMicroelectronicsのARM®-based Cortex®-M3搭載32ビットマイコン.
[PDF]STM32L100R8のデータシート
Ultra-low-power 32-bit MCU ARM®-based Cortex®-M3, 128KB Flash, 10KB SRAM, 2KB EEPROM, LCD, USB, ADC, DAC
L100なので超低消費電力モデルですが採用理由はローコストだからだと思います.
今年(2014年)の6月頃に製造されたもののようです.

これのポイントの高いところは2KBのEEPROM(いわゆる内部メモリ)がMCU内に搭載されていることですね.はじめから内臓されていればパーツ代や実装コストがカットが出来そうなので今後はこういったMCU内のEEPROMが主流になっていくような気がしますね.

下の水晶発振子はH8.000H4Cという印字がありますが詳細不明.
Internal Clockが搭載されているのに外部のものを用意する理由が気になります.基板に金属パーツが付いていると気合が入っている感じがしてすごく好きですが :D


Sensor

噂通りのAM010です.データシートが無いので推測ですが,M1421TはサブコンがM,製造時期は2014年21週(5月頃),センサーダイのソースがTという意味だと思います.018はロットかな.


「A」のロゴがあるので純正レンズです.レンズにも印字があるんですがよく分からないんですよね.多分ロットなのかな・・・
LEDはおそらくG402と同じで直視すると少しだけ赤く見える程度の赤外線LEDです.普通に見るだけなら害はないですが光学機器で見てはいけません.

DPI / ボタン / ポーリングレートの設定はこんな感じです.いつもどおりのLGSですね.
噂(rafa様の記事参照)通り,1プロファイルのみです.前述のEEPROMが2KBが関係しているかもしれません.2KBも何書いているのかは謎ですが,マクロ機能で何が入力されるか分からないので多めに取っている感じかもしれません.

2000DPI以降は補間らしいので事実上2000DPI以下の運用が基本となります.補間のON/OFFに関わらず240~4000まで80刻みで設定可能です.
DPI設定は5つまで設定できますが自分は感度レベルの個数を1にして完全に固定DPIで運用しています.

メイン・ホイール・サイドの5ボタンを抜くと余っているボタンが1つなので,DPIを頻繁に変えたい人はDPIサイクルを割り当てるしか選択肢がなさそうです.


使用感

良いです.G402とG302のどちらかを選べと言われたらG302を選ぶでしょう.
なぜならそっちのほうが軽いから.以上.

持ち上げやすさ(ホールド感)では別系統の形状ですがどちらも支障がないレベルですね.G302は形状が特殊なので持ち方によってはかなり相性が出ると思います.
購入を検討している方は一度店頭で触ってみることを強く推奨します.
私の場合は横幅が一番太くなっている山の部分に親指と薬指を引っ掛ける感じでホールドしています(伝われ).
今までラインナップされていた製品のホールド感とは別物です.G300でもないしG100でもないです.大まかな形状はどちらかと言えばG100に近いですが,大きく張り出した横の山と増量された重量があるので別物に感じるような気がします.前から見ると逆三角形になっていて持ち上げやすい形状はG300のコンセプトを意識しているとも言えるかも.

上述しましたが,スイッチの感触はかなり好みです.

G300と選べと言われたら,考える時間がもう一週間必要です:D
センサー性能はこちらのほうが良いですが,ホールド感や小ささではG300に軍配が上がります.重量差は気になりません.
※個人の感想であり,個人差があります.

しばらく使ってみようと思います.Logitechが過剰に広い横幅に設計した意図を自分なりに見つけたいので.
なにはともあれG300sへの期待が高まりますね.


・一週間使ってみて
ちょっと早いですが,「自分の場合に限っては」G300の方がベターという結論が出たので試用終了.

最終的に,左の山は親指の先に,右の山は薬指の第一関節付近に引っ掛ける感じでのホールドとなりました.小指は薬指の更に後ろで筐体側面に軽く触れる程度です.
手のサイズ的には親指と薬指で大きな物を持っている感じではあるのですが「一応可」というレベルでしたが,センサー性能とマウスを大きく感じるホールド感,重量を勘案した結果G300の方が良さそうだという感じでした.

要するに,「性能も質感も上位互換な感じなのだけれど,G300より大きくて少し重いのでG300の方が良いよね」という感じです.G300にも不満がないわけではないのですがあの軽さと小ささに慣れると戻れないものがあります.

こだわりがある人でなければオススメ出来そうですが,問題は価格でしょうか.全体的な実装・性能・質感やクリックの新機構などを考えると軽量級マウスの中では高いレベルにあると思います.筐体サイズに関しては間違いなく大型機ではないですが小型だと思えるかどうかは持ち方とオペレータの感覚に大きく依ると言えます.個人的には形状は大きく違いますがG402と同等クラスのサイズ感のように思われます.

これで更新は終了予定です.


おまけ:

・軽量化
DPIサイクルとロゴへのクリアパーツは簡単に外せるので軽量化出来ます.ボタンがひとつ使えなくなりますが,さらなる高みへを目指す方は是非.


・クイックスタートガイド
 
 
Unboxで笑ったのは始めてです.

・基板の画像
個人的メモとして基板の画像を貼り付けておきます.
 

2014/11/03

CS:GOでのウィンドウモード,フルスクリーン,フルスクリーンウィンドウの遅延

またも遅延ネタで行きます.

このネタ,すべてのゲームでの各パラメタのとりうる組み合わせすべてに関して遅延時間を測ると「ゴール」なのですが,このとりうる組み合わせの数は文字通り無限なので,遅延界のグローバルエリート的な人にプロジェクトファイルを差し上げるので後はやって頂きたいのですが...我こそは遅延界のザ・グローバルエリートだ!という方は連絡して下さい :D

本記事では,下図に示したディスプレイモードの各設定について,[マウスの入力→ディスプレイの描画]までの描画遅延時間を計測し,最も短い描画遅延を達成できるセッティングを明らかにしていきます.

今回はCS:GOに関して検証・計測を行いますが,SourceEngineである各タイトルに関しては大きな差はないと思われます.また,その他のFrostbite等のゲームエンジンに関してもある程度の参考情報にはなると思うので,是非活用して下さい.

●検証方法

下記参照.

#LogicalGaming: ゲーム毎の描画遅延を測定してみる
http://logical-gaming.blogspot.jp/2014/10/blog-post.html

今回は本記事最初の図のディスプレイモードの項のみを変更して遅延時間を計測します.


・DWMについて
DWMに関して詳しくはまたいずれ.
今回の場合,コンペティティブなプレイヤーでDWMが有効であるのはあり得ないので,いわゆるWindows AeroとDWMはOFFにして検証します.


●結果

今回はグラフありです.


Window             17.3 ms
FullscreenWindow   17.8 ms
Fullscreen         16.1 ms
予想通り,僅かにフルスクリーンが速いという結果になりました.
しかし,差は1ms程度なのでフルスクリーンウィンドウと大きな差があるわけではありません.また,自分でもプレイしてみて知覚できる程の差は感じられませんでした.
万全を期したい場合はフルスクリーンでプレイする方が無難でしょうが,基本的にはフルスクリーンウィンドウで享受できるメリットも多々あるので,好きな方を使うと良いと思います.

ちなみに自分は基本的にフルスクリーンでプレイしています.

2014/10/21

描画遅延について思うこととか

図なし文字だけの、半ば愚痴じみたメモ。新しい情報とかは特に無いのでひっそりと更新。


・遅延の定義
そもそも描画遅延って表現がどうなんでしょう。
諸々の定義や測定手法とかを自分なりに「ゲーミング環境における入力-描画遅延の定量的評価」なんて名前のPDFファイルにしていたのですが、ファイルの海に沈んでしまいました。

とりあえず、最近私が言っている描画遅延は、
【手での入力→マウス→PC→ディスプレイ→カメラ】へ動作が反映されるまでの時間としています。
しかし人体の表面は弾性体ですし、加速特性が緩やかという特徴があるので、とりあえず
【マイコン→PC→ディスプレイ→カメラ】という流れにして、当該間の所要時間を測ったというのが前回の記事でした。

現実世界では、動作させたい物(普通は人体ですね :D)と実際に作動する物が同じですので、例えば手の動きが手に反映される時間は0になります。
もちろん作動させるシステム(銃・機械等)の動作にかかる時間があるので、現実世界においても無遅延では無いのですが、こちらは完全にメカニカルエンジニアリングの世界ですし、機械においてはバックラッシ等が必要なので理論的に0には出来ません。



・昔もトライした話
実は過去に人の手と電飾付きゲーミングマウスでトライした事はあったのですが、マウスの動き始めは一桁カウントになる場合が多く、ミリ秒単位の精度を出すにはそれなりの根気と工作が必要だということで休止させていました。
その時はUSB HID制御無しで精度を出すそうと思っていて、マウス自体に物体を衝突させて一気に加速させる手法あたりを考えていました。
後はマイコン制御のモータを使って制御するとか、こっちは結構遠回り感があります。

今後のことを考えると、センサ+マイコンの速度・加速度応答の特性を測るにはどちらにしろそれなりに速いモータを制御しないといけないので、機械加工とモータドライバ作りは必須なのですが。「やりたいこと」と「技術力」と「時間管理能力」がチグハグな感じです。



・システムのコンフィギュレーションについて
rafaさんから、デバイスやゲームエンジン等のシステム全体のコンフィギュレーションを変えてテストすればより低遅延な設定を模索出来るのではないかというコメントを頂いて、とりあえず自分の環境ではトライしてみようかなと思っています。
とりあえずCS:GOのグラフィックの設定をいじくり回す所からですね。あとはオンボードの不使用デバイスを無効化したり、ぶら下がってるHID達を取り除いてみたりモニタの固有機能のON/OFFとかは調べたいです。



・より網羅的に遅延を考える
遅延時間を変えうる要素として、入力側から順に

マウス
OS
Raw Input
ゲームタイトル
各タイトル内でのコンフィグ
GPUベンダー
GPUのアーキテクチャ・機種
各デバイスのドライバのバージョン
各デバイスのファームウェア
ディスプレイそのものの
各ディスプレイの固有機能

などなどがパッと思いつくだけでも挙げられます。
勿論、財力的にも人的リソース的にも私だけで全部テスト出来ませんし、そもそもする気は初めからありません。
そういう意味ではゲーミング環境における遅延測定のフレームワークが必要なのかなといった感想を抱きます。更に先を見ると、最も遅延が少ない状態へ自動でチューニングしたりとか出来ると極低遅延環境実現への夢が広がります。
また、複雑なシステムの測定では、厳密にレギュレーションをして評価する必要があるので「ベンチマークレギュレーション」的なものも合わせて必要なのかもしれません。
まあ、同一システム内での相対値だけ見れば違うシステムでも大体は適用出来ると思うのですが。とりあえず自分で測った分は公開したいと思います(私がトライすれば、ですが)。

遅延自体は、ある程度ゲームをやっている方なら体感して、注意していると思うのですが、日本だとあまりフォーカスされない話題ですね。やはり、昔は機材も高価でしたしミリ秒単位の定量的に測れない物だったということも関係しているかもしれません。
VRの辺りからはチラホラ話が出ているような気もしますし、もう少し盛り上がると良いのですね。



・Ask.fmはじめました
URLはこちら。
http://ask.fm/systema_

デバイスに関しては大した台数持っていませんし、やっている事が低レイヤの部分ばかりなので「このマウスどうですか?」的な質問には全然答えられません。またゲーミングデバイスに関しては偏見的かつ、かなりラジカルな思想なのでその点に関しても微妙。
左利きなのに右手でマウスを使っていて、射撃キーをキーボードにバインドしていてG300rが最強だと主張するゲーマーに聞くことでもないと思います。

「G402に載ってる加速度センサの詳細を教えて下さい」とか「マウスに付いているLEDが増えると遅延が増えるの?」的な質問なら嬉々としてお答えできるのですが。

また、匿名性を上げることで、ブログの内容についての質問とか誤りの指摘を期待しています。
自分は記述を端折る癖があるので、わかりづらい所とか可視化出来ると良いなと思っています。こんな感じで結構ネガティブなモチベーションですが、分かりづらかったり、嘘を書いてそれを公開していても仕方ないですからね。

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.

おまけ

撮影した動画は以下。

2014/10/14

FPSにおける武器の精度について考えてみる

CS:GOを題材に挙げて説明しますが、「精度」の概念が存在するFPS一般において適用できる話になります。ほとんどの人は体感的に分かっていそうな概念を図解してみようというトライです。

●精度とは

この記事で言う「精度」とは、いわゆる初弾精度のことです。この初弾精度とは、
銃を発射した時に一発目の銃弾が着弾する可能性のある範囲の大きさ
です。
着弾する可能性がある範囲が小さい場合を精度が良い(高い)、
着弾する可能性がある範囲が大きい場合を精度が悪い(低い)と言います。
精度の良し悪し

もちろん、連射するにせよ一発しか撃たないしても(初弾)精度は変わりません。
弾丸が着弾する可能性のある範囲は、基本的に円形になります。


CS:GOで言うと、サブマシンガン等が精度が悪く、アサルトライフル系が精度が良いイメージですね。
ちなみにCS:GOでの精度は図のようなBuy Menuの赤線の部分で確認できます。
Buy Menu
AccuracyRangeを見てみると、「思ったより高い」とか「低い」とか感じた武器があると思います。武器の強弱は他のパラメータも大きく関係しているので武器の使用感から感じるものとは少し違った感じになりますね。

●確実に着弾する距離は?

CS:GOの中にあるAccuracy Rangeを元に考えてみます。
(他のゲームでも似たようなパタメタがあると思いますのでご家庭のパソコンで調査して下さい。)
ちなみにこの値ですが、CS:GOのRelease Notes for 7/1/2014によると
- Accurate Range ( The distance up to which 100% of shots will land within a 30cm circle. See cl_weapon_debug_print_accuracy )
ということですので、
30cmの円を狙って撃った場合に確実に着弾する距離の事を示しています。
要するに「完璧なAIMであれば確実にヘッドショットが出来る距離」として良いでしょう。(ちなみにCS:GOの頭のHitboxは四角いので実際はもう少し複雑。)

と言っても、頭に当てれば即死か90hit程度して「ほぼキル」状態に出来るアサルトライフルとは違い、威力の低い武器は胴体に余計に数発入れる必要があったりするので精度以外にも考慮が必要です。


逆に、「これ以上離れるといくらAIMが完璧でも、弾が外れる可能性がある」ということも意味します。AK-47を例に取ると、40mで撃ち合った時、1ピクセル分の誤差もなく完璧にAIM出来たとしても、胴に当たったり頭の横に着弾したりしてヘッドショット出来ない可能性があります。
これが結構重要で、例えばdust2でPit(坂下)とA-Siteの間くらいの遠距離撃ち合っても、弾が当たるかどうかは乱数生成器が選んでいるので運要素が強くなります。AIMが完璧だとしても本当に弾が当たるかどうかは、撃ってみるまで分かりません。

(AKの場合)~31m : 撃てば確実にHSになる                  |  31m~ : どこに当たるか撃ってみるまで分からない

ロングレンジでの撃ち合いでスナイパーライフルが強いのは、「敵がAIMerでもこちらの被弾リスクを確率的に下げて交戦できる為」というのも一つの要因です。

●精度が高いとAIMの許容範囲が増える

前項で精度が高いと確実に着弾出来る距離が長くなる事を説明しましたが、もう少し実戦よりで考えてみましょう。そもそも人体に1フレーム時間以上の応答時間(反射神経)が存在する以上、脳で応答時間分の位置推定を行ってAIMする位置を決める訳で、位置推定の精度の差こそあれ「完璧にAIMする」ということは出来ません。

そこで考えたいのが、「どれ位までAIMの誤差を許容できるか」という事です。

ここではGalilとAK-47を例に考えてみましょう。
GalilのAccuracyRangeは23m、AK-47のAccuracyRangeは31mです。
また、簡単のため敵が23m先に居ると考えましょう。
Hitboxをこんな感じだと想定します。

GalilのAccuracyRangeを考えると
着弾範囲はこんな感じになります。
この場合完璧にAIMされているので
撃てば確実にHSになります。
 では少しずれるとどうでしょうか。

図のように、Hitboxからはみ出た部分が発生します。
はみ出た部分に着弾する可能性もあるので
「確実に」着弾するとはいえません。

AccuracyRangeの大きいAK-47の場合についても考えてみます。
完璧にAIMすればこんな感じ。


先程と同じくらいずらすと・・・
どこに着弾してもHSになります。

精度が高いとAIMが大きく
ずれてもHSに出来ます。


許容できるAIMの誤差をおおよその図にしてみました。
小学校でやる長方形の中を転がる円の中心の軌跡を求めるアレですね :D
許容誤差の範囲
 このように精度が高いと、「確実にHSするのに必要なAIMへの誤差」の許容範囲が大きくなる事がわかります。

AccuracyRangeが長く(50m)AIMの許容範囲が大きい事が、個人的にSG556(SG553)を推している要因の一つだったりします。

●着弾分布

精度に関してもう一つ考慮に入れるべきなのが着弾分布です。
着弾分布とは端的にいうと、「着弾範囲内の中の任意の点に着弾する確からしさ」ですね。
CS:GOは手元にデータがないのでBF3のデータを拝借。
BF3 Accuracy plots, shooting simulator | Symthic
http://symthic.com/bf3-accuracy-plots?attc=Foregrip

図の初弾、つまり黄緑の部分に注目して欲しいのですが、明らかに中央付近の着弾回数の方が多く見えます。これはつまり、乱数生成の際にガウス分布的に着弾を中央に寄るように調整しているようです。
CS:GOの厳密なデータは手元に無いのですが、私の体感では明らかに中央に寄っています。ジャンプ中に射撃すると、ど真ん中に飛んで行く事がままありますし。そもそもAccuracyRangeが31mしかないAKがこんなに当たるはずがありません。

着弾分布を考えると、AccuracyRange以上で交戦しないといけない場合でも頑張ってAIMすれば当たる可能性はそれなりに上がるということですね。がんばりましょう。

●精度が低い場合について考える

逆に精度が低いと何が悪くて、何が期待できるのかについて考えます。
・悪い事 : 弾が外れることが多い
図のようにAccuracyRangeに対してかなり長い距離で交戦した場合に、多くの場合ヒットボックス以外の場所に着弾しますね。

もはやワンチャンしかない感じ


・良い事 : (稀に)AIMが適当でも当たる可能性がある

まぐれHSの図
ジャンプ中AIMも合っていないのに適当に撃ったら頭に当たった、なんて状況が極稀に起きますね。それと似たような感じで、「AIMは合っていないのだけれど武器の精度が低かったので運良く弾がレティクルから外れて飛んで敵に当たった」という状況です。
精度の低い武器で遠距離でもHSがガンガン当たる時は「強い」ではなく「運が良い」という状態表現のほうが正しいです。

まとめ

まとめます。
・一般的に精度が高ければ高いほど良い
なぜなら
・有利な交戦距離が伸びる
・AIMの誤差を許容出来る

・もちろん精度以外の武器性能も大事
・自分の武器と相手の武器の精度差を意識する
・着弾分布的を考えるとAccuracyRange外でもAIMを頑張ると当たるかもしれない

後、精度が高い銃を使うメリットとして全てが自己責任になるってのもありますね。
精度の悪い武器でミスショットしても、原因を武器の精度せいにしてしまい上達しませんし。
AIMの許容誤差あたりは、ちょっと新規性あるかもとか思ったりして、超超基本的な事ですが記事にしてみるテスト。

2014/10/05

Dell mini9 (Inspiron 910) に Windows 10 Technical Preview をインストールしてみる

死蔵していたリグを活かしていこう、というわけで話題のOSをインストールしてみました。
「活かす」というよりは検体として供出した感じもありますが :D

Dell mini9は、00年代にパーソナルコンピュータの在り方を変えたNetbookというカテゴリ中でも第2世代と呼ばれるあたりの時期にリリースされた機種ですね。
1コア1.6GHzのAtomCPUにメモリが1GB、1024x600、SSDは16GBと言った感じ。
(今回使用するのは購入後に少しだけ手を入れていて、SSDをRunCoreの32GBのものに、メモリを2GBに換装しています。)

この頃は(特にアジアの)各メーカが似たようなスペック・価格で一斉にリリースしましたが、その中でもDell mini9はトップクラスに(上からの投影面積が)小型な機種でした。要するに物理的な秘匿性が高いのです。
当時の私は計算機を所有することが許されていない状況に置かれていたので、どこにでも隠せるような小ささは非常に重要でした。
未だに超小型クラムシェル型計算機に拘泥しているのはここらへんが原因だったりします。


それはさておき、インストール手順と気になった点をいくつか。

配布されているISOイメージから「Windows7 USB DVD Download Tool」でUSBメモリに焼きこんでインストール用のフラッシュを作成・インストールしました。
詳しくは下記参照。

・How to install Windows 10 on a PC using a USB stick - PC World Australia
http://www.pcworld.idg.com.au/article/556362/how-get-windows-10/

ここてちょっと詰まったのが、C123というUSB3.0対応のフラッシュメモリでイメージを焼いた所ブートできない事案が発生しました。新しいフラッシュメモリなので、数年前のBIOSからは見えないようです。なので4年くらい前のELECOMのMF-AU2A04GGTというフラッシュメモリに変更。
※Gの付く某有名ニュースサイトさんは、USBフラッシュメモリの容量は4.5GB以上必要と書いていらっしゃいますが、32Bit版ならファイルサイズ自体は3GB程度で、手元にある4GBのUSBフラッシュメモリでもインストール可能でした。

インストールに関してはインストールウィザードに従うだけなので割愛。英語版なのでウィザードも英語、インストール後のUIも英語です。

無事インストールしましたが、解像度が800x600以上に上げられません。
グラフィックチップ(Intel 945)のドライバが必要なので用意します。

・Windows 7* 用インテル® グラフィックス・メディア・アクセラレーター・ドライバー
 https://downloadcenter.intel.com/Detail_Desc.aspx?lang=jpn&DwnldID=18223

これで解像度は1024x600で出力されるようになりました。私はアス比が狂っている状況が非常に苦手なのでこの作業は必須ですね。


問題は無線LANが動かないこと。ドライバが原因かとも思ったのですが・・・
原因は無線LANのスイッチのユーティリティがインストールされていない為でした。
というわけでWireless Select Switchをインストール。

・Dell Battery Meter/Wireless Select Switch, v.1.0.0.9, A00 ドライバの詳細 | Dell 日本 http://www.dell.com/support/home/jp/ja/jpbsd1/Drivers/DriversDetails?driverId=C5G1W

あと2つ不明なデバイスが見えますが、Win7を入れてみた的な記事がチラホラあるので参考にすればサクッと潰せそうです。

ここまでで、
ディスク容量は32GB中・・・使用 : 9.18GB、空き : 20.6GB空き、
メモリの使用量は・・・・2GB中0.6GB使用でした。

結構軽量なんですね。死蔵しているガラケーPCのF-07Cの活路が見えてきたような。
体感的にはXPよりは遅いかなとか。しかしXPが選択肢として挙げられない現状では、7ではなく10を選ぶかなという所。新しいOSなのでブートは速いです。

UIに関しても良いのではないでしょうか。個人的には8も分からなくはなかったのですが、解法も示さずに解答だけ提示してもユーザは付いてこないという教訓が得られましたね。

2014/09/24

Twitterアカウントを分離しました

前々からずっとやろうと思っていたのですが1年経ってしまい、今月の中旬に色々と一区切り付いたのでやっと成し遂げたという話。

IDは以下のように移行しました。(末尾に”_”が付いてしまったのが遺憾ですが。)
@aaax3001@systema_
FPS・デバイス関係の方は@aaax3001をフォローしていても分野的にあまり得るものがないと思うのでリムーブしたほうが良いと思います。逆も然りですが。
厳密なつぶやきの内容のジャンル分けは、各アカウントのプロフィール文に準じます。


分離した経緯とか自分のTwitterの利用ポリシとか :

@aaax3001は元々3DCGに関する情報収集の為に作成したアカウントで、フォローしているのは3DCG関係の人が殆どでした。
それが時を経る間にFPS・デバイスの方の活動でのつながりからのフォロー・フォロワーが増えてきたので、アカウントを分離した方が互いの「より良いTwitter」のためには良いだろうということですね。

私はフォローしている人が私の興味のない分野の事について呟いていても気にならない、言うよりは、興味のない分野のつぶやきが自分のタイムラインに支障のない範囲である場合でしかフォローしません。
私(あくまで私に限ってですが)の利用ポリシとして、相互フォロー等は特に気にせず、「読みたければフォローして、特に欲しい情報を発信している様子がないならフォローしない」という使い方です。

まあでも、発信者としての自分がフォロワーの半分くらいに対して興味のない事、半分に関しては興味をある事をつぶやくってどうなの?というのは常日頃思ってる次第です。
例えば、私が新しく出てきたレンダリングエンジンに関してツイートします。3DCGの人達的には、有用かどうかはともかく、無為では無いはずです。逆にFPSとかデバイスの人達的には、リアルタイムならともかくプリレンダムービー用のレンダラの話なんて殆どの人が興味を持ちません。
逆に3DCGの人達的には、9000円もするマウスパッドの摩擦係数がどうたら、なんて物凄くどうでもいい話でしょう。マウスのセンサから出てる信号のオシロスコープの画像なんて見せられてもさっぱりです。

そんなこんなでTwitterのアカウントを分けることにしました。
両方読みたい人は(そんな奇特な方がいらっしゃれば、ですが)両方フォローすればいいし、片方しか興味が無い方は片方だけフォローすれば良いですからね。
ちなみに@systema_の方は皆さんとMM行ったりデバイス情報を仕入れたりしたいのでフォロー返し率は@aaax3001の約50%と比較して遥かに高くなると思います。

PSoCまつり2014

おそらくデバイスが絡まない最後の電子工作系エントリになるでしょう。

先日告知したPSoCまつり2014(詳細)に参加&登壇してきました。
スイッチサイエンスと言う電子工作界隈では有名な通販サイトの本社の会議室で行われましたが、例によって写真を取るのを忘れたので画像はありません。

プレゼンテーションで使用したスライドはこちら
デモ機はこんな感じ。
プレゼンターとしては、知らない人の前で長時間話すというのは今後のためにも良い経験になったと思います。内容的にはPSoC特有の機能などは使用せず、基本機能の紹介+力技な感じなのでちょっとアレでしたが。

参加者・プレゼンターの方々が非常にレベルが高いのでかなり勉強になりました。
今までIDで基本部品を配置してAPIで読み出すだけで済ましてきましたが、複雑な部品配置・配線をしてよりPSoCのポテンシャルを引き出す、いわゆる”PSoCらしい”方法に関してかなり知識が深まりました。

日本サイプレスの協賛品として、CY8CKIT-050 PSoC® 5LP Development Kit(なんと99USDもします!)を頂いたので色々捗りそうです。

2014/09/14

CS:GO で英語力は上がるのか?

一見意味不明なタイトルですが雑談のネタとして。
タイトルの答えですが、私に関して言えば答えはYesです。

Twitterでは少し前に言っていたのですが、CS:GOを始める前後の2年間で大体TOEICの点数に換算して200点程度の改善がありました。ちなみにその間英語の勉強はしていません。
語彙は大学に入る直前がピークでそれ以降がどんどん英語(特に単語、文法)を忘れていたのですが、CS:GOのおかげでライティング、リスニング、スピーキングは鍛えられたと思います。 具体的に言うと、大学の入学当初に大体同じ英語力だった人々がTOEIC対策をしてもなお私にアドバンテージがあるくらいに、です。元が低かった、というものあるのですがね。おかげで大学院入試では英語を全く勉強しないで済みました。実際の所、ゲーム中にちゃんとした英語を話していた、というよりは英語らしき言語を叫んでいただけなのですが。

■なぜ英語力が上がったのか
CS:GOだけが原因では無いのかもしれませんが、大体はCS:GOのおかげだと思っています。いくつか要因を挙げましょう。

・発声する必要がある
英語の先生が「音読をして練習しろ」としばしば仰りますよね。あれは学習に効果あるからなのですが、インゲームVCで決まりきった文言を繰り返すだけでも効果があるようです。

・話す速度が求められる
数秒後に報告しても全く意味を成さない場合が多々ありますので、出来うる限り素早く話す事が要求されます。

・フリーズタイムの文字チャットにも速度が求められる
フリーズタイムは文字ベースのチャットでほぼ全員と確実に意思疎通が計れる数少ない機会ですが、武器の購入・英作文・タイピングを他のチームメイトが読む時間を残して完遂しなければなりません。私はセンター試験で文法問題を捨てたほどに文法が不得意なのですが、TOEICではかなり素早く・正確に解答できました。

・リスニング
安いマイクでの劣悪な録音環境、低ビットレート、謎の言語の訛りが入っている英語を聞いて素早く理解する必要がある。それだけ要求されれば理想的な録音環境のネイティブの会話も多少は聴きやすくなるものというものです。


北米のサーバーはネイティブが多いですが、アジアのサーバーでは他のアジア人も中学1、2年生レベルの英語を、滅茶苦茶な発音・文法でしか話さないです。もちろん自分も日本訛りで適当な文法で報告してますし。アジア人より日本人の方が英語力はあると思うので是非インゲームVCを利用して欲しいなと思います。
そうすることでメンバーの士気も上がって勝率も上がり階級にも影響するでしょうし、自分の英語力も若干上がるので是非是非。