以前から話題になっていたAMDのFMF(Fluid Motion Frames)とFSR3であるが、1月24日にリリースされたAdrenalin 24.1.1でこれが正式にサポートされることになった。そこで実際にどの程度の効果があるのか、について簡単に試してみる事にした。

Fluid Motionの仕組み

そもともFMFが最初に実装されたのは2014年、Radeon Omega Driverの時代である。仕組みとしては図1の様な構成で、要するにApplication(この初期の時代だとDVD Player)は映像を定期的に生成するわけだが(図1で言うところの正規フレーム)、その間にドライバ側で正規フレームと正規フレームの間に補完フレームを生成、埋め込んで表示することでよりスムーズな表示が可能になるというものだ。これはAMDの公式の動画では無いが、このFluid Motionを使う事でスムーズな映像表現が可能になる、というデモ動画がYouTubeにあがっている

  • 図1

<デモ動画>AMD Fluid Motion compare

ちなみにこのフレーム補完、例えば図1で言えば正規フレームのNとN+1を元に補完フレームNを作り出すのは簡単だが、それをやると補完フレームが生成できるのは本来正規フレームN+1が表示されるタイミング以降になってしまい、要するにLatencyが大きくなる。なので、補完フレームNを、正規フレームN+1を待たずに正規フレームNだけ(ないし、正規フレームMN-1)からどうやって生成するのか?(そしてそれが正規フレームN+1とスムーズにつながる様にできるのか)がテクニックの見せどころである。

この最初のFMFはPolaris及び一部のGCN 1.0のGPUでサポートされ、次いでGCN 2.0でもサポートされることになったが、なぜかAMDはこれをRDNA世代ではサポートせず、また当初は動画再生以外では利用できなかったこともあって、あまり一般的には広まらなかった。

さて、この仕組みを動画再生だけでなく3D Gamingにも持ち込んだのが今回のFMFである。理屈は図1と同じで、単にApplicationがDVD PlayerからGameに切り替わっただけである。ただ問題は、これもGPUのShaderを利用して実装されていることだ。DVD Playerの場合、動画のデコードそのものは専用のデコーダが入っているから、GPUのShaderは多少処理があっても殆ど休止に近いくらい負荷が低かったので、Fluid Motionの処理には問題が無かった(図2)。ところが3D Gamingの場合はしばしばShaderがフル稼働している。ここでFluid Motionの処理を挟むと、図3の様な形になり、特に処理が重いような場合ではフレームの補完処理そのものが本来のGameのRenderingの処理を圧迫する様になり、むしろ性能が落ちかねない。実際AMDもFMFを使う目安として、素の状態で60fps程度の表示が可能であることを挙げている。実際は60fpsでもちょっとギリギリという感じで、もう少し性能に余裕がないと厳しいだろう(これは後で実際にベンチ結果でご紹介したい)。

  • 図2

  • 図3

またDVD Playerの場合、ユーザーは基本見ているだけだからフレーム補完で滑らかな動画を楽しめるわけだが、Gameの場合はユーザーのアクションが必須になる。例えば図3で、正規フレームNが表示されている時にアクションを起こしても、それが反映されるのは早くても正規フレームN+1であって、補完フレームNには反映されない。つまりユーザーから見るとタイムラグが生じているように感じられるわけだ。これは補完フレームNの時にアクションを起こした場合も同じで、こちらだと次の正規フレームNのタイミングでは間に合わず正規フレームN+1以降になる。このタイミングのずれは原理的に如何ともしがたく、それもあってE-Sportsなどではフレーム補完を禁止している例もある。

これは要するに元の、つまり正規フレームの生成が十分な速度(例えば120fpsとか)で行えていればそれほど致命的な問題にはならないが、そもそもそこまで正規フレームの生成が高速ならばフレーム補完の必要がどこまであるのか? という根本的な問題もあって、なかなかうまく行かないものである。このあたりは実際にプレイしてみないと何とも言い難いところではあるが。

余談ではあるが、これとは別にフレーム補完作業を挟むことで次の正規フレーム生成に遅れが出る事が当然あり得る。これを最小にするため、Fluid Motion Framesを有効にする場合はRadeon Anti-Lagが自動的に有効になる(後で手動で無効化もできる)様になっている。

