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

July 29, 2024

Post
Share
Line
Hatena bookmark

タグ:AFMF, dgVoodoo, フレーム生成

目次 +

まえがき

この記事は去年上げたものの加筆修正版です。去年の記事は削除せず残していますが、

当時基準でも誤った情報が散見されたため、

新しいこちらの記事を参考にしてください。

大筋の内容は去年上げた記事と同一のものになります。


注意

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

要件を満たしているのにAFMFが動かない場合、一度デスクトップ常駐表示系ソフト(要するにオーバーレイ)をすべて閉じてください。 メインディスプレイの領域にそういったものが描画されていると、ゲームのFPSが拾えなくなります。 私の場合は某時刻表示ツールのGUIの透過部分が設定の問題でメインディスプレイ領域に若干被っており、それが原因で仮想フルスクリーンでのAFMFの利用を妨げていました。

それで改善しない場合はsfc, dism等のシステム修復ツールを利用、それでもダメならDDU(Display Driver Uninstaller)を利用したGPUドライバー関係の完全削除が必要です。最悪の場合、OSの再インストールしか手がない可能性もあります。

私は過去にことあるごとに「win+Ctrl+Shift+Bキー」でドライバ再起動してくださいと書いていましたが、そもそもこれはGPUドライバ再起動のコマンドなどではないうえ、これは極力行わないほうが良いとのことです。

詳細は省きますが、これは黒画面等の映像が正常に映っていない場合の対策用コマンドであり、押すたびにMSに診断用テレメトリデータを送信したり、不要なログがPCに溜まり続けたりするとのことです。 win+Ctrl+Shift+Bキーは、最終手段だと思ったほうがいいです。


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

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

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

Windows11 23H2ではこれといった安定策はなさそうです。

当環境ではdgVoodooをHDRで利用する場合、フルスクリーンに正常に移行しない、またはフルスクリーンだと一切動かなくなるゲームがいくつか見られました。 DXVKは逆にSDRなら多少動くようになっていました。安定には程遠いが…

結局私はdgVoodooをメインで利用し、フルスクリーンで異常が出る場合は外部スケーリングツールを利用しています。

  • DXVK

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

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

    • グラフィックAPIをOpenGLに置き換える
    • DX1~11(x86,x64)対応
    • 詳細設定?ねえよそんなもん
    • 上記2種類よりも安定動作することがある
    • OpenGLだからか若干重い気はする
    • そもそもLinux上(ry

現在のAFMF利用可能条件は、まずゲームのグラフィックAPIがDX11,DX12であることかつ、フルスクリーンであることです。 レジストリを編集することで、対応APIはDX9,Vulkan,OpenGLまで広げることができます。 詳しくは下記ページの「DirectX9でもAMD Fluid Motion Framesが機能する」を確認してください。

実のところAFMFが使えればいいだけの場合、

レジストリ書き換えを容認するなら、以下の手順は基本すべて不要です。

ですがこの一連の記事の本題はそこではないため、ラッパーによるDX9ゲームの動作API変更を行います。 Win11 23H2ではゲームによってはDX9のままだと動作に問題があることがあるので、その対策にもなります。

D3D9On12という選択肢も一応あるのですが、次回の記事でちょっと触れますがオートHDRが使えません。 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によるDX12化は他のラッパーと比較し一つ大きな差があり、フルスクリーンの動作が基本的にボーダーレスに強制されます。 だから何なのかというの話はまた別の機会に。

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

06

引き延ばされました…

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

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

そもそも神威は同梱の設定ツールから16:9モードを選べるのでその設定すればいいのですが、 先のdgVoodoo設定エディタでScaling ModeをStreched, 4:3 Aspect Ratioに変更することでも解決できます。 アンチエイリアスを強制オフにしたりCRT風エフェクトを掛けられたりと色々設定できるのですが、そのあたりは今回の記事に関係しないので割愛。 そもそも何もしなくても4:3でちゃんと表示されるゲームもあります。

肝心のAFMFは…

07

しっかり効いています。

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

DXVK, WineD3Dの場合…

ちなみにDXVKも上記のように該当するDLLをexeのフォルダにコピーするだけで動作します。 ただし古いゲームだとそもそも仮想フルスクなど無い場合が多いので、Borderless Gamingなどの外部スケーリングツールを用いる必要があります。 ツールによって挙動は異なるようなので、色々試してみてください。

WineD3Dも同じくDLLをexeのフォルダにコピーで問題ありません。

AFMFが動かない場合

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

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

    ダメもとでWineD3D For WindowsかForce_D3D9on12を試すくらいしか手がありません。なお前者は前述のとおりレジストリ書き換えが必須であり、後者はAFMFは使えてもオートHDRは使えません。

  • ラッパー導入後にゲーム内設定でフルスクリーンにすると画面更新がされず、強制終了するしかなくなる

    その場合はゲームでの表示変更は諦めてウインドウ起動とし、外部スケーリングツールによるボーダーレス化を検討する必要があります。 当環境だと、ラッパー未導入の状態でも動作に不具合があるゲームでこうなりやすい印象です。 そういうゲームでもWineD3Dだと安定起動することがありますが、こちらもフルスクリーン切り替え繰り返すと固まるようです。

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

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

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

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

  • すべての要件を満たしているゲームで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ドット絵ゲームのようなものは、AFMF程度の生成頻度ではほとんど意味がないようです。

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


一旦ここまで

HDR編2024年版に続きます


Profile picture

Written by doranarasi . Follow on X