2017/01/12

ゲーミングデバイスが1680万色に光る理由

ゲーミングデバイスって1680(書き方によっては1677万色)に光りますが,なぜ1680万色なのでしょうか?
これはゲーミングデバイス内のMCU(マイコン)の都合だったりします.

ゲーミングデバイスのLED制御

一般的に,ゲーミングデバイスではLEDの明るさをパルス幅変調(PWM)を用いて変えています.
PWMは,ONとOFFを切り替えることで時間あたりの平均的な電力を変える方法です.

つまり,フィラメント電球を使った理科の実験のように電圧を上下させてLEDの明るさを変えるのではなく,人間の目では知覚できない速さでON/OFFを切り替えることで明るさを変えるわけですね.人間の目では明るかったり暗かったり色々な色に見えているわけですが,マイコン的にはとても素早くLEDを点滅させているだけなのです.ここで,明るさの度合いは,ONとOFFの比率(デューティー比)を変えることで調整しています.


G302のLEDの点滅の様子をハイスピード撮影で見てみましょう.動画の撮影は1200fpsで行い,30fpsで再生しています.
まずは暗いときの場合です.


次に明るい時の場合です.

このように,LEDは目に見えない速度で点滅しています.また,点灯する時間を変えることで,見かけ上の明るさを調整していることがわかります.

PWMと色の関係

さて,PWMで明るさを変えるにはデューティー比を変えれば良いことが分かりましたが,デューティー比はマイコンでどのように設定しているのでしょうか.

よくあるのは8bitの変数を使ってデューティー比を表現する場合です.16bitやそれ以上のbit数もマイコンによっては可能だったりしますが,bit数を増やすとマイコンのリソースを使います.所詮は装飾ですし,人の目はそんなに細かく色を見分けられないので,デューティー比は8bitが多いでしょう.
8bitの変数は,(正負の区別をしない場合)0から255の値をとることができます.つまり,0から255のデューティー比で明るさを表現できます※1

そしてRGBな製品の場合,光の三原色である赤(Red,R),緑(Green,G),青(Blue,B)の3色のLEDを搭載しています.そこで,LED1色ごとに256パターンで明るさを表現して,3色合わせると256の3乗になります.つまり,256の3乗で16777216パターン,約1680万色ということになります.


※1
「1色あたり0~100とかのほうが分かりやすいのでは?」と思う方も多いと思いますが,マイコンは基本的に2進数で物を考えており,特に8bit単位(例: 8,16,32bit)でマイコン内部の機能を制御したがります.無理やり0~100などの10進法的にキリの良い数字で制御することもできますが,内部の機能は8bit単位の値しか受け付けないので,それに直すために余計な計算が必要になりますし,プログラマ的には特に意味がないので,8bitで制御することが多いようです.

2017/01/04

2017年

あけましておめでとうございます.今年も#LogicalGaming#LogicalGamingGlobal@systema_ をよろしくお願いします.

ブログを立ち上げてから3年が経ちましたが,徐々にページビューやTwitterのフォロワーが増えてきて,望外の喜びです.いつもRT/Favなどなどありがとうございます.


2016年のまとめ

毎年恒例ですが,昨年1年間を簡単に振り返ります.

マウスのスクロールホイールを3Dプリントする

http://logical-gaming.blogspot.jp/2016/02/3d.html
マウスの部品を3Dプリントして使ってみたという記事です.やってることはモデルデータを作って外注しているだけなので技術的にはまったく難しくありませんが,「可能であるということを実証した」ということに意義を見出しています.言うだけなら簡単ですが,実際に可能かどうかというのは別問題なので.
この記事では単一の部品を出力したわけですが,マウス全体の出力に適用するには,課題が存在しているかもしれません.


マウスパッド表面評価のためのセンサー可視化デバイス

http://logical-gaming.blogspot.jp/2016/04/adns-3090adns-9800framecapture.html
このブログを立ち上げた直後から取り組んでいる「ゲーミングマウス向けセンサの制御」の集大成的な記事です.ADNS-3090とADNS-9800というゲーミンググレードのセンサを制御できるようになりました.
また,ゲーミンググレードのセンサの視界を見える化することができたのは大きな進捗でしょう.これを使えばマウスパッドの良し悪しや,色々なことが分かるようになります.


