VRChatに必要なPC性能
の参考になりそうな情報を集める
2022年10月2日
市販のゲームより全然最適化されていない
CPU
ボトルネックは何か?
Physbones説
現状のVRChatは圧倒的にPB(PhysBones)が足を引っ張ってるので、CPUもシングルスレッド性能が高いものにしないとfpsの向上ではなく低下防止は見込めないです 5900Xでも12900KでもVRCプレイ時は30%未満しか使わないので、その範囲でシングル強いやつを以下略
5900Xは12コア24スレッドだから7コア程度しか使ってないってこと?
@akiken_vrc: 最近VRChatのCPUコア割り振りの設定を見直したら、ほどほどに人がいるワールドでもCPU使用率が10% 程度になってCPUが原因のFPS低下が少なくなった。だから滅茶パワー余ってるんだけど、人が多い空間だとシングルスレッド性能が足りなくなってCPU使用率20%程度なのにFPS低下の原因になることある @akiken_vrc: ちなみに、Corei5 12600k です。最新のIntelCPUはPコアとEコアって2種類のコアがあって、特性が違うので、VRChat起動時に動いてるプロセスをPコアEコアに適切に割り振るとパフォーマンスがよくなるみたい。Win10の場合は手動で設定が必要。 逆の意見もある
@JS_JC_LOVER: VRChat用に第12世代インテルCPUのEコアを止めてPコアをシングルスレッド動作させるアプリあったけど、自分でそういう動作をさせるようにしてみたけどパフォーマンス落ちた Eコアの有無だけでもやってみたけど止めないほうがパフォーマンスよかったし、VRCにおいてはスレッド数あるほうがいいのでは
2022年8月19日
PコアってEコアの上位互換じゃないの?基素.icon
❌EAC OFF→ON : PBで平均5.08%の負荷増加
✅5900X→5900X(CCD制限) : PBで平均24.19%高速化
✅5900X→5800X3D : PBで平均60.93%高速化
✅DynamicBone→PhysBones : 平均76.88%高速化
❌Windows 10→Windows 11 : PBで平均6.38%負荷増加
https://pbs.twimg.com/media/FYpoCvSUIAAAtVU.jpghttps://pbs.twimg.com/media/FYpoH5-UcAEozGe.jpghttps://pbs.twimg.com/media/FYpoIaQVUAAmZWq.jpghttps://pbs.twimg.com/media/FYpoJmYVsAAs8Zx.jpg
軽量ワールド + 大人数の場合CPUボトルネックになる
Animator説
@tonavrc: PhysBones導入後はAnimatorがアバターのシングルスレッド処理の中で最も重いそうです(常識的なマテリアル・メッシュ構成の場合)。大人数インスタンスでプロファイルを見るとAnimator実行に大部分のフレームタイムが割かれているとのこと。 元ネタはVRCのHead of Community tupper氏のAnimator実装についての注意喚起スレッド @dtupper: @Timduru @FrostKittyPaw Easy way to prove this with some reasonable error bars: go to a busy world with 40-50 people. Turn safety to None, observe FPS. Turn to custom, all on save for animations. Observe FPS. My 12900k and 3090 gained ~35 fps
VRC内部のbenchmarkやmetricsによると、不出来なAnimator実装がVRChat最大のパフォーマンスボトルネックらしい
Ryzen固有の問題
Windowsタスクスケジューラーとしては極力CCDを跨がないようにはなっていますが
VRChatの場合はそうではないようです。
実際にRyzen 5900X RTX3090の環境にてVRChatでSilentClubでGPU-Zの使用率を見たところ
GPU使用率は74%程で余裕があり、CPUはまばらに負荷がかかっていました。
タスクマネージャーからVRChatのプロセスの割当を24スレッドから
CCD0である[0-11]スレッドを選択したところ
CCD跨ぎが発生しなくななったのか、FPSが80→90FPS程度に上昇することを確認しました。
またその際、GPU使用率は83%に向上しました
GPU
ベンチマーク
GPU usage
インスタンスでのFPS
グラフィックスのコストが高い部分を見つける
ゲームのグラフィカルな部分は、コンピューターの 2 つのシステム、GPU と CPU に主に影響を与えます。どんな最適化であっても最も重要なことは パフォーマンスの問題がどこにあるか を見つけることです。なぜなら、GPU と CPU では最適化の内容がかなり異なるからです (相反する内容になる場合もあります。例えば、良くあることとして CPU の最適化による GPU の処理の増加、またはその逆など)。
よくあるボトルネックとそれをチェックする方法は以下のとおりです。
ディスプレイ解像度を低くしてゲーム実行します。ディスプレイ解像度を低くすることによってゲームの実行が速くなる場合は、GPU のフィルレートにより制限されている可能性があります。
レンダリング統計 ウィンドウの “Batches” を確認します。
可視のオブジェクトが多いと CPU の処理が堆積する可能性があります。例えば 1000 個の三角形がある場合、CPU にとっては、それぞれの三角形で 1 つのメッシュ (加算すると 1000 メッシュになります) を処理するよりも、すべての三角形が 1 つのメッシュにまとまっているほうがよほど簡単です
この 2 つのシナリオの GPU の負担はほとんど変わりませんが、CPU が (1 つのオブジェクトではなく) 1000 のオブジェクトをレンダリングする負荷は、著しく高くなります。
あまり一般的ではないボトルネックは以下の通りです。
GPU が処理する頂点数が多すぎる場合。どれだけの頂点数であれば “問題ない” かは GPU および頂点シェーダーの複雑さに依存します。一般的に、典型的な指標はモバイルで 10万以下、PC で数百万以下です。ただし、最適化を行ってこの数字をできるだけ低く抑えることが推奨されます。
CPU が処理する頂点数が多すぎる場合。スキンメッシュ、クロスシミュレーション、パーティクル、その他のゲームオブジェクトやメッシュが考えられます。上記に関しては、一般的に、ゲームのクオリティを落とさないでこの数をできるだけ低く抑えることが推奨されます。これを行う方法は、後述の CPU の最適化 を参照してください。
GPU、CPU でレンダリングが問題でない場合は、その他の問題 (例えば、スクリプトや物理演算) の問題が考えられます。Unity プロファイラー を使って調べてください。