【FPS】Windowsに眠る”低遅延モード”を強制的に有効化する方法【効果絶大】
すいませんタイトル適当です。
ただこの設定はOSの低遅延モードなんて海外では言われてるので、間違いじゃないか・・・
・ForceFlipTrueImmediateMode
・VsyncIdleTimeout
・EnablePreemption
本日はこの3つのキーについて解説します。
簡単に適用させ、戻せるスクリプトも用意してます。
検証結果&ダウンロードは下のディスコードの├🌍│誰でもスレッドフォーラムチャンネルにあります。
これらの設定はすべて、Windowsのグラフィックスドライバーのスケジューリング(タスクの割り当てや実行順序の管理)に関連するもので、特に低遅延(Low Latency)を追求するゲーマーや、特定の環境下でのパフォーマンス向上を目指すユーザーによって利用されます(使用は自己責任です)
PC環境によって効果のほどは違います。
GPUスケジューラとは?
まず、これらの設定が変更を加える GraphicsDrivers\Scheduler キーについて理解する必要があります。
現代のOSでは、GPUはゲームの描画だけでなく、デスクトップ画面の表示(DWM.exe)、動画再生、GPGPU(汎用計算)など、複数のタスクを同時に処理します。GPUスケジューラは、OSの中核機能の一部であり、これらの複数のタスクにGPUのリソースを公平かつ効率的に割り当てる役割を担っています。
今回解説する3つの設定は、このスケジューラの挙動を微調整し、特定のアプリケーション(主にゲーム)を優先的に処理させることで、遅延の削減やフレームの安定化を図るものです。
原理と仕組み↓
ForceFlipTrueImmediateMode
何をする設定か?
ディスプレイに映像を表示する際の「プレゼンテーションモード」を、強制的に最も低遅延な「即時フリップモード(Immediate Flip Mode)」に変更する設定。
フリップモデルとは:現代のゲームでは、GPUが描画したフレームを直接ディスプレイに送るのではなく、「フレームバッファ」と呼ばれるメモリ領域に書き込みます。通常、「フロントバッファ」(現在ディスプレイに表示中の映像)と「バックバッファ」(次に表示するためにGPUが描画中の映像)の2つが用意されます。描画が完了すると、この2つのバッファの役割を「ひっくり返す(Flip)」ことで、新しいフレームが表示されます。
V-Sync(垂直同期)との関係:通常、この「フリップ」はモニターのリフレッシュタイミングと同期されます(V-Sync ON)。これにより、描画途中のフレームが表示される「ティアリング」を防ぎます。しかし、GPUがフレームを完成させても、モニターの次の更新タイミングまで待たなければならず、これが入力遅延の原因となります。
Immediate Mode(即時モード):ForceFlipTrueImmediateModeを有効にすると、GPUはモニターのリフレッシュタイミングを待たずに、バックバッファの描画が完了した瞬間に即座にフリップを実行します。これは、ゲーム設定でV-SyncをOFFにした状態と似ていますが、よりOSやドライバーに近いレベルでこの挙動を強制するものです。
期待される効果
入力遅延の大幅な削減:マウスを動かしたりキーを押してから、その結果が画面に反映されるまでの時間が最短になります。GPUがフレームを完成させてから表示されるまでの待機時間がほぼゼロになるためです。
考えられる副作用・リスク
ティアリングの発生:モニターのリフレッシュサイクルと無関係に画面を更新するため、画面の上下で異なるフレームが描画されてしまい、映像が引き裂かれたように見える「ティアリング」が発生する可能性が非常に高くなります。
スタッター(カクつき)の発生:フレームレートが不安定な場合、ティアリングがより顕著になったり、フレームの表示間隔が不均一になることで、逆にカクつきを感じることがあります。
2. VsyncIdleTimeout
何をする設定か?
GPUがV-Sync(垂直同期)のために待機している「アイドル時間」に、省電力モードへ移行するまでのタイムアウト値を設定します。スクリプトではこの値を0にして、省電力モードへの移行を実質的に無効化します。
原理と仕組み↓
V-Sync時のアイドル時間:V-Syncが有効な場合、GPUはモニターのリフレッシュレート(例: 60Hzなら16.6msごと)に合わせてフレームを描画します。もしGPUの性能が高く、次のフレームを5msで描画完了した場合、残りの約11.6msは次のリフレッシュタイミングまで待機することになります。この待機時間が「アイドル時間」です。
省電力機能:デフォルトでは、Windowsはこのアイドル時間を利用してGPUのクロック周波数を下げたり、低電力状態に移行させたりして、消費電力と発熱を抑えようとします。
タイムアウトの無効化:VsyncIdleTimeoutを0に設定すると、「アイドル状態になったら即座に省電力モードに移行せよ」という指示のようにも見えますが、実際にはこのタイマー自体を無効化する働きをします。その結果、GPUはV-Syncの待機時間中も高クロック状態を維持し続けます。
低遅延への寄与:GPUが低電力状態から復帰するには、わずかながら時間(遅延)がかかります。待機中も常にフルパワーに近い状態で待機させることで、次のフレーム描画への取り掛かりが速くなり、結果として遅延が削減されます。
期待される効果
遅延の削減:特にV-Syncを有効にしている環境で、GPUがスリープ状態から復帰する際のわずかな遅延を取り除くことができます。
フレームレートの安定化:クロックの上下動がなくなるため、フレームタイム(1フレームを描画するのにかかる時間)がより安定する場合があります。
考えられる副作用・リスク
消費電力と発熱の増加:GPUがアイドル時間にも高クロックで動作し続けるため、消費電力とそれに伴う発熱が増加します。デスクトップPCでは大きな問題になりにくいですが、ノートPCではバッテリー駆動時間や冷却に影響を与える可能性があります。
3. EnablePreemption
何をする設定か?
GPUスケジューラによる「プリエンプション(Preemption)」機能を無効化します。プリエンプションとは「横取り」や「割り込み」を意味します。
原理と仕組み
プリエンプションとは:OSが、あるタスク(プロセスA)の実行を一時的に中断し、より優先度の高い別のタスク(プロセスB)にCPUやGPUのリソースを割り当てる仕組みです。これにより、マウスカーソルのような重要な処理が、重い処理(ゲームの描画など)によって妨げられることなく、システム全体の応答性が保たれます。
GPUにおけるプリエンプション:GPUも同様に、ゲームのフレーム描画という重いタスクの途中で、OSから「デスクトップを描画し直して」「別のウィンドウを更新して」といった細かい割り込み(プリエンプション)を受けます。
プリエンプションの無効化:EnablePreemptionを0に設定すると、この割り込み機能を無効化します。つまり、GPUが一度ゲームのフレーム描画を開始したら、それが完了するまで他のタスクによる割り込みを許可しなくなります。GPUリソースを、現在実行中のフォアグラウンドアプリケーション(ゲーム)に完全に集中させる設定です。
期待される効果
フレームタイムの安定化(スタッターの軽減):ゲームの描画処理中にOSなど他のタスクからの割り込みが入らなくなるため、1フレームごとの描画時間(フレームタイム)が安定しやすくなります。これにより、平均フレームレートは同じでも、体感的なカクつき(スタッター)が減る可能性があります。
考えられる副作用・リスク
システム全体の応答性低下:最大のデメリットです。GPUがゲームの描画に専念している間、OSの他の描画要求(マウスカーソルの移動、別ウィンドウの操作、通知の表示など)が後回しにされます。これにより、ゲーム以外の操作がカクついたり、無反応になったりする可能性があります。
Alt+Tabでの切り替え遅延など:アプリケーションの切り替えや、オーバーレイ表示(Discordなど)で問題が発生する可能性があります。
(これをONにすると再起動時、サウンド要求が後ろに回り、音が極端に小さくなる)システムからサウンドに行きボリュームを一旦半分以下(一瞬カクつく)まで下げて、上げると解決する。
これらの設定は、PCの構成(CPU, GPU, メモリ)、ドライバーのバージョン、対象のゲームによって効果が大きく異なるため、必ずしもすべての環境で良い結果が得られるわけではありません。そのため、変更後は必ず体感やベンチマークで効果を確認し、問題があれば「8. 適用した設定をすべてリセット」で元に戻すことが重要です。
スクリプト (詳細な動作解説説明書)
実行の流れ
起動と管理者権限の確認
スクリプトを起動すると、まず「管理者として実行」されているかを確認します。管理者でないとシステムの重要な設定(レジストリ)を変更できないため、これは必須の安全機能です。
作成者情報のポップアップ表示
管理者として正常に起動すると、「最適化おじさんK」が作成したツールである旨の小さなポップアップウィンドウが表示されます。これは利用者に安心感と連絡先を示すためのものです。
メインメニューの表示
コマンドプロンプト(黒い画面)に、操作メニューが表示されます。利用者はここから行いたい操作を番号で選びます。
選択に応じたレジストリ操作の実行
適用 (1~4番):
利用者が1~4番を選ぶと、スクリプトは自動でHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDriversの中にSchedulerというキー(フォルダのようなもの)が存在するか確認します。
もしSchedulerキーがなければ、自動で作成します。これにより、環境によるエラーを防ぎます。
reg addというコマンドを使い、指定されたレジストリ値(例: ForceFlipTrueImmediateMode)を書き込みます。
リセット (8番)
利用者が8番を選ぶと、reg deleteというコマンドを使い、このスクリプトで設定した3つの値をSchedulerキーから削除します。これにより、PCは完全に設定前の状態に戻ります。
終了 (9番):
スクリプトを安全に閉じます。
結果の報告と再起動の案内
処理が完了すると、成功したかどうかのメッセージが表示されます。
そして、設定を完全に有効にするためにはPCの再起動が必要です。
メリットとデメリット
このスクリプトを利用することには、「スクリプト自体のメリット」と、「行われる設定変更によるメリット・デメリット」の2つの側面があります。
スクリプト自体のメリット (使いやすさと安全性)
操作が非常に簡単: レジストリを直接触る知識がなくても、番号を選ぶだけで高度な設定を適用・解除できます。
入力ミスを防げる: 手作業によるキーの打ち間違いや値の入力ミスといった、危険なヒューマンエラーを100%防げます。
安全なリセット機能: 万が一、PCの調子が悪くなっても、8番を選ぶだけで確実に元の状態に戻せます。これは最大のメリットです。
環境を選ばない: SchedulerキーがないPCでも自動で作成するため、誰でも同じように使えます。
設定変更によるメリット・デメリット
ここが最も重要な部分です。スクリプトが変更する内容そのものが、PCにどのような影響を与えるかを理解してください。
入力遅延(インプットラグ)の削減:
ForceFlipTrueImmediateModeとVsyncIdleTimeoutの設定により、GPUが描画した映像がモニターに表示されるまでの時間が理論上の最小値に近づきます。
特に、一瞬の反応が勝敗を分けるFPSなどの競技性の高いゲームで、マウスを動かしてから画面が動くまでの遅延が減る効果が期待できます。
フレームレートの安定化 (カクつきの抑制):
EnablePreemptionを無効にすることで、ゲームの描画処理がOSや他のアプリによって中断されなくなります。
これにより、フレームの描画間隔が一定になり、画面のカクつき(スタッター)が減る可能性があります。
システム全体の不安定化
これが最大のリスクです。これらの設定は非公式なもので、OSやドライバの挙動を通常とは異なるものにするため、PCがフリーズしたり、ブルースクリーンが発生したりする可能性があります。
システム応答性の著しい低下
特にEnablePreemptionを無効にすると、ゲームがGPUを独占するため、OSの他の動作が非常に重くなります。
具体例: Alt+Tabでの画面切り替えが極端に遅くなる、裏で動いているDiscordやブラウザが固まる、など。
画面のちらつき (スクリーンテアリング) の発生
ForceFlipTrueImmediateModeは、モニターのリフレッシュタイミングを無視して映像を送るため、画面の上下で映像がズレて見える「テアリング」が発生しやすくなります。
効果が保証されない:
PCの構成(CPU, GPU, メモリ)、ドライバのバージョン、対象のゲームによって、効果が全く感じられない、あるいは逆にパフォーマンスが低下することもあります。
まとめ
内容このスクリプトは「ハイリスク・ハイリターンなGPU設定を、誰でも安全・簡単に試せるように作られた、非常に優れたツール」
メリットコンマ1秒を争う競技ゲームにおいて、入力遅延を削減し、フレームを安定させる可能性がある。
デメリットシステムの安定性や快適性を犠牲にする可能性があり、最悪の場合フリーズすることもあります。結論「PCが不安定になっても、リセット機能で元に戻せる」ことを理解した上で、自己責任で試すためのものです。


コメント