VRChat 水面で使うShaderの負荷を比較してみた
こんにちは!Klueleです。
ワールド作成をしていると水面の負荷が高いとよく言われることがあります。負荷と見た目の比較は、Shaderが有償なことも多いため簡単ではないと思います。この記事では、私が持っているShaderがどの程度の負荷なのか比較していきます。
比較方法は、Steamのパフォーマンスグラフで表示されるGPUの1フレームあたりの計算時間です。比較用に作ったシンプルなワールドをVRChatにアップロードして、各Shaderに入っている代表的なMaterialをPlane1枚に入れて確認を行いました。(Scaleに合わせてTilingを調節したものがあります)
水面を表示しない場合でGPU計算時間は4.0msありましたので、4.0msから増えた分が水面を表示することによる負荷上昇分になると思います。
私のプレイ環境は最後に書いておくので参考にしてください。
RealisticWater (Material:Lake)
GPU計算時間:4.9-5.1ms
RealisticWater (Material:Pool)
GPU計算時間:5.1-5.2ms
RealisticWater (Material:Sea)
GPU計算時間:4.8-5.1ms
R.A.M. 2019 (Material:R2_Lake_Tesseled_Reflective)
GPU計算時間:6.7-6.8ms
R.A.M. 2019 (Material:R2_Lake_Tesseled_Swamp_Leaves)
GPU計算時間:6.2-6.5ms
R.A.M. 2019 (Material:R2_River_Tesseled_Reflective)
GPU計算時間:7.1-7.3ms
R.A.M. 2019 (Material:R2_River_Swamp_Leaves)
GPU計算時間:5.8-5.9ms
CalmWater (Material:MAT_Water)
GPU計算時間:5.9-6.1ms
VRWaterShader (Material:Water-MiddlePool)
GPU計算時間:6.2-6.4ms
Stylized Water (Material:foliage)
GPU計算時間:4.8-5.0ms
視差があるためVRChatには適していないと思います。
AQUAS (Material:2SidedTripleTexured)
GPU計算時間:5.1-5.2ms
Lux Water (Material:water cristal clear gerstner)
GPU計算時間:5.2-5.3ms
Lux Water (Material:water ocean far)
GPU計算時間:5.0-5.3ms
RAKURAIOceanShader (Material:StandardOcean)
GPU計算時間:5.8-6.1ms
環境
CPU: intel i9-7960X OC3.2GHz
Memory: DDR4 16GB 3600MHz
GPU: GTX1080Ti 1480MHz
VIVE Cosmos Elite 解像度100%
VRChatウィンドウサイズ:1920x1200
水面の広さ:100mx100m (PlaneのScale=10)
ワールド全体にReflection Probe配置
中央のステージ部分に2m格子状にLight Probe配置
OBSで録画しつつ測定しました。
感想とか
Plane 1枚だけでの比較でしたが、思ったより負荷は低い気がしました。この比較で計算時間が7msを超えるMaterialの場合は、1枚あるだけでFPSが90を下回る場合があり使用には注意が必要です。一方で、6ms以下のMaterialの場合は、1枚あるだけではそこまで大きな負荷とは言えないと思います。
この記事には載せていませんが、大量にmeshが存在するような場合でも、水面があるだけで負荷が2倍になったりすることはなく、単純に水面の負荷が追加される状況でした。Reflection Probeがリアルタイムだとまた違うのかもしれませんが、Reflection Probeをリアルタイムで使うワールドはかなり限られているので試していません。
負荷が大きく水面を分割する場合でも、細かく分けるというよりは100m単位で大きく分けるのがいいのかなと思いました。この記事では、水面で使うShaderの負荷をなんとなく比較してみました。参考になれば幸いです。
それでは、楽しいVRChatライフを!
この記事が気に入ったらサポートをしてみませんか?