AMD Fluid Motion FramesとWindows Auto HDRの活用の幅を広げたい(旧版) - ゲーム編(1)

October 25, 2023

Post
Share
Line
Hatena bookmark

タグ:雑記

目次 +

※2024/07/26追記 OS・ソフトの更新等による状況の変化や当方のミス・知識不足により、このページの内容には不適切な表現があります。

こちらのページで内容を修正して公開しているため、以下の情報は参考にしないようお願い致します。


※2023/10/26追記 DX11でも限定的状況下でなら、仮想フルスクリーンでAFMFが使用可能だったので全体的に修正。

※2023/10/28追記 ゲームがHDR動作の時は例外なく仮想フルスクリーンもAFMFの対象だったため修正。

まえがき

Radeonユーザーの皆様AMD Fluid Motion Framesはもう体験なされたでしょうか。 去年冬RX6800を衝動買いした私も対応した時点で早急にベータドライバを入れ、FPS制限のあるDirectX11のゲームで使用し、

「ソフトでこれやってんのかよすげー」

と小学生並みの感想を抱いた次第です。

ところで60fpsでしか動かないDirectX9のゲームを全て、高リフレッシュレートモニターでヌルヌル動かしたくなることはありませんか?私はあります。

そんな訳でベータドライバとして提供されているAMD Fluid Motion Frames(以下AFMF)と、現windowsの標準装備であるWindows Auto HDR(以下オートHDR)を、 動作対象外の環境でも動してみようという記事です。

少なくともRadeon RX6000シリーズ以上のGPUと、120Hz以上で稼働するディスプレイが必要です。

オートHDRは当初の予定に無かったのに急に湧いて出てきました。


注意

可能性は低いと思いますが、動作DLLファイルを変更するため、アンチチートプログラムの検知対象となる可能性があります。オンラインゲームでの使用は推奨されません。

また、2023年10月現在AFMF用ドライバはベータ版扱いとなっており、予期せぬ不具合が発生する可能性があります。自己責任のもと導入してください。

あと、要件満たしてんのにAFMF動かんことあったら、一旦「win+Ctrl+Shift+Bキー」でグラフィックドライバ再起動してください。 当環境では主にVulkan, DX12での使用時に発生しております。おま環ならばいいのですが、もしそうでなければPC再起動の度に必ず実行する羽目になると思います…


AMD Fluid Motion Framesを使えるようにする

※既にレトロPCゲームをDX12やVulkanで動作させる知識のある方はこの記事はスルーし、次回のオートHDRの記事から読んでください。

正直ここ見る人はもうベータドライバ入れてAFMF自体は試してると思うので、その辺りの導入は全部割愛します。

AFMFの動作対象外のゲームでAFMFを動かすという話なので、基本にDirectX9以下のゲームの話になると思います。 AFMFを動作させる為にDirectXのラッパーを使用し、動作するグラフィックAPIを置き換えます。一般ユーザーが扱える範囲のものでもいくつか種類があるのですが、

結論だけ申し上げますと、DX9のゲームにはdgVoodoo使って下さい。

比較的新しめのDX9ゲームならDXVKで問題ないこともあります。

  • DXVK

    • グラフィックAPIをVulkanに置き換える
    • DX9~11(x86,x64)対応、DX8用のd8vkもあるが動作未確認
    • dxvk.confで詳細設定の変更が可能で、編集方法がテキストエディタのみ
    • dxvk.confが無くともそれなりに動作する
    • 排他フルスクリーンの使用でフリーズ(Radeon環境のみ?)
    • そもそもLinux上でのWindowsゲームプレイ用に作られたものなので、基本的に動作無保証
  • dgVoodoo

    • グラフィックAPIをDX11もしくはDX12に置き換える
    • Glide(詳細割愛),DX8,DX9(arm64x,x86,x64)対応
    • dgVoodoo.confで詳細設定の変更が可能で、簡易GUIエディタが付属
    • dgVoodoo.confを作らないとゲームによってはプレイ不可
    • セキュリティソフトがウイルス扱いすることがあるらしい(当方では未確認)

AFMFドライバ パッチ5現在のAFMF利用可能条件は、まずゲームのグラフィックAPIがDX11,DX12,Vulkan,それとOpenGL トリプルバッファ有効時のOpenGLであることかつ、フルスクリーンであることです。たまに急に動かなくなるけど、まあベータだし…

