【Radeon】VRChatのフレームレートがしっかり出ない原因を調査してみる

2024年7月のドライバでの話です。

気のせいだったかもしれないし、色々と変わってしまった今ではもう確認できなくてうやむやになった話です。未解決ですが、別に悪いことが起きているという話ではありません。

Radeon RX6800からRX7900GREに換えてVRChatをプレイしていたところ、やけに負荷が高くフレームレートが上がらないことに気が付きました。Infinity Cacheが半分になっているとはいえ、全体的に7900GREのが高性能なはずなので疑問に思い調べてみました。

Infinity Cacheについては以下が詳しそう。

「Radeon RX 6800」の秘密兵器はCPU由来の「Infinity Cache」だ
AMDのRDNA 2アーキテクチャを採用した新世代GPU「Radeon RX 6000」シリーズについての情報が全面的に解禁となった。その性能的な解析については同時掲載のHothotレビューを参照されたいが、ここではRadeon RX 60...

簡易スペック構成

  • Windows 11 Pro 23H2
  • Ryzen 7 5800X3D
  • RAM 32GB
  • Radeon RX 6800 → Radeon RX 7900 GRE
  • AMD Software:Adrenaline Edition 24.7.1

「当時の」具体的な症状

VRChatでの最高フレームレートが低い

RX6800を使用していたときは軽いワールドで90FPS、重いワールドで30FPS出ていました。RX7900GREに換えたところ軽いワールドで78~83FPS、重いワールドで43FPSとなっていました。余裕で90FPS出るはずの場所で全くフレームレートが出ません。

GPU負荷が100%に張り付いている

軽いワールドでのGPU負荷もRX6800では85%程度だったはずが、RX7900GREでは100%に張り付いています。(fpsVRでの表示)

スタッタリングが生じる

VRChatだけではなく、原神や崩壊:スターレイルをプレイしていてもスタッタリングが頻繁に生じています。7900GREに換装して間もなく24.7.1がリリースされたのでよく確認していませんでしたが、24.6.1の時点で酷いスタッタリングが起きていたように思います。

※DDUしてからインストールをしている

RX6800からRX7900GREへ換装するにあたって、DDUを行ってからドライバーのインストールをしています。

一時的な対処をしてみる

ドライバーバージョンを24.5.1まで下げました。

VRChatに関しては24.6.1へのロールバックでも問題なかったよという方もいらっしゃいます。ご参考までに。

24.5.1ドライバー

もし何らかの事情で24.5.1を使う必要がある方は、日本語版リリースノートでは24.4.1のリンクになっているので、英語版の方からダウンロードしてください。

https://www.amd.com/en/resources/support-articles/release-notes/RN-RAD-WIN-24-5-1.html

VRChatパフォーマンス比較

24.5.1にロールバックしたことで元通りになりました。ちなみにRX6800を使っていたとき(24.5.1)よりも動作は良くはなってると思います。(以下の画像)

とりあえず直ったなーと思っていたら再発したので関係なさそうでした。(後述)

試してみて特に変化がなかったこと

以下は試してみたものの、あまり有用ではありませんでした。

「ハードウェアアクセラレータによるGPUスケジューリング」をオンまたはオフにする

HAGSとも表記される機能です。どうしても不安定だったり不具合のあるハードウェアでない限りはオンにしておく方が望ましいです。現在のRadeonではRX7700以上かつ23.12.1から対応しているようです。

24.7.1においてこれを無効にすると、原神のスタッタリングはほんの少しだけマシになったように感じましたが、VRChatは変化無しでした。24.5.1では原神も問題ありませんでしたので、オンに戻しておきました。

余談なんですが、Radeonって結構昔からハードウェアスケジューラーが載っかってるんですね。元々部分的にスケジューリングをしていたそうなので、WindowsのHAGSを有効にすると完全に対応するようになるって事なんでしょうか……?

