【VRChat】FPSが出ないのは性能不足のせいじゃないかも...？　～PCVRのフレーム補間について～

# 注意
この記事は、PCVRでゲームをプレイする際にはたらくASW/SSWなどのフレーム補間技術について触れたものです。
ターゲットは主にQuest/PICOのHMDを使う**PCVRユーザー**になります。

**VIVEやINDEXなどをはじめとするPC接続型のHMDでは勝手の異なる場合があります。**
**該当するHMDをお使いの方はご注意ください。**

タイトルではVRChatと書きましたが、正しくはPCVR全般に関係するものになります。
Motion Smoothingについては手元に環境がないため解説はしません。

毎度のことながら間違いを含む可能性があります。
もし見つけた場合はコメントにてご指摘いただけますと幸いです。

# 挨拶
VRChatterの方も、そうでない方もこんにちは。
やっとこさPCを組んだはいいものの、グラボの初期不良を2回引いてメンタルがズタボロなHellcatです。
今回は、PCVRでゲームをプレイする際にはたらくフレーム補間技術について、その機能とデメリット、そして無効化する方法について解説をさせて頂こうと思います。
ではでは今回もよろしくお願いします。

# 前提
参考までに私のPC構成を簡単に載せておきます。
・CPU：Ryzen 7 5700X3D
・GPU：Radeon RX 7800XT
・MB：ASUS TUF GAMING B550-PLUS
・メモリ：DDR4-3200 64GB (32x2)
・SSD：1TB + 2TB
・電源：750W (80+ BRONZE)

・HMD：Oculus Quest 2



# フレーム補間って？
まずこの説明をしないことには始まりません。
フレーム補間とは、名前の通り
**「描画されたフレーム同士の間を補完して、映像をより滑らかに見せる」**
技術のことです。
DLSS FGやAFMFなどもこの類のもので、この名前ならピンとくるという方も居るのではないでしょうか。
(DLSS FGに関してはフレーム"生成"なので厳密には違うかも...？)

今例として挙げたものは、主に非VRゲームにおいてFPSの向上を目的として使われていますが、これらとはまた毛色の違ったものがPCVRでは使われます。
それが今回の主役です。

# PCVRで使われるフレーム補間技術
普段VRChatなどをプレイしていて意識することはまず無いと思いますが、実はQuest LinkやVirtual Desktopなどには独自のフレーム補間技術が実装されており、**厄介なことに**それらは初期状態で有効化されているケースが多いです。

最もよく使われるのは以下の二つです。
**・Virtual Desktop：Synchronous Spacewarp**(以下SSW)
**・Quest Link / Pico Connect：Asynchronous Spacewarp**(以下ASW)

名前が分かれているとDLSSとFSRのような違いをイメージするかもしれませんが、この2つの挙動にや性能に大した差はありません。
1つ言えるとすれば「**PCの性能が足りているなら全て等しく邪魔である**」ということです。

...こう書くと滅茶苦茶な思想を掲げる人みたいに見えるかもしれませんが、ちゃんと理由があります。

それは、これらが共通して
「GPUから出力される映像のFPSがソフト側で設定した最大値に届かない場合、**自動的にFPSを半減させて残りのフレームを生成する**」
という挙動を示すからです。

具体例を出すと
**・最大リフレッシュレート72**
**・フレーム補間ON**
という設定にした場合、仮にGPUが60FPSで映像を出力できたとしても、最大リフレッシュレートに達していないため、**出力が強制的に36FPSに落とされてしまう**という現象が発生します。

この際に補間されるフレームの質が良ければまあ頷けなくもないのですが、悲しいことにそうではなく、明らかにFPSが落ちていることが分かってしまうレベルのものです。
あくまで私の主観ですが、**補間されていない36FPSの映像とほぼ変わらない**ように感じました。
先程「厄介なことに」と書いたのはこれが原因です。

ではどうするか。
答えは一つ、無効化してしまいましょう。
てことで次のセクションに移ります。