フルスクリーンに関して、DX11だけは基本的に排他フルスクリーンのみがAFMFの対応であり、その他は仮想フルスクリーン(ボーダーレスフルスクリーン)でもAFMFの使用が可能です。

DX11のゲームに関して基本的にと言いましたが、ゲームがHDRで実行されている場合は仮想フルスクリーンでもAFMFが使用可能です。 仮想フルスクリーンでのAFMFの動作自体が不安定のようで、グラフィックドライバの再起動をしないと反映されないことがあります。

そもそもHDR対応ディスプレイを持っていない方もいらっしゃると思うので、仮想フルスクリーンは基本的にAPI変更を用いることになります。DXVKの他、D3D11on12で起動する方法がありますが、レジストリ捜査の必要があるので今回は割愛します。

話をDirectX9に戻しますが、WineD3Dは不安定、D3D9On12は次回の記事でちょっと触れますがオートHDRが使えません。 そのためDXVKとdgVoodooの2択になるのですが、昔のDX9のゲームは排他フルスクリーン、dgVoodooの設定ファイルはエディタで変更できるうえ大体使いまわせるので、私は基本的にdgVoodooで対応しています。

そのため、dgVoodooでの説明とさせて頂きます。

とりあえずdgVoodooで動かす

上のリンクからdgVoodooをDLし、適当なフォルダに展開します。

01

展開したフォルダからラッパーのDLLをDX9のゲームのexeと同フォルダに置きます。 今回はSITER SKAIN作、神威(Steam版)で説明します。

02

このゲーム自体がかなり古いものですので、もちろん32bitソフトです。なのでdgVoodoo2_81_3\MS\x86内にあるDLLを…

03




…?




04

全部ぶち込みます。

神威の場合実際はD3D9.dllのコピーだけで問題ないとは思います。が、心配ならとりあえず全部コピーしましょう。大体問題なく動きます。

64bitはD3D9.dll以外存在しないので楽チン。 3DfxフォルダのDLLはかつて存在したVoodooというGPUで用いられたGlideというAPIらしいです。 今回はDX9に関してしか触れません。

次にdgVoodooCpl.exeを起動し設定ファイルを作成します。 Cplフォルダ以下に64bit版もありますがおそらくどちらを使用しても問題ありません。

起動したらとにかく以下のように設定して、.¥を押してdgVoodooCpl.exeのフォルダにdgVoodoo.confが保存されるようにし、ApplyもしくはOKで保存して下さい。

05

とりあえずこの設定なら大体のゲームで動くはずです。 動かなかった場合はOutput APIをDX11以下にするか、DXVKの使用を検討してください。

保存したdgVoodoo.confをDLLと同じフォルダにコピーしたら、ゲームをフルスクリーンで起動します。 なお正常に動作している確認するために、Adrenalinの指標をデスクトップに表示し、最低でもグラフィックAPIとフレーム生成遅延を表示してください。

06

引き延ばされました…

デフォルトのDX9の表示だと16:9のモニタでも4:3表示されるため、ラッパーを入れたことによるもののようです。 dgVoodoo公式によるとAdrenalin上でアス比維持にしろということなのですが、そう設定しても引き延ばされます。

古いゲームの動作APIを無理矢理変更しているので、まあそういうこともあります。

こうなった場合は4:3のゲームでは先のエディタでScaling ModeをStreched, 4:3 Aspect Ratioに変更すれば、正常なアスペクト比でプレイできるはずです。(内部解像度がフルHD扱いになってOBSでも扱いやすい) アンチエイリアス強制オフにしたりCRT風エフェクトを掛けられたりと色々設定できるのですが、そのあたりは今回の記事に関係しないので割愛。 そもそも何もしなくても4:3でちゃんと表示されるゲームもあります。

肝心のAFMFは…

07

しっかり効いています。

60fps上限のDX9のゲームにdgVoodooを使い、AFMFを利用して120fpsで動作させることに成功しました。

なんか神威だとゲーム閉じるたびにフリーズしてるけど、ラッパー使用故致し方なし。

DXVKの場合…

ちなみにDXVKも上記のように該当するDLLをexeのフォルダにコピーするだけで動作します。ただし古いゲームだとそもそも仮想フルスクなど無い場合が多いので、Borderless Gamingなどを用いる必要があります。

が、今回の神威の場合、上の画像のようにしっかり画面サイズに引き延ばされます。回避方法が分かりません。 