DPIと振り向きとセンシティビティ

http://logical-gaming.blogspot.jp/2016/05/dpi.html
一般のゲーマー向けに書いた記事です.400DPI+センシティビティ2.0より,800DPI+センシティビティ1.0の方が理論上は優れているという話です.この記事には続きがあるので,いつか続きを上げたいですね.


描画遅延とデバイスの出力周期の関係に関する一考察

http://logical-gaming.blogspot.jp/2016/12/blog-post.html
ポーリングレートやフレームレートが変わると遅延の期待値が変化する,というのを理論的?に説明した記事です.この記事では,ポーリングレートなりフレームレートは高ければ高いほど良いということを示しました.
よく「モニタのリフレッシュレート以上にフレームレートが出てれば十分」,「マウスのポーリングレートは何でも良い」などと言いますが,実際には高ければ高いほど有利になるということが分かりました.皆さんもGTX1080で最低設定+640x480でプレイしましょう().


ゲーミングマウス向けのUSB HIDディスクリプタ

http://logical-gaming.blogspot.jp/2016/12/usb-hid.html
ゲーミングマウスのHIDディスクリプタのテンプレートとして作成しました.マイコンにHIDマウスの機能を持たせる記事は多いですが,マウスホイールと16bitのデータパスを持つ日本語の記事は無かったので,少しは貢献できたと考えています.


ゲーミングマウスのセンサとして電磁誘導方式を考える

http://logical-gaming.blogspot.jp/2016/12/blog-post_99.html
小ネタ記事です.今のゲーミングマウスは光学式一択の現状ですが,別な方式も考えてみませんか?という提案をしました.
光学式マウスの暗黙のメリットとして「マウスパッド無しでどこでも使える」というのがありますが,「ゲーミングマウスはマウスパッドの上だけでしか使われない」という点に着目しました.「滑走面が限定されても良い」という条件なら光学式にこだわる必要はなく,絶対値で座標が取得できる方式の方が正確にトラッキングできるのでは?という提案です.


遅延測定用のファームウェア公開

日本語の記事にはしていませんが,描画遅延ネタで使っているマイコンのファームウェアを公開しました.(英語記事)
ソースコード : https://github.com/systema-tic/input-lag-test-firmware
1500円で売ってるマイコンボードとハイスピード撮影ができるカメラがあれば,簡単に描画遅延を測定できます.詳しくはreadmeに書いてあります.


近況

デバイス

今はLogicool G300r + Razer Goliathus Control Editionです.Goliathus Controlはいいマウスパッドだと思います.G300はセンサー的に厳しいですが,乗り換え先が見つからないです.

2016年も色々見ましたが,ベストなマウスパッドはCOUGAR Control(2じゃなくて無印の方)だと考えています.マウスに関しては個人の手の大きさや持ち方に大きく依存するのでなんとも言えません.個人的にはG300系でセンサー改良版が出て欲しいです.


ゲーム

5月から秋まで,PC版OverwatchのチームであるHOT-Gamingのメインタンクとしてプレイしました.本当に楽しかったです.一緒にプレイしてくれたチームメイトに感謝したいです.
Overwatchは,どこかマンネリ化していたFPSのゲーム性に一石を投じましたが,これからどのような影響を及ぼすか要注目でしょう.

最近はMirror's Edge CatalystをOriginで買いました.セールで約1500円だったのでとても安かったです.シナリオと戦闘は評価が低いようですが,逆に言えばそれ以外は素晴らしいです.既に30時間ほどプレイしましたが,シングルプレイヤーのFPSを30時間プレイするのは最初で最後かもしれません.前作が好きな方におすすめです.


今年の抱負

そろそろこのブログもまとめの時期に入る必要がありますが,現状では「俺たちの戦いはこれからだ!」的な感じなので,どうオチをつけるかまだ決まっていません.ボチボチ頑張りたいと思います.

ソースコードが欲しいなどの要望や,ゲーミングデバイスに関する疑問点などがあればAboutに書いてある連絡先に連絡お願いします.