【後藤弘茂のWeekly海外ニュース】 バーチャルリアリティを加速するAMDのPolarisアーキテクチャ
AMDは、新GPU「Radeon RX 480」で採用したPolarisアーキテクチャで、GPUのフロントエンドの制御プロセッサ群を強化した。コマンドプロセッサとACE(Asynchronous Compute Engine)に加えて、ハー...

「ゲームモード」をオンまたはオフにする

バックグラウンド処理を抑えてゲームの優先度を上げたり、ゲーム中にWindows Updateが動作したりするのを止めておいてくれる機能です。ゲーム本体以外にもトラッキングなどの様々な処理が発生するVRゲームと相性が悪いとされています(本当に?)が、今回のトラブルについては特に変化はありませんでした。

こちらもオンに戻しておきました。

VRChatの起動オプションを弄ってみる

動画のハードウェアデコードを切ったり、スレッド優先度の変更をしてみたりしました。こちらも特に変化はなかったのと、そもそもRadeon環境では起動オプション無しでも動画をCPU側でデコードをしているような気がします。(タスクマネージャーを見る限りでは)

https://docs.vrchat.com/docs/launch-options

【追記】–enable-hw-video-decodingを使う

VRChatの起動オプション無しの場合、Unity Video Playerはハードウェアデコードが機能しますが、何故かAVProではCPUでのソフトウェアデコードになります。

ドキュメントには–disable-hw-video-decodingしか記載がありませんが、–enable-hw-video-decodingと書いて試したところ動画プレイヤーがAVProでもハードウェアデコードが行われるようになりました。

AMD HW Video Decode Unable to function properly | Bug Reports | VRChat
AMD GPU cannot use hardware decoding, even if -- enable hw video decode is used, it cannot be used, resulting in abnorma...

CPU側に余裕ができるので、環境によっては少し影響があるかもしれませんね。

VRストリーミングアプリを変える

PICO Connectをメインに使っているのですが、Virtual Desktopでも様子を見てみました。特に変化はありませんでした。

ストリーミングのエンコード形式を変える

HEVCやAVC(H.264)のどちらを試しても改善は見られませんでした。

SteamVRの再インストールやベータ版を試す

言わずもがな。でも明らかに動作がおかしいならしておいても良いかな。

Standable:FBEのVirtual Desktop用回避策を強制する

仮想トラッカーのStandable:FBE 2.0の不具合回避策を有効にしてみました。「Auto Detect VD Issues」をオフにして「Disable Velocity Math」をオンにします。(もしかすると自動検知していないかもしれないため)

「Standable: Full Body Estimation」バージョン2.0がリリース、ポーズ調整やフォールバック機能など多数の新機能
仮想トラッカーを追加して3点トラッキングでもフルトラのように振る舞える、「Standable: Full Body Estimation」のバージョン2.0がリリースされました。新規に書き直されて、新機能と共に設定UIも実装しています。既に...

なんとなくスタッタリングが減った気はしますが、根本的な解決には至っていません。きっと気のせい。(Standable:FBE自体CPU負荷がかかるものなのですが、普段から使っていたのでなんとも……。)

チップセットドライバを再インストールする

DDUしたときにすっ飛ばしたかもしれないので、再インストールしました。変化はなさそうです。

検証し忘れたこと

VRChatの再インストール

ワールドのキャッシュとかが悪さをしていた可能性はありますよね。

シェーダーキャッシュのクリア

上記と似ていますが、RX6800を使っていたときのものが残っていた可能性はあります。DDUはしたんですが、AMD Cleanup Utilityを使った方が良かったかもしれませんね。

AMD Cleanup Utility

どのあたりがおま環なのか調査してみる・根本的な解決

真っ新なWindows 11環境なら大丈夫なのでは?

納得がいかないので、検証用に別途用意してある「ほぼ真っ新なWindows 11環境」でブートして確認してみました。起動するドライブが違うだけでハードウェア構成は同一です。

新規にインストールしたのは以下のアプリケーションです。

  • PICO Connect
  • SteamVR
  • VRChat
  • fpsVR

Standable:FBEやOVR、XSOverlayなどは入っていません。

その後、24.5.1/24.6.1/24.7.1と順番に試してみたところ、変化はなく非常に快調に動作していることを確認しました。