# 1. Virtual Desktopを使っている場合
一番設定が簡単なケースです。
VDの場合は、HMD側でVDのメニューを開き、**Streaming**の設定画面に飛ぶと
「**Synchronous Spacewarp(SSW)**」という項目があります。
デフォルトだと**Automatic**になっているので、これを**Disabled**に変えてしまいましょう。
![20220308213813.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/8024c19e-342e-0a28-9e99-4a729f7bb0dc.jpeg)
これで設定は終わりです。
効果が気になる場合は、以前訪れて少し重いと感じたワールドを再度訪れて、XSOverlayなどでFPSを確認するといいでしょう。
最大リフレッシュレートの半分(36fpsや45fps)に張り付くような挙動をしていなければ、設定は完了です。

(画像は[こちら](https://tona.hatenablog.jp/entry/2020/09/21/205704)の記事からお借りしました。)

# 2. Pico Connectを使っている場合
こちらは主にPICO4などのユーザーが対象になります。
手元に環境が無いので[他の方の記事](https://blog.pikegadge.com/pico-connect-beta-review/#toc6)を引用させて頂きますが、Pico Connectでは通常の設定画面からASWの有効/無効を切り替えることが出来るとのことです。
![image.png](https://blog.pikegadge.com/wp-content/uploads/2024/04/2024-06-20-012036.png)

PC側で設定画面を開き、設定->ゲーム と進むと「フレーム補間」という項目があるので、これをOFFにしてしまいましょう。
ここで使われているフレーム補間技術はASWで、Quest Linkと共通のものになります。
こちらは反映にアプリの再起動が必要になるとのことなので、設定後は忘れずにやっておきましょう。

# 3. Quest Linkを使っている場合
最も設定が面倒なケースです。
先程までの2つはアプリケーションの画面から設定を変更することが出来ましたが、Quest Linkではなんとそれが出来ません。
ではどうするかというと、OculusDebugToolを使うか、レジストリを編集するかという面倒な回り道をする必要があります。

レジストリを使う方法は1回書き込むだけで済むので、今回はそちらを使いましょう。

まずWindowsキーとRキーを押して「ファイル名を指定して実行」を開き、そこに`regedit`と打ち込みます。
そうするとレジストリエディタが開くので、以下の階層に飛んでください。
(画面上の欄に入力することで移動できます)
`HKEY_LOCAL_MACHINE\SOFTWARE\Oculus`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/a32adc84-69f0-bef8-df82-2dc07c972a91.png)

そうして移動したら、画面右側を右クリックして、"新規->DWORD(32ビット)値"と進み、作成した値に`AswDisabled`という名前を付けます。
**この名前を間違えると設定が反映されません。**

そうしたら作成した値をダブルクリックして編集画面に入り、値のデータを1に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/d49bcf86-1003-5987-1ac4-ff7dddcb114f.png)

これでレジストリの編集は終わりです。
**レジストリの編集はPCを再起動しないと反映されないので、必ずやっておきましょう。**

先程と同様、最大FPSの半分に張り付くような挙動が無くなっていれば設定は成功です。

:::note
もし該当するレジストリキーが見当たらない場合は、同名のキーを自分で作ってしまうか、[**OculusTrayTool**](https://vr-maniacs.com/entry/oculus-tray-tool/)というソフトを使うことをお勧めします。
:::

:::note warn
ごく稀にASWが強制的にONになってしまう環境が存在します。
私の場合はマザーボードのユーティリティソフトを消したことが原因でした。
もし可能性として気になるようでしたら、VDでSSWを無効化した時の挙動と比較してみてください。
:::

# まとめ
以上が各種リンクソフトにおけるフレーム補間の無効化方法になります。
身の周りでも案外ご存じないフレンドさんが多く、知らず知らずのうちにFPS半減食らってた、なんてパターンも少なくないんじゃないかなーと勝手に思っています。

PCを組んだ後、GPU/CPUともに余裕があるにも関わらずFPSが出ない現象に遭遇し、色々調べ回った結果が今回の記事です。
グラボの不具合調査のついでで色々調べてたので、もし初期不良引いてなかったら気付いてなかったかもしれません。

VDやPico Connectはまだいくらか親切なんですけど、Quest Linkはもう少しどうにかならなかったんでしょうか....

では今回はこの辺で終わろうと思います。
最後までご覧いただきありがとうございました。

# 参考記事

https://blog.pikegadge.com/pico-connect-beta-review

https://tona.hatenablog.jp/entry/2020/09/21/205704

一部画像をお借りしました、ありがとうございました。