まえがき
この記事は去年上げたものの加筆修正版です。去年の記事は削除せず残していますが、
当時基準でも誤った情報が散見されたため、
新しいこちらの記事を参考にしてください。
大筋の内容は去年上げた記事と同一のものになります。
注意
第三者のツールによる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の適用対象としているようです。
非対応ソフトでもオートHDRを使うには?
確認できただけで3つ方法があります。
リスト内にあるDX9ゲームをDX9以外で動作させる
先ほどDX9のゲームも一覧にあるといいましたが、それらのゲームを前回の記事の手順でDX9以外のAPI動作にすると、普通にオートHDRが有効になります。XBOXがやっている処理と似たようなことと言えそうです。
比較的新しめのDX9ゲームだと、この時点でクリアできていることがあります。
ホワイトリスト内にあるファイル名に偽装する
オートHDRが有効なゲームかを判断するのにexeファイル名だけを参照しているパターンがあるので、そのファイル名にゲームのexeファイルの名前を変えてしまおうという話です。
先ほどのbinファイルから有効な名前を見つけ出すのはあまりにも厳しいので、お手持ちのゲームでオートHDRを使用できるものから探したほうがいいと思います。
regeditでもなんでもいいので、とにかくレジストリエディタを起動して中身を確認します。
HKEY_CURRENT_USER\System\GameConfigStore\Children以下が対象ゲームの一覧です。フォルダが英数字だらけでなんのこっちゃわかりませんが、頑張って中身見て探します。
ここにあるレジストリを直接操作すると後の動作に悪影響が出るので、確認するだけに留めてください。
上の画像下線部のようにexeの親フォルダ名が指定されている場合、ファイル名変更だけでは偽装不可能です。 他にWorkingDirectryという名前でexeの実行フォルダ名自体を指定しているものもありました。
この画像のようにフォルダ関係の指定がなくゲームのフルパスだけのものは、他のゲームでもファイル名変更だけでオートHDRの適用対象になります。
割と前からある手段らしいです。
そもそも実行ファイルの名前変えたらゲームクライアントから起動できなくなる問題。
ファイル名変えても問題ない場合は、とりあえずtitanfall2かgame_plusに名前に変えときゃウディタ製ゲームすらオートHDR対象になります。
レジストリを操作して強制適用する
古いゲームだからそもそもリストに無い、でもファイル名変えるとクライアントが認識できないでどうしたもんか。 そもそもゲーム自体に強制適用できればよくねと思って探していたところ、
変態がいました。
なんとどこにも文書化されていないレジストリコマンドを自力で見つけ出して、オートHDR非対応のゲームでも強制的に動作させることができたというのです。どういうことやねん…
ゲームだけに留まらずグラフィックAPIさえ拾えればどんなソフトでも指定できるので、この方法が一番柔軟性がありそうです。
同氏が作ったコマンドライン版での説明は上のリンク先にあるので、今回は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を押してレジストリの内容を上書きします。
これで変更は完了です。
ちなみに…
現在はDX11のボーダーレスでもAFMFが動くのであまり意味がありませんが、 このツールで作成したレジストリの値に自力で追記すると、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は使えないのが正しいということなのでしょう。
あとがき
正直今更書き直す意味ないけど、次回は動画編です