そういえば説明をし忘れたが、このFMFのOn/OffはRadeon Settingsから行う形で、アプリケーション側の対応は一切不要である(Photo01)。またFMFを利用する場合、In-Game BenchmarkとかOCAT/FrameViewといったフレームレート測定ツールでは正しくフレームレートを計測できない。これらのツールはあくまでGameが生成するフレームレートを測定しており、Fluid Motion Frameの補完フレームはドライバ側だけで行っているので、これを検出できないためだ。このためフレームレートの測定は、やはりRadeon SettingsのPerformance Tabに用意されているLogging機能を使って行う必要がある(こちらはちゃんとFluid Motion Framesで追加された補完フレームも数えてくれる)(Photo02)。

  • Photo01: Games→Graphics Tabに"AMD Fluid Motion Frames"が出現している。余談だがAnti-Lagの方もこんな問題があったりするので、注意。

  • Photo02: Loggingはデフォルトだと1秒間隔だが、今回は0.25秒間隔で測定を行った。

ちなみに、このAdrenalin 24.1.1ではFSR 3も正式にサポートされた。FSR 3の概要はこちらの記事に簡単にまとまっているが、昨年12月にはOpen Sourceとして公開。また今年1月11日には動画再生のサポートも追加されたことが明らかにされている

テスト環境

ではFMFとFSR3がどの程度の性能向上をもたらすのか、を簡単に確認してみた。FMFが利用できるのはRadeon RX 6000シリーズ及びRadeon RX 7000シリーズ、それとRadeon 700MベースのAPUという事になっている。つまりRyzen 7000シリーズの内蔵GPUは対応外である(まぁ対応したとしても効果は期待できそうにないが)。そこで今回はRadeon RX 7800 XT、Radeon RX 6800 XT、それとRadeon RX 6600の3枚のビデオカードを用意した。

今回は簡単に、ということで解像度は2K(1920×1080pixel)に固定して、3枚(AFOPのみ4枚)のビデオカードで同一の描画品質でベンチマークを走らせ、フレームレートを測定して比較してみる形とした。

表1がテスト環境である。ちなみにビデオカードにGeForce GTX 1660が混じっているのは、FSR 3の動作検証のためで、Fluid Motion Framesはテスト対象外である。

CPU Ryzen 7 7800X3D
M/B ASUS Prime X670E-PRO WiFi
BIOS Version 1809
Memory Corsair emgeance CMK32GX5M2D6000Z36
DDR5-5200 CL44 32GB×2
Video ・ASRock Radeon RX 7800 XT Phantom Gaming 16GB OC
・MSI GeForce GTX 1660 AERO ITX 6G OC
・AMD Radeon RX 6800 XT Reference
・ASRock Radeon RX 6600 Challenger D 8GB
Driver Radeon Software Adrenalin Edition 24.1.1 GeForce Driver 551.23 DCH WHQL
Storage Seagate FireCuda 520 512GB(M.2/PCIe 4.0 x4) (Boot)
WD WD20EARS 2TB(SATA 3.0)(Data)
OS Windows 11 Pro 日本語版 23H2 Build 22631.3085

なおグラフ中の表記は

RX6600 :ASRock Radeon RX 6600 Challenger D 8GB
RX6600 FMF :ASRock Radeon RX 6600 Challenger D 8GB FMF有効
RX6800XT :AMD Radeon RX 6800 XT Reference
RX6800XT FMF:AMD Radeon RX 6800 XT Reference FMF有効
RX7800XT :ASRock Radeon RX 7800 XT Phantom Gaming 16GB OC
RX7800XT FMF:ASRock Radeon RX 7800 XT Phantom Gaming 16GB OC FMF有効 となっている。

◆3DMark v2.28.8217 SpeedWay(グラフ1・2)

3DMark v2.28.8217
UL Benchmarks
https://benchmarks.ul.com/3dmark

  • グラフ1

  • グラフ2

3DMarkでは一番負荷の高いSpeedWayを実施してみた。グラフ1が最小/平均/最大フレームレートであるが、ご覧の通りFMFの効果はまるで見えない。これはフレームレート変動(グラフ2)からも明らかで、実際フレームレートに殆ど差が無い。

ちなみにグラフ1・2はRadeon SettingのPerformance Loggingでの結果であるが、ではSpeedWay自身ではどう計測していたか?というと平均フレームレートは

FMFなし FMFあり
RX6600 14.09 13.83
RX6800XT 35.37 35.41
RX7800XT 39.37 39.48
(いずれもfps)

といった感じ。性能に余力のないRadeon RX 6600ではFMFがオーバーヘッドになっているが、性能にゆとりのあるRadeon RX 6800 XT/7800 XTではオーバーヘッドも無視できる程度で、ただしなぜか性能向上は見られないという結果になった。要するに、フレーム生成をしてる時間が無いほどにShaderの負荷が高すぎるという事の様に思われる。

