PCでゲームをプレイするには、「マウス」「キーボード」「ゲームパッド」という3種類の入力デバイスを使うのが主流ですが、Windowsで特定のハイエンドマウスを使用すると、非常に人気を集めるタイトルを含め一部のゲームでパフォーマンスが悪化します。なぜ問題が発生するのかについて、英雄伝説シリーズのPC版への移植などで有名なPH3 GmbHのピーター・デュランテ・トーマン氏が分析を行いました。
Things you really should know about Windows Input, but would rather not - Raw Mouse edition | PH3 Blog
https://ph3at.github.io/posts/Windows-Input/
Windowsでユーザーからの入力を受け取る方法で最も伝統的なのは、アプリケーションのメッセージキューに送信されるWindowsメッセージを受信することです。多くのWindowsアプリケーションがWindowsメッセージを通じてキーボードやマウスからの入力を受け取っていますが、Windowsメッセージを通すとユーザーのマウス操作がWindowsによって加速されるなどの調整を受けてしまう上、1ピクセル未満の精度も提供されず、ゲームへの入力には適していません。
そのため、マウスで3Dカメラを動かすゲームなどマウス入力が非常に大切なゲームでは「Raw Input API」が使用されます。Raw Input APIを使うことでマウスからの「生」の入力を受け取る事ができます。
Raw Input APIで入力を受け取る方法は2つ存在しており、1つはデバイスからの標準読み取りを使用して個々のイベントのメッセージを処理する方法で、もう1つはバッファに存在する全ての入力イベントをバッファ読み取りで取得する方法です。当然、別々のイベントを個別に処理するよりもバッファからまとめて読み取る方がパフォーマンスが向上します。
しかし、バッファ読み取りであっても、ポーリングレート、つまりマウスからデータが送信される頻度が8kHzのマウスを激しく動かすと下図のように一部のゲームでフレームレートが355から133になるほどパフォーマンスが悪化してしまいます。これは何も設定しない場合、システムがRaw Inputメッセージだけでなくレガシーメッセージも出力しており、レガシーメッセージがメッセージキューを埋めてしまうからとのこと。
レガシーメッセージを無効にすることはできますが、レガシーメッセージは「ゲームウィンドウの移動」などシステム側の処理で多数使用されており、レガシーメッセージを無効にしてしまうとそうした通常システムで行われるはずの処理を実装する必要が出てきてしまいます。
トーマン氏は多数検討を重ねた結果、「レガシーメッセージを有効にしたまま、実際のゲームへの入力にはバッファ読み取りを使用する。その上でフレームごとに処理するメッセージキューイベントを一定数に制限する」ことでこの問題を解決しました。大量のメッセージが蓄積された場合などの動作に不安があったものの、実際にテストしてみると特に問題が発生しなかったため不満足ながら当面の解決策にするとのこと。
「適切に行う方法を知っている場合は連絡が欲しい」と述べられています。
わくわくメール
ITトピックス
ITランキング
- 1
手のひらサイズで録画も可能。HDMI出力のテレビチューナー「AUB-100シリーズ」画像あり
- 2
一部モデルは6月まで入手困難!革新的モバイルデバイス「Apple Watch」開封レポ画像あり
- 3
Intelの逆襲、「Core Ultra」正式発表と「AI PC」標榜 - AI Everywhereイベント詳報画像あり
- 4
低遅延×Bluetooth接続!ゲーミング用ヘッドセット「Quantum 360 WIRELESS」画像あり
- 5
そろそろ新モデルきてほしい。 iPad mini 7も10月にくる?画像あり
- 6
SwitchBotが「CO2センサー(温湿度計)」と「温湿度計 Pro」を9月17日より順次発売!価格は10月2日までキャンペーンで6783円と3132円画像あり
- 7
スペック、iPhone 6向け画面むき出しの防水ケース1月上旬発売画像あり
- 8
漢字6万文字の国際規格化が完了、斉藤さんのサイも60種類がPCでの表示に対応へ画像あり
- 9
パソコンやスマホと連携して部屋や外の温度・湿度・二酸化炭素濃度などを観測できる「Netatmo ウェザーステーション」を購入したので使ってみた【レビュー】画像あり
- 10
ジャレコのファミコンタイトル連続リリース「ジャレコレ ファミコン編」始動! 第1弾は「ピンボールクエスト」!画像あり