VRChatのワールド内で負荷を計測する方法について【fpsVR】
はじめに
今回は私がVRChatのワールドで、負荷を調べる時に利用している『fpsVR』というSteamアプリについて紹介します。
Unity上でもProfilerを利用することで負荷の計測は可能ですが、大まかな負荷しか分かりません。ですがfpsVRを使えば、VRChat中に色々な負荷の情報を見ることが出来ます。
UdonやuGUI製の等のギミックを導入するときには、個人的に必須級かなと思っているので、良かったら導入してみてください。
fpsVRとは
SteamVR用のオーバーレイで、ゲーム中に色々なパフォーマンス情報を見ることが出来ます。有料ですが、安いです。
現在のフレームレート(fps)やCPU・GPU・VRAM(GPU MEM)の使用率などが見れる時点で既に便利なのですが、コントローラーやトラッカー類の残りの電池残量が見れるのも凄く便利です。
(何か他にもIPDの調整やらスクショ解像度の調整とか、色々機能が盛りだくさんなのですが、私が使っているのはそこら辺です)
SteamVRのアドオンとして使えるので、VRChatを起動したときに自動的に起動してくれるので、一度設定すればあとは楽ちんです。
確かインストール時に自動で設定されたような気がしますが、上手くいかなかったらこの記事を参考にすれば良さそうです。
ゲーム内で左手(おそらく初期設定)をくるっと回せば、手の下にウィンドウが表示されます(各種設定はSteamVRのダッシュボードにFPSVRのアイコンが追加されるので、そこから変更できます)
あとはワールドの負荷計測とは関係ないですが、自分のPCの性能が良くないと感じているときに、どのパーツが足を引っ張っているのかを切り分けることが出来ます。
初心者向けのざっくりとした前提知識
この記事を読んでる人の中には、CPUやGPUがパソコンのパーツであることは知っていても、VRChatとどのように関係があるのか分からない人も居ると思います。そのような人向けに補足を書いておきます。
分かりやすさ優先で簡単に言うと、VRChatの映像はCPUとGPUが二人三脚で頑張って作っています。
(正確には他にも要素はありますが、ワールドで特に気にするべきはこの二つです)
どちらかに一方的に負荷がかかると、片方に余裕があっても、二人三脚なので足並みを揃えるために遅くなります。結果としてVRChatの映像を作る速度が遅くなり、カクカクとした映像になってしまいます。
そのためCPUとGPUにかかる負荷は同じくらいになるように軽減しないと、VRChatが重い現象は直りません。
このCPU・GPU負荷をVRChat内で計測するのに便利なのが、今回紹介するfpsVRです。
CPUまたはGPUの負荷が高いとき、Unity上で何を疑えばいいか分からないと思うので、ざっくりと書くと以下の通りです。
▼CPU負荷
Udonのギミック
uGUI製のメニュー
メッシュ・マテリアル数(正確にはbatch・Setpasscall数)
リアルタイムライトと影の有無(batch・Setpasscall数に影響)
(使い方が悪くなければ負荷が少ないものとしてLOD・オクルージョンカリング・LightProbeなどもあります)
▼GPU負荷
シェーダー
ポリゴン数
リアルタイムライトと影の有無(描画負荷)
ポストプロセス
注意してほしいのは、どれも中身によるので『Udonだから重い!』とか『uGUIだから重い!』のように、固定観念に捉われないでください。当たり前ですが作り方や配置・使用数等に応じて負荷は増減します。
あと他のプレイヤーがいる時はワールドの負荷に上乗せする形でCPUとGPUへの負荷は増えます。体感的にはプレイヤーがいるといないとでCPU負荷が全然違うので、集会向けワールドとかでしたらCPU負荷の低減をメインにするといいと思います。
(fpsVRで他のプレイヤーがいる時といない時で計測してみると分かりやすいです)
fpsVRによる計測をオススメする理由
①VRChatのメニューを開かずにfpsを計測できる
ワールドの負荷を計測する際に、VRChatのメニューを開いてFPSを見ている人が居ると思いますが、これは非常にお勧めできません。
fpsVRで計測していると、その理由がくっきりと分かるはずです。実際に見てみましょう。
まずはVRChatのメニューを開く前の使用率です。
次にメニューを開いた後の使用率です。
CPU使用率が跳ね上がって、fpsが90を割っています。
御覧の通り、VRChatのメニュー(おそらくuGUI製だと思われますが)はCPU負荷が高いので、メニューのfpsはあてになりません。
(ただ、ワールドの何かに依存しているらしく、メニュー開いてもCPU負荷が1msec程度しか増えないワールドもあります……謎です……)
fpsVRであれば、VRChatのメニューを開かなくても計測できるので、影響を避けながらfpsを計測することが出来ます。
②CPUとGPUどちらが厳しいのかを切り分けできる
これについてはUnityのProfilerでもある程度は計測可能なのですが、ここで分かる負荷というのはあくまで目安で、大雑把なものです。
何故ならCPU負荷についてはClientSim分の負荷を切り分けないといけないし、GPU負荷についてはモニター上に描画される時の負荷と、HMDの左右のレンズ上で描画される時の負荷は当然異なるからです。
自分の経験則でいうと、Profilerで計測してて、Unity上では問題なかったのに、VRChat上でfpsVRを使って計測してみたら、やたらとCPU負荷が高い&FPSが低いケースとかもありました(未だに謎のまま……)
それを実際の環境で、手軽に左手(あるいは右手)をくるっとひっくり返すだけで確認できるのはとても便利です。
③VRAMの使用率を計測できる
VRChat向けのGPUを選ぶときによく話題に出てくるVRAMですが、この使用率を見ることが出来ます(fpsVRではGPU MEMと表示されています)
これについては、UnityのProfilerのメモリーの項目で切り詰めていっても問題ないと思いますが、実地で確認できるというのはそれだけでメリットです。
まとめ
fpsVRを利用すると、効率よく負荷計測を行うことが出来るので、是非導入してみてください。
「Profilerについて」や「負荷軽減のやり方」については別途記事を書くつもりでいるので、気長にお待ちください。
この記事がワールドの軽量化のお役に立てれば幸いです。
今回はあっさり目ですが、これで終わりです。読了お疲れ様でした。
余談 :
fpsVRのスクリーンショットを取ろうとしたところ、VRChat画面はともかく、SteamVRのスクリーンショットにも映らなくて苦労しました。
fpsVRの詳細メニュー内で直接スクリーンショットを取れるところがあり、やった!と思ったら、200×93ピクセルという超小さいスクショでぬか喜びさせられたり……。
最終的にSteamVR起動したときに画面上に出てくる小さいウィンドウから、[VRビューを表示]で出したら映っていたのでそれをスクショしました。
fpsVRのスクショを他の人と共有したい時とか、記事作る時とかに参考にしてみてください。