開いて元のusbport.sysをバックアップ。usbport.sysを右クリックし、プロパティ→セキュリティタブを開いて4で入力したアカウントの「フルコントロール」にチェックを入れる。書き換えたいusbport.sysを上書きコピーする。Windowsをリブートし、マウスレートチェッカー等で動作を確認。DirectInputから測定するため、より正確な値が出るとされる。cheker」は従来の測定ツール。シグマAPOシステム販売株式会社より500リポートレートマウスSLCOが発売されているため測定ツールも配布されている。以下よりダウンロード可能http://www.sigma-apo.co.jp/img/MouseTest.exeネガティブアクセラレーション問題*4ネガティブアクセラレーション問題とはマウスを高速に動かしたとき、マウスポインタの動きが遅くなってしまう問題。マウスを低速で動かしたときと、高速で動かしたときに、同じ距離マウスを動かしてもカーソルの移動距離が一致しない事で確認できる。マウスとPC間におけるデータの飽和。マウスの解像度、ビットレート、マウスレートに依存する。マウス内部におけるデータの飽和。マウスの最大スループットに依存する。OSやアプリケーションによる制限。マウス解像度、ゲームのフレームレートに依存する。あらゆるOSで起こりうる。DirectInput使用時におけるバッファの飽和(Windows限定)。ゲームによるDirectInputの利用方法やバッファ量設定、ゲームのフレームレート、マウスレートに依存する。2007データ)センサーの読み取り性能による制限マウスをある一定以上速く動かすと、カーソルが逆方向に動いたり、カーソルが暴れ出すようなことがある。この現象はセンサーの性能に依存し、一般にレーザーセンサーでは比較的遅い速度でも発生することが知られている全く意図しない動きをするため、ネガティブアクセルの中でも一番困る現象である。jumpingなどと表現されることもある。相性の良いマウスマットを使用することで、改善することがある。2007データ)を参照のこと。マウスとPC間におけるデータの飽和マウスをある一定以上速く動かすと、それ以上速度が上がらなくなることがある。飽和する速度は、マウスの解像度、ビットレート、マウスレートに依存し、以下の式で表される。速度max=マウスレートx(2^ビットレート/2-1)/解像度たとえば、マウスレート125[Hz]、ビットレート8[bit]、解像度400[dpi]の場合、125x127/400=39.7[inch/s]≒1[m/s]となる。したがって、マウスを高解像度設定にすると、ネガティブアクセルが起きやすいことに注意。マウスレートを高くすることで回避できるが、DirectInput使用時の問題(後述)にも関係するため注意が必要。マウス内部におけるデータの飽和マウスの高解像度化(高cpi化)に伴い、マウス内部でデータ飽和するケースがあることが知られている*5。これはマウス固有のスループット限界によるものであり、前述の式に関わらず、ネガティブアクセラレーションの原因となる。このマウス内部のデータ飽和によるネガティブアクセラレーションは、センサーがハード的に対応している低CPIを使用し且つ高マウスレートに設定することで、回避することが出来る。メーカー製ドライバの中には、CPI設定にかかわらずセンサーの最高CPIを常に使用し低CPIはドライバで実現しているものもあるらしく、この場合には、設定CPIにかかわらず一定の速度でネガティブアクセラレーションが発生することになる。標準ドライバを使用の各条件を満たす必要がある。これは多ボタン対応などメーカー製ドライバの提供する機能とのトレードオフでもあり、マウス内部のデータ飽和が問題となる速度はローセンシプレーヤーでないと使わないような高速域であること、そもそもその領域では一部の高性能センサーを除きセンサーの性能限界を超えかねないことを考えると、万人に必須と言えるものではないことに注意。Territoryなど)では、マウスを高速に動かした時にネガティブアクセルが発生する事がある。マウス解像度が高く設定されている場合や、画面解像度やゲームのフレームレートが低すぎる場合に起こりやすい。これらのゲームではOSのマウスポインタは非表示にされているが、実は描画されていないだけでポインタは存在しているのである。ゲームはOSのマウスポインタを画面の中心にセットする。次のフレームで、マウスポインタが画面中心からどれくらい動かされたかを見る事で移動量を読み取る。その後ゲームは再びポインタの位置を画面中心にセットし直す。これを毎フレーム繰り返す事でマウスの移動情報を取得している。この方式の場合にネガティブアクセルが発生するのは、マウスポインタが画面の端に到達してしまった場合である。通常、OSのマウスポインタは画面の外にはみ出す事が許されていないので、マウスポインタが画面の端に到達した時点で、それ以上その方向にマウスポインタが進む事が出来なくなるからである。このネガティブアクセルを回避する方法としては、画面解像度を上げる事で画面の中心から端までのピクセル数を増やす事や、ゲームのフレームレートを上げる事でポインタの読み取りとポインタを画面中心にセットし直す頻度を上げる事や、マウス解像度かセンシティビティ(ゲームのではなくOS上の設定)を下げる事でポインタの移動距離自体を減らす事などが考えられる。この方式の場合にはマウスレートの設定はネガティブアクセルには影響しないので、好みの設定を使用しても大丈夫である。DirectInput使用時におけるバッファの飽和(Windows限定)マウス入力にDirectInputを利用するゲームの場合、バッファ量不足によってネガティブアクセルが発生する事がある。ゲームがDirectInputの「バッファリングデータ」を利用しており、そのバッファ数が充分に用意されていない場合や、ゲームのフレームレートが低すぎる場合、またマウスレート設定が高すぎる事などが考えられる。それに対して、ゲームがDirectInputの別の入力方式である「直接データ」を利用していればネガティブアクセルはまず起こらないと考えて良い。ネガティブアクセルが起きた場合の対処法としては、ゲームのフレームレートを上げる事で入力を読み取ってバッファを空にする頻度を上げる事や、マウスレート設定を下げる事によってバッファに溜まるデータの発生数自体を減らす事などが考えられる。以下はDirectInput利用時にネガティブアクセルが発生する原因などの説明である。DirectInputのバッファリングデータを利用してマウス入力を行う場合バッファリングデータとは通常は16個程度(マウスの16レポート分の入力に対応し、マウスの1レポート毎に必ず1つ消費する)のバッファを用意し、そこにマウスから入力された各種データ(X/Y移動情報、ホイール回転情報、ボタン情報、タイムスタンプ等)を無加工のままバッファに格納していく方法である。通常はゲームがバッファからデータを取得した時点でバッファは空になり、再びDirectInputがそこにデータを格納する事が出来るようになる。ゲームがバッファからデータを取り出す前に全てのバッファにデータが格納されてしまった場合、DirectInputはバッファに新たなデータを書き込む事が出来なくなるので、その間に発生したマウスからの入力情報は保存されずに全て破棄されてしまう。これがネガティブアクセルが発生する原因である。バッファサイズはアプリケーションが自由に決めて、DirectInput側で用意して貰う。サンプルコードの多くが16個分に定義されているので16が最もポピュラーな数値だと思われるが、8や32などに定義されているゲームもある。計算する事で、何Hzのマウスレートまでが正常に読み取れるかが分かる。注意しなければならないのは、バッファ数はあくまで「マウスの何レポート分の入力を保持できるか」を示す物であり、「何カウント分の移動情報を溜め込めるか」には対応していない。マウスが1回のレポートで100カウント移動する場合でも1カウントしか移動しない場合でも、同じようにバッファを1つ消費してしまうのである。バッファリングデータの大きなメリットとしては、ボタンが連打された場合などに発生する全てのON/OFFの情報とそのタイムスタンプがバッファに書き込まれる為、情報をロスする事がなく正確にボタンストロークをゲームに取り込める事が挙げられる。直接データというデータからマウスの移動情報を取得する場合には、前回DirectInputから直接データを取得した以後に発生した全てのマウスの移動情報を合算した単一のデータだけが取得出来る。マウスを左に3カウント動かし次に右に2カウント動かした場合、バッファリングデータの場合にはその両方のデータがアプリケーションに渡されるが、直接データの場合には合算した値、つまり最終的に左に1カウント動いたという単一の情報のみがアプリケーションに渡される。直接データの各軸の情報は16bit(+/-32767)で保存されており、この値より高いカウント数が溜め込まれない限りネガティブアクセルは起こらない。マウスレート設定には影響しない。直接データの欠点はボタンストロークの再現が出来ない事である。ボタンのデータを直接データで取得した場合、今現在そのボタンが押されているか離されているかという単一の情報しか取得出来ず、過去にどういったボタンストロークが繰り返されたかなどの情報は取得できない。以下はソースコードレベルで確認が取れた物である。バッファリングデータの使用が確認出来ているゲームには、初代Quakeの改造版としては最も有名なfuhquakeと、Quake2を改造したR1Q2などが挙げられる。R1Q2は直接データを使う設定にも出来るが、ボタンの入力にも直接データが使用されるようになる為に使い物にならない。Quake3では移動データの読み取りには直接データを使用し、ボタン入力の読み取りにはバッファリングデータを使用している。この実装方法はFPSジャンルのゲームには最適と言える。このように一口にDirectInputと言っても、実装方法が各アプリケーション毎に異なる事が考えられる為、マウスレートやゲームのフレームレート設定には注意が必要である。高いマウスレート設定を使用したい場合には、各自がプレイするゲームで本当にネガティブアクセルが起こっていないかをテストしてから使用した方が良いだろう。3Dゲーム操作に必要なマウス解像度FPSジャンル及びFPSと同様のマウス操作形式のゲームに限定し、必要なマウス解像度を計算する方法を紹介する。海外等でよく使用される計算方法では、例えば1024x768の画面解像度でFOVが90の場合、水平方向の1024ピクセルで90度の視野角を描画している為、その4倍の4096ピクセルで360度を描画すると考えられている。上記の計算方法は視界が透視投影されている事を考慮しておらず、計算によって得られた値は何の意味も持たない。以下に、画面解像度とFOVから、滑らかに画面を一周させる為に必要なマウスカウント数を導き出す正しい計算式を示す。Cは一周の回転に必要なカウント数。