◆Avatar Frontiers of Pandora(グラフ3~6)

Avatar Frontiers of Pandora
Ubisoft
https://www.ubisoft.com/ja-jp/game/avatar/frontiers-of-pandora

AFOP(Avatar Frontiers of Pandora)は今回新規追加したタイトルである。リリースは昨年12月7日と割と新しめである。これを採用した理由は

  • In-Game Benchmarkが内蔵されている
  • FSR3に対応している

の2つである。さてベンチマーク方法だが、Top Menu(Photo03)からSettingsを選び、Video Tab(Photo04)で解像度を変更、次いでGraphics Tab(Photo05)で画質設定を行った後、右下の"Benchmark"ボタンを押すとベンチマークが始まり(Photo06)、完了すると結果が表示されると共にフレームレートがcsvの形でMy Gamesの下に保存される(Photo07)。なおFSR 3はPhoto04のTemporal Upscalerから設定できる(Photo08)。

  • Photo03: AFOPはとにかくロードに時間が掛かる。初回起動時、この画面にたどり着くのに10分近くかかった(2回目以降は早い)。

  • Photo04: 設定変更後は右下の"Apply Settings"で確定する必要がある(これは次のGraphics Tabも同じ)。

  • Photo05: これはまだ試行中だったので、プリセット(Graphics Quality)をLowにしている。

  • Photo06: ちなみにベンチマークそのものはトータルで85秒ほどなのだが、シーンが3つに分かれており、しかもシーンとシーンの間が非常に長いため、色々問題が...

  • Photo07: 上の2つはCPUとGPUの負荷率で、一番下がフレームレートである。Radeon RX 6600でもQualityがLowならそれなりにプレイできる、というべきか。

  • Photo08: "Temporal Anti-Aliasing"と"FSR3"の二択。DLSS/XeSSには未対応。

ということでテスト方法であるが、Graphics QualityをHighとして実施した。

  • グラフ3

  • グラフ4

  • グラフ5

  • グラフ6

結果だが、FSR3無しがグラフ3、有りがグラフ4である。FSR3のQualityはBalancedとした。結果を見ると、やはりRadeon RX 6600ではHigh Qualityだと荷が重いようで、FMFを使っても性能が伸びないどころかむしろ下がっている。ところがFSR3を併用した場合、平均フレームレートも大幅(83.7fps→155.1fps)に向上しており、それもあってFMFを併用すると273.0fpsである。実に3倍以上のフレームレート向上が期待できるわけだ。

こう書くと「そもそも83.7fpsは十分高速なのでは?」と言われそうだが、実はこれ、AFOPのベンチマークとRadeonのLogging機能の相性が最悪な事の弊害である。Photo06のキャプションで書いたように、ベンチマークそのものは全部で85sec程度だが3つのパートに分かれており、しかもその3つのパートの間の時間が無茶苦茶長い。おまけに、フレームレートから「ここはベンチマーク中、ここは間のローディング中」と見分けることが出来ない(グラフ5・6で、どこがベンチマーク中でどこがローディング中なのか見分けがつくだろうか?)。グラフ3・4はそんな訳でローディング中のフレームレートも加味した数字にならざるを得ず、なので実際のゲーム中のフレームレートをRadeon SettingsのLoggingから正しく取得できていない。

ちなみにAFOPのIn-Game Benchmarkでの結果はこんな感じである。

(FSR3なし) Min Avg Max
Radeon RX 6600 44.0 59.4 73.0
Radeon RX 6800 XT 93.0 122.7 154.0
Radeon RX 7800 XT 89.0 122.7 159.0
(FSR3あり) Min Avg Max
Radeon RX 6600 48.0 65.1 82.0
Radeon RX 6800 XT 99.0 131.6 166.0
Radeon RX 7800 XT 103.0 142.8 189.0
(単位:fps)

Radeon RX 6600だと平均で60fpsを切っているので、FMFを使っても性能向上がちょっと厳しいが、FSR3を併用するとちょっと上がるのでなんとかFMFを使う余地が生まれる、というあたりか。そんな訳で、実際のゲーム中のフレームレートは、グラフ3・4とこの上の結果を見比べながら推定するといった感じになる。