おそらくDXVKでも設定ファイルなりBorderless Gaming側を弄るなり策はあると思うんですが、そもそもdgVoodooなら作り置きした安定コンフィグをDLLと一緒に放り込むだけでいいので、私はdgVoodooじゃどうにもならない場合にしかDXVKを使用していません。

AFMFが動かない場合

思いつく限りでまとめて書いておきます

  • DXVKもdgVoodooも、導入すると設定ファイルをどう書き換えても起動時にフリーズする

    ダメもとでWineD3D For WindowsかForce_D3D9on12を試すくらいしか手がありません。なお後者で起動できた場合、AFMFは使えてもオートHDRは恐らく使えません。

  • Adrenalinの指標でgraphic APIが該当なしになる

    Adrenalinのゲーム自動検出機能で一覧に反映させた場合、Adrenalinがゲームの起動状態を正常に取得できないことがあります。 この場合はタスクマネージャーなどを用いてゲームの実際の稼働ファイルを特定し、手動でAdrenalinにゲームとして追加する必要があります。 たまに該当なしの状態でも普通にAFMFが機能することがありますが、基本的にはAPIを取得できる状態にすることをお勧めします。

  • Adrenalinの指標から確認できるGraphic APIが変更されていない

    おそらく導入するDLLを間違えています。 ゲームが使用しているグラフィックAPI、ソフトのbit数を確認し、正しいDLLファイルに変更してください。

  • Vulkan, DX12にグラフィックAPIを変更し、指標で見ても確かに変更が適用されているが、フルスクリーンでAFMFが有効にならない

    一度このページの「注意」にもあるグラフィックドライバの再起動を行ってください。(dgVoodooを使用しDX9からDX12にすると、排他フルスクリーンでも仮想扱いになるらしい) ドライバ再起動後にゲームを起動してもAFMFが有効にならない場合、「すべての要件を満たしてもAFMFが起動しない(指標のAPI示あり)」と同様の状況になってしまっている可能性があります。

    その場合の解決策は現在見つかっておりません。

  • そもそもすべての要件を満たしているゲームでAFMFが起動しない

    稀にそういった場合があるようです。(パッチ5ドライバ環境のサガ スカーレット グレイスで確認) Adrenalinがゲームの表示状態を取得できていないのか、Vulkan化・DX12化してからBorderless Gamingによる強制仮想フルスクーン化を行っても、無効な表示方法となりAFMFを有効にできません。 この場合、Adrenalinのゲーム一覧から削除し手動でexeファイルを指定しても、グラフィックドライバを再起動しても解決できませんでした。 ユーザーサイドでの正攻法の解決策は無いものと思われます。

その他ランチャーとゲームが一体化したexeの場合、AFMFが機能しないという情報もありましたが、当方では未確認です。


実際に遊んでみて…

AFMFを使用しレトロゲーを遊んでみていかがでしょう、ヌルヌル感は実感できたでしょうか?

アリっちゃアリだが、まあ無くてもって感じだと思います。

海外の検証動画もありますが、すべての増加分のフレームで中間フレームが生成されている訳ではないようです。AdrenalinのReliveから120fpsでゲームをキャプチャすれば、コマ送りによって自分でも確認できます。(Relive以外ではキャプチャボードを介す必要がある)

試しに神威で撮ってみた動画をスクショしたのがこちら

08

125fps動作しているものを120fpsで録画しているのでおそらくフレーム欠けしていますが、この画像の3と6がAFMFで作成されたフレームです。前後のフレームの画像から差分を作成するため、このようなものが要所要所に挟まります。 生成に専用コアを使用するDLSS3 FGでもコマ送りすれば絵は破綻しているので、画質に関してはどうにもならないと思います。(ソフトでこれなら大健闘では?)

3Dゲームだと生成の恩恵が確実に感じられましたが、内部解像度の低い2Dドット絵ゲームのようなものは、60fps以上にしても効果が薄いようです。 4Kとかだとまた話変わるんですかね…?

ゲームによってはAFMFによる遅延で操作に支障が出ることもあるので、何にでも使っていい技術でないのは間違いない。 そもそも重いゲームを高リフレッシュレートモニターで快適に遊ぶための機能なので、この使い方自体が間違いかもしれない。


一旦ここまで

という訳で、DX11未満のゲームにAFMFを適用する方法でした。

ぶっちゃけ前座です。

記事内容が思ったより長くなってしまったので、オートHDR関連の記事を分けようと思います。

それではまた次回…


Profile picture

Written by doranarasi . Follow on X