※2024/07/27追記 OS・ソフトの更新等による状況の変化や当方のミス・知識不足により、このページの内容にはかなり誤りがあります。
こちらのページで内容を修正して公開しているため、以下の情報は参考にしないようお願い致します。
※2023/10/26追記 DX11でも限定的状況下でなら、仮想フルスクリーンでAFMFが使用可能だったので全体的に修正
※2023/10/28追記 ゲームがHDR動作の時は例外なく仮想フルスクリーンもAFMFの対象だったため修正。
※2024/01/19追記 動画が利用できなくなってしまったので該当箇所削除
まえがき
前回までのあらすじ。
古い60fps動作の2DゲームをDX11以上で動作させて、AMD Fluid Motion Framesの適用対象にした。
変わるっちゃ変わるけど思ったよりヌルヌル感なくて悲しい。
以上。
本来はここで終わりだったのですが、色々試しているうちに欲が出てHDRも利用したくなりました。 Special Kなる外部ツールによりゲームごとのHDR設定が可能ということなのですが、
せっかくDX11以上で動かしてるんだし、Windows Auto HDR使いたくね?
ということで、通常非対応な環境で利用する方法を纏めてみます。
当たり前ですが、HDR対応ディスプレイが無いと動作しません。
今回の記事はNvidia Geforce RTXユーザー、なんならGTXユーザーの方にも応用できると思います。
前回の記事も多分需要ないのに今回とかさらに需要なさそう。
注意
第三者のツールによるWinodwsのレジストリ編集を行います。 操作を誤ってOSの動作がおかしくなっても私は一切の責任を負いませんので、実行する場合はリスクを把握したうえで行ってください。
そもそもWindows Auto HDRとは
Windows Auto HDR(以下オートHDR)はwindows10から追加された機能で、DirectX11以上(10以上とも見たが未確認)のゲームでディスプレイがHDR表示のときに、HDR非対応のゲームをそれっぽく見えるようにしようという機能です。
あくまでそれっぽくなので、Special Kなどで個別に設定したほうが恐らく見栄えは良くなるのでしょう。
…が、
面倒なので、
Win標準機能で済むなら手っ取り早くていいよねという話です。
DX11のゲームでもオートHDRが動かないことがあるのは何故か
どうもオートHDRの適用対象は先にあげた条件に加えてホワイトリスト制となっており、該当する条件のゲーム以外では動作しないようになっているらしいです。具体的に言うと、WindowsのGameDVRがゲームとして認識すれば対象になります。
AppData\Local\Microsoft\GameDVRにあるKnownGameList.binというファイルがおそらくそのゲーム一覧なのですが、中身を覗くと基本的にXBOXで配信しているソフトの一覧であるように見えます。
WindowsだとDirextX9で作られているゲームも、普通にこの一覧の中に存在しています。
XBOXではほとんどのゲームでHDRを使えるらしいですが、DX9は公式ラッパーか何かで動いているんでしょうか?
非対応環境でもオートHDRを使うには?
確認できただけで3つ方法があります。
リスト内にあるDX9ゲームをDX11以上で動作させる
先ほどDX9のゲームも一覧にあるといいましたが、それらのゲームを前回の記事の手順でDX11以上にした場合、普通にオートHDRが有効になります。
私は今回調べてはじめてそのことを知りましたが、
海外だと割と知られている話だったらしいです…
比較的新しめのDX9ゲームだと、この時点でクリアできていることがあります。
ホワイトリスト内にあるファイル名に偽装する
オートHDRが有効なゲームかを判断するのにexeファイル名だけを参照しているパターンがあるので、そのファイル名にゲームのexeファイルの名前を変えてしまおうという話です。
先ほどのbinファイルから有効な名前を見つけ出すのはあまりにも厳しいので、お手持ちのゲームでGameDVRが認識し、オートHDRを使用できるものから探したほうがいいと思います。
regeditでもなんでもいいので、とにかくレジストリエディタを起動して中身を確認します。
HKEY_CURRENT_USER\System\GameConfigStore\Children以下が対象ゲームの一覧です。フォルダが英数字だらけでなんのこっちゃわかりませんが頑張って中身見て探します。
ここにあるレジストリを直接操作すると後の動作に悪影響が出るので、見るだけに留めてください。
この例の下線部のようにexeの親フォルダ名が指定されている場合は、ファイル名変更だけでは利用不可能です。 他にWorkingDirectryという名前でexeの実行フォルダ名自体を指定しているものもありました。
この画像のようにフォルダ関係の指定がなくゲームのフルパスだけのものは、他のゲームでもファイル名変更だけでオートHDRの適用対象になります。
が、これも割と前からある手段らしいです。
そもそも実行ファイルの名前変えたらゲームクライアントから起動できなくなる問題。
ファイル名変えても問題ない場合は、とりあえずtitanfall2かgame_plusに名前に変えときゃウディタ製ゲームすらオートHDRの対象になります。
レジストリを操作して強制適用する
古いゲームだからそもそもリストに無い、でもファイル名変えるとクライアントが認識できないでどうしたもんか。 そもそもゲーム自体に強制適用できればよくねと思って探していたところ、
変態がいました。
なんとどこにも文書化されていないレジストリコマンドを自力で見つけ出して、オートHDR非対応のゲームでも強制的に動作させることができたというのです。どういうことやねん…
ゲームだけに留まらずグラフィックAPIさえ拾えればどんなソフトでも指定できるので、この方法が一番柔軟性がありそうです。 副次的な効果として、強制オートHDRでの動作時は、DirectX11のゲームでも仮想フルスクリーンが使用可能になります。
同氏が作ったコマンドライン版での説明は上のリンク先にあるので、今回はGUI操作可能なChoum28/AutoHDRで説明します。
Choum28/AutoHDRで強制適応する
まず、第三者のプログラムでレジストリを操作することの危険性について理解したうえで、この先の操作を行ってください。 ソースコードは公開されていますし、私自身このツールを実際に使用して問題が起きたことはありませんが、何が起きても私は一切責任を取りません。
以下がリンク先になります。
レジストリにゲームを新規登録する
DLしたAutoHDR.exeを起動します。
選ばなくても登録できますが一応Install Gameを選び、その下の入力ボックスにゲーム名を入力して、さらにその下のボックスにゲームのexeファイルのフルパスを入力します。パスは"で囲わないでください。今回もSITER SKAIN作、神威(Steam版)を使用します。
BufferUpgradeEnable10bitは、映像ソースが10bitでもオートHDRを適応したい場合にチェックを入れます。今回適用する神威は8bitソースなので、チェックがあってもなくても変わりません。今回はなしで行きます。
思いっきりはみ出てますが問題ありません。Install or Updateを押してレジストリに登録します。
レジストリ情報は\HKEY_CURRENT_USER\Software\Microsoft\Direct3D\以下に保存されます。
本当に保存されたか心配な場合は、regeditで確認してみましょう。
BufferUpgradeOverride=1 というのがオートHDR強制適用コマンドです。
前回の記事の手順でDirectX11以上で動作するようにしていれば、これでオートHDRが適用できます。
もとからDirectX11以上で動いているオートHDR非対応ゲームもこの手順で適用が可能でした。
レジストリに登録したゲーム情報を変更する
一度登録した後、設定の変更が必要になった場合も修正できます。
修正の場合もInstall Gameを選び、修正したいゲームの名前を上の入力ボックスに入れれば修正できます。今回は以下のように変えました。
GUI上にも記載がありますが、exeファイル名のみを指定することも可能です。例えば下の入力ボックスにgame.exeとだけ指定した場合、game.exeという名前のすべてのソフトが強制的にオートHDRの適用対象になります。
Install or Updateを押してレジストリの内容を上書きします。
これで変更は完了です。
ちなみに…
このツールで作成したレジストリの値に自力で追記すると、DirectX11のゲームを強制的にD3D11on12モードで動かすことができます。
D3DBehaviorsをダブルクリックで開き、値の最後に;UseD3D12=1と付け加えてOKで保存してください。
セミコロンを忘れずに書く必要があります。
上書き後にツールで設定を更新するとUseD3D12=1が消えてしまうので、その都度書き込む必要があります。
本来はd3dconf.exeというDirextX設定ツールで使用する値なのですが、このツールで作成したレジストリに対して使用しても通常通り機能するようです。 というかd3dconf.exeでゲームに強制DX12設定したらツールで作った方のレジストリが無視されたので、むしろd3dconf.exeは使わないでください。
DXVKと違い排他フルスクリーンも使用できるので、お好みでどうぞ。
レジストリに登録したゲームを削除する
レジストリ情報を削除する場合はRemove Gameを選びプルダウンから削除したいゲームを選択します。
選択後GUI下部のRemove Gameを押してレジストリを確認すると…
無事削除されます。
Uninstall Allは…
その下にあるUninstall AllでDirect3D以下の該当キーをすべて削除できますが、DirectXの設定ツールであるd3dconf.exeやDXCpl.exeによって作成されるレジストリ情報も一部削除されます。
一度このコマンドの実行を押してしまうと、確認ダイアログ無しですぐに消去が始まり、基本的に途中で停止できません。
実行時はその分のレジストリだけエクスポートしてバックアップを取るか、このツールで作成したレジストリ以外絶対に存在しないと分かっている場合のみにして下さい。
実際に起動してみる
レジストリに登録したexeのフルパス、ファイル名のみ指定した場合はそのファイル名のexeを起動してみてください。
オートHDRが有効になっている旨のポップアップが…
…
多分出てこないと思います。
どうやらリスト外のゲームにこの手順でオートHDRを強制適用すると、ポップアップが出てこない仕様らしいです。
場合によっては本当に有効になったか分かりにくいことがあると思うので、その場合以下のサイトからレジストリキーをダウンロードし、オートHDR有効時に画面分割が行われるようにしてください。ゲームバーから輝度変えて確認もできるけど、面倒だし…
中間から輝度が分かれていれば、強制オートHDRは有効になっています。一番分かりやすそうな部分のスクリーンショットを下に貼っておきます。
これで正常に適用されているのが確認できました。
ちなみに使用したゲームはBloodstained Curse of the Moon 2です。 このゲーム、
何故か1しかリストにありません。
2も1と同様Xbox Oneで発売されていますが、Xbox版は全く別のファイルなんでしょうか…謎。
ちなみにOBSでゲームをオートHDR適用状態で録画したい場合は、ソースに画面キャプチャを使用してください。 ゲームキャプチャだと設定を弄っても、オートHDR適用前の映像しか取得できませんでした。
現状AFMFとオートHDR両方適用した動画を撮る方法は、外部キャプチャーボードで物理的に撮る方法のみの模様。ReliveのHDR対応が先か録画ソフトがAFMFに対応するのが先か…
Force_D3D9on12でDirectX12にした場合の話
前回の記事でも少し触れましたが、この場合はゲーム自体はDX12動作になるにもかかわらず、オートHDRの適用対象にはなりません。 複数のゲームで試しましたがすべて失敗に終わりました。内部的にはDX9扱いとなっているのかもしれません。
公式としては、WindowsにおいてDX9のゲームでは、オートHDRは使えないのが正しいということなのでしょう。
intel Arcは現在DXVKベースのDX9互換って話だけど、オートHDRどうなってるんだろう?
あとがき
というわけで60fpsのDX9のゲームにAFMFを使い、なおかつオートHDRを強制適用した状態でプレイするという、割とそんなに喜ぶ人いない環境が出来上がりました。
まあこういう変なことも出来ますよということで、この話を締めたいと思います。
…と言いたいところですが、
本命はこれじゃありません。
次回動画編、ご期待ください。
大体Xに書いちゃってるけど。