グラフに話を戻すとRadeon RX 6800 XTは丁度いい感じに性能的にもゆとりがあるためか、FMFでの性能の伸びが大きい。またFSR3も良く効く感じだ。逆にRadeon RX 7800 XTではFSRなりFMFを使うとむしろフレームレートが上がり過ぎてしまい、CPUがボトルネックになるためか、むしろ性能が下がっているのが気になる。特にFSR3とFMFを併用した時の落ち具合が酷い。もっともRadeon RX 7800 XTの場合、何もしなくても十分な性能が発揮されているから、下手にあれこれしない方が無難ということかもしれない。まぁそんな訳でFSR3もFMFもちゃんと効果がある場合はあるが、どんな場合にも効果があるとは限らない事が確認できた格好だ。

ちなみにAFOPをGeForce GTX 1660で試した結果は以下の通り。

Min Avg Max
GeForce GTX 1660 27.0 36.98 47.0
GeForce GTX 1660+FSR3 23.0 34.81 45.0
(単位:fps)

ちゃんとGeForce GTX 1660でもFSR3は動いたのだが、動いただけとったところで性能向上は見込めず。流石にQuality:Highは無茶すぎたようだ。Quality:Lowあたりで試すともう少し意味のある結果が出たかもしれない。

◆Far Cry 6(グラフ7~8)

Far Cry 6
Ubisoft Entertainment
https://www.ubisoft.com/ja-jp/game/far-cry/far-cry-6

描画設定であるが、

Quality:High
Antialias:TAA DXR Reflections/Shadows Off

として実施している。またDXRTは無効化している(有効化するとRadeon RX 6600の結果が絶望的に下がるのが見えているため)。

  • グラフ6

  • グラフ7

結果は実に判りやすいというか、性能に余力のないRadeon RX 6600だと殆どフレームレートが向上しない(というか、むしろ下がる)のに対し、性能に余力のあるRadeon RX 6800 XT/7800 XTでは倍位にフレームレートが向上している。FMFの有効性を如実に示してくれる結果になった。

◆Hitman 3(グラフ9~10)

Hitman 3
IO Interactive A/S
https://www.epicgames.com/store/ja/product/hitman-3/home

描画設定は

Level of Detail :High
Texture Quality :High
Texture Filter :Anisotropic 16x
SSAO :High
Shadow Quality :Ultra
Mirrors Reflection Quality:High
Reflection Quality :High
Variable Rate Shading :Off
Motion Blur :High
Simulation Quality :Base

と全体的に低めに設定している。

  • グラフ9

  • グラフ10

さて結果だがこれも微妙で、一応グラフ9を見ると判るようにフレームレートの向上はどのビデオカードでも見られるのだが、一番性能向上比が大きいのはRadeon RX 6800 XTでRadeon RX 6600/7800 XTでは「上がっているけど微妙」といったところ。これはフレームレート変動(グラフ10)でも明白である。もう少しRadeon RX 7800 XTでも性能向上が見られると思っていたのだが、これは意外だった。

◆Metro Exodus PC:Enhanced Edition(グラフ11~12)

Metro Exodus PC:Enhanced Edition
4A Games
https://www.metrothegame.com/

  • グラフ11

  • グラフ12

描画プリセットはHighでおこなっている。こちらはもう明確に性能向上が示されており、75~85%のフレームレート増加が確認できる。特に注目したいのは、75~95secあたりの部分。ここは一番描画が重い部分であり、描画プリセットをUltraとかにするとRadeon RX 7800 XTでも恐らく60fpsを切るかどうか位まで下がる部分で、実際FMF無しだと結構なフレームレートの沈み込みを見せている訳だが、FMFを併用するとRadeon RX 6600ですら60fos超えであり、Radeon RX 6800 XT/7800 XTでは160fps近いフレームレートが確保されている。これは確かにゲームをやる際には非常に有用だろう。

まとめ、大きな効果は環境次第

ということで簡単にFMFとFSR3の効用を確認してみた。結果から言えば「効果がある場合もある」。常に効果があるわけではなく、GPU側にある程度の余力がないと性能向上が見込めない場合が少なくない、というのは結果で示されたとおりだ。これはFSR3も同じ。まぁ今回AFOPを選んだのはちょっと間違いだったと反省しており、次はFORSPOKENあたりに切り替えようと思うが、それでも条件が良ければFSR3とFMFの組み合わせて3倍以上フレームレートが向上するという結果は確認できたので、あとは環境次第ということになる。

多分だが、Radeon RX 6600はFMFの効用を享受するにはちょい力不足で、Radeon RX 7600あたりが最低グレードと考えた方が良さそうだ。それ以上の性能があれば、それなりの効果が期待できそうである。とりあえずドライバの更新だけで利用できるので、ご自分の環境で試してみるのは悪くないだろう。