一緒や!多分AMDは悪くないぞ!

貴方のWindows、壊れていませんか?

さて、こうなると他に影響を及ぼしているアプリケーションを特定する作業となるのですが、検証用Windowsから切り替えてメインのWindowsをブートしようとしたところ起動できなくなっており、スタートアップ修復(チェックディスク含む)をする羽目になってしまいました。

WHEA-Loggerダアアアアアアア

このハードウェアエラーに関しては、以前壊れたグラボを挿していたところ出まくっていたので見慣れたものですが、あれ……そもそもWindowsも壊れてません?これ……。そういえば7900GREに載せ換えたあたりから、起動時に強制再起動が掛かってたような気が。

ついでにsfc /scannowもしておきました。案の定、修復するものがあったので修復したと出ていました。

先程よりも若干重いが、ほぼ90FPSは出るように

メイン環境で24.7.1をインストールしVRChatを起動したところ、検証用に使っているホームワールドにおいて一応90FPSが出るようになりました。

先程のクリーンな環境と比べるとCPU使用率が20%程度高くなっており、少々重くはなっています。恐らくStandable:FBEの姿勢推定の計算やXSOverlayなどの各種アプリケーションが動作している分の差ではないかと思います。

原神などの動作も大丈夫そうに見えます。(しっかり確認はしてない)

いやぁ、情けない。ちゃんとWindowsのメンテナンスができていなかったという事です。ユーザーデータを保持したままWindowsの再インストールをする手もありますが、ProgramDataやAppDataフォルダは吹き飛ぶと思うのでバックアップは忘れないようにしてください。

メンテ、しようね。やれやれ一安心……。

・システムの修復
sfc /scannow
・Windows Updateからデータを持ってきて修復
DISM /Online /Cleanup-image /Restorehealth

再発しました

直ったじゃーんと油断していたら、24.5.1と24.7.1のどちらもパフォーマンスが出なくなりました。んん?w

関係あるか?謎のエラー

イベントビューアーを見ると、「Kernel-EventTracing」でエラーが発生しています。

次のエラーのため、セッション "dc3a3596-71e1-45a3-b2ea-39ad5322fe52" を開始できませんでした: 0xC0000035

Easy Anti Cheatのエラーらしいので、修復を試みましたが駄目でした。

  1. コマンドプロンプト等でSteamLibrary\steamapps\common\VRChat\EasyAntiCheatフォルダに移動して.\EasyAntiCheat_EOS_Setup.exe qa-factory-resetを実行します
    (※Program FilesフォルダのEasyAntiCheat_EOSフォルダとレジストリキーが削除される)
  2. VRChatの再インストール
  3. Visual C++の修復インストール
    サポートされている最新の Visual C++ 再頒布可能パッケージのダウンロード
    この記事では、最新バージョンの Visual C++ 再頒布可能パッケージのダウンロード リンクを示します。

以上を行って解決しませんでした。何かしらのエラーダイアログが表示されたりVRChatが落ちたりするわけではありませんが、微妙に快適では無い状態であり、もの凄くモヤモヤとします。

するか、Windowsのリセット……。

関係なかった、謎のエラー

Windows Updateを使ったリセットや、セットアップディスクからのクリーンインストールも試してみましたが、上記のEACエラーはなくなりませんでした。つまり、あんまり関係はないということです。(ログを見るとエラーが出ているだけでアプリケーションが落ちるわけではないしね)

Windowsが壊れていたり、EACがなんかやらかしていたわけじゃないとすると、このスッキリとしないパフォーマンスの低さは一体なんだろう……?丁度SteamVRのバージョンが2.7に上がるのも時期が重なっているので切り分けが難しくなってきました。このまま様子見するしかなさそうです。SteamVRはベータ版とパフォーマンスはあまり差が無かった気がするのですけれどね。

RX6800と比べると重いワールドに居るときや人数が多いときのパフォーマンスは確実に上がっているんですが、どうにも腑に落ちない感じがします。

そんなわけで、自分はモヤモヤしてますがWindowsくんはスッキリしました。

レイテンシーも見てみる

なんだか気になるので調査をしてみましたが、ハッキリとしたことは分からずじまいでした。上のスクリーンショットはVRモードでVRChat実行中のレイテンシー。

Wdf01000.sysはWindows Driver Frameworkなんですが、具体的にどれが該当するのかはちょっとわからないですね。グラフ見た感じではあんまり関係の無いように見えます。

以前raytrektabの不具合を調べたときは、タッチパネルのドライバーがトラブルを起こしていました。

raytrektab RT08WTのCPU負荷が高すぎる不具合
解決策タッチパネルを無効にする。修理に出してみる(小声)性能の割に遅い(調査)動作が遅いとは聞いていた「raytrektab 8インチモデル RT08WT」ですが、それにしてもどうにも様子がおかしい……。Celeron N4000にメモリ8...

dxgkrnl.sysはDirectX グラフィックス カーネル サブシステムだそうです。こちらもVRの動作で高負荷が掛かっていることを考慮するとそんなにレイテンシーは高くない。

msmpeng.exeはWindows Defenderですね。これは……スワップかな。

VRChatで長時間遊んでいるとブツブツと音にノイズが入るような現象も起きたので、なんかありそうだなぁって気はします。

原因の推測

モヤモヤするので、色々と考えてみます。

元々こんなもん説

RX 7900 GREはRX 6800と比べて明らかに高性能ではありますが、唯一Infinity Cacheだけが128MBから64MBへと半減しています。

GPUのボトルネックはメモリ周りだそうで、メモリキャッシュが上手くヒットすれば大きな差が出そうです。

「Radeon RX 6800」の秘密兵器はCPU由来の「Infinity Cache」だ
AMDのRDNA 2アーキテクチャを採用した新世代GPU「Radeon RX 6000」シリーズについての情報が全面的に解禁となった。その性能的な解析については同時掲載のHothotレビューを参照されたいが、ここではRadeon RX 60...

さて、今回気になっていたVRChatでのフレームレートですが、そもそも両目で5Kや6Kといった高解像度ですのでベンチマークの情報は殆ど存在しません。4KまではRX 7900 GREが確実に超えてくるのですが、それ以上となると未知の領域です。

状況としては、RX 6800で90FPSを出せていた軽い場面でギリギリ90FPSが出せず、重い場面では平均65FPS前後でしっかりとフレームレートが維持出来ているという感じとなっていました。90FPSを上限として見ていたのでなんとも言えませんが、実は以下のようなグラフになっていたのではないか?と推測しています。

※グラフの左側はあくまでも推測、つまり雰囲気こんな感じなのでは?という。でも右側は大体こんなもんです。

超高解像度かつ低負荷という限定的な状況において、RX 6800はたまたまキャッシュのヒット率が高くてフレームレートが高かっただけであり、負荷が上がると単純な処理性能の差が出てきたのではないかという考えです。

グラフの赤矢印の部分だけを見て、なんだかパフォーマンスが出ないなぁ?と思っていたのではないかと考えています。

もちろん120Hzに設定したQuest 2を引っ張り出してきて、RX 6800とRX 7900 GREをひっかえとっかえしながら計測すればちゃんとデータが取れますが、そのうちPCI Expressスロットを壊しそうなので推測だけにしておきます。

しかし、これは24.5.1と24.7.1で差が出たり、同一の状態に直ったり、また再発したりという最初の件とは別の話だと思われます。

時期が悪かった説

時期が悪いというとあまりにも無責任なんですが、24.5.1~24.6.1のRX 6800と24.5.1~24.7.1のRX 7900GREとの比較だけならまだしも、丁度SteamVR 2.7への大型アップデートとタイミングが重なっており、更にWindowsの不調が発覚するという面倒くさい状況に陥ってしまいました。

条件を揃えて検証できれば良かったのですが、その辺りをしっかりと行えず、有耶無耶となってしまったのはよろしくなかったと思います。せめてRX 6800を使っていた頃のデータを長期にわたってしっかりと残しておくべきでした。

ギリギリ90FPS出せないということ以外は目立った問題もなく、Windowsのクリーンインストール後も同様だったため、SteamVR周りで変化が生じてしまった可能性も考えられますが、強制的にSteamVRのダウングレードを行って原因の切り分けを行うなどを行うのは流石に骨が折れます。

VRChatの設定、厳密に揃えてなかった説

これを言い出すとマヌケだとしか言いようがないのですが、VRChatのグラフィック設定が同一でなかった可能性もあります。

VRChatでパフォーマンスに大きな影響が出るのは、ミラーの品質とアンチエイリアス(MSAA)の設定です。(少なくともRadeonの場合はそんな感じ)

アンチエイリアスは無効、2X、4X、8Xでかなりフレームレートに差が出ますので、比較の際は「現在のレンダリング解像度を確認のうえ4Xにする」と決めています。しかし、ミラー品質に関してはしっかりと確認をしていませんでした。

ミラー品質も「フル」と「無制限」では幾らか差が出ますので、手動で無制限にしているのを忘れていると正しい比較が行えません。

ただ、ミラーを出していない状態でも安定して90FPSが出せない感じでしたので、とりあえず今後は厳密に設定を確認するという点を心掛けておこうと思います。

RDNA2とRDNA3の差?

もう十分にこなれてきたと思われるRDNA2(Radeon 6000シリーズ)と、ようやく既知の不具合も減ってきたとRDNA3(Radeon 7000シリーズ)の違いがあるのかもしれません。特にRDNA3世代は丁度1年前の23.7.1までVRのパフォーマンスが想定より低いという不具合がありました。

スタッタリングが起きたりするのと同じように、一度直した不具合がもう再発しないとは限りませんので、様子見する必要はあると思います。ゲーム機やスマホと違って様々な違いが生じるPCは、同じようなハードウェア構成でもトラブルが起きる人と起きない人がいるあたり、なかなか難しい問題ですよね。

適切な解像度で遊ぶべきでは?

それはそう。

RX 7900 GREはRX 6950 XTよりも下ぐらいに位置するはずですので、高過ぎるのは良くないですね。HMDはPICO 4を使っているのですが、例えばRX 6800 XTではPICO Connect的にはHigh 2208pxで、Virtual DesktopはHigh 2544px設定が妥当という感じのようです。

PICO ConnectVirtual Desktop
Potato 1488px
スムーズ(Smooth)1728pxLow 1776px
標準画質(Standard)1920pxMedium 2064px
高画質(High)2208px
超高画質(Super)2592pxHigh 2544px
Ultra 2736px
ウルトラHD(Ultra)3120pxGodlike 3120px
ウルトラHD(Ultra+)3480px

片目2208px設定にしたら多少の余裕ができるのはそうなんですが……。微妙に安定しないのは一緒なんですよね。

良いか悪いかで言うと

なんだか気にはなるものの、Radeon RX 7900 GREのパフォーマンスはRX 6800から換えて良かったと思えるものであることは間違いないです。フレンドと4人でVketを見て回った時の平均フレームレートは60FPS以上ありましたし、ここ数日間で低フレームレートによる不快を感じなかったのは嬉しい点です。

ユーザー側の自由度が高すぎて最適化とは程遠いVRChatにおいて、90FPSを維持するのは困難です。というかほぼ無理でしょう。普段の遊び方で十分なパフォーマンスが出ているので、ギリギリ90FPS出せない事に実害はありません。

ただ、これが何かしらの不具合で最高のパフォーマンスが出ていないのか、7900GREの性能的にギリギリのラインを見てしまっているだけなのか、理由がハッキリとしていないのがとても気になって仕方ありません。7900GREは純粋なラスタライズ性能はありますが、メモリ性能的には7800XT未満なところがあるので7900XTやXTXを選ばなかったのが敗因とも言えます。(妥協はダメだね)

まぁ、いずれ結論が出ることに期待しつつ記憶の彼方へ放り投げ、現状で様子見することにします。それではまた。

タイトルとURLをコピーしました