バーチャル3Dクリエイター神部まゆみです(*^_^*)
この記事はVRChatワールドを軽くする方法を模索してみたメモです。
動作確認した最新のバージョンはUnity2022.3.22、VRChat SDK 3.8.2です。
やりたいこと:自作VRChatワールドが重いから軽くしたい
読み込み容量が100MB以上ありますΣ(゚Д゚)

プロジェクトフォルダの容量も10GBも…これはまぁ普通か?

このワールドもう3年くらいやっているからな…。まさかキャッシュが残っているとか?
ちなみにこのままQuest版でアップするとカクカクしてしまうため、オブジェクトを減らしてアップしてます。
特にQuest向けワールドは100MB以下にしないといけないので重要
Quest向けだと100MB以下にしないといけないので軽くすることはより重要です。
VRChat Questのビルド時圧縮後、サイズが100MBを超えるワールドのアップロードやアクセスはできません。
PC向けだと200MB以下にしてねみたいな感じ?
World Creation, Optimization, and Community Labs Tips | VRChat Creation
ワールドのファイルサイズが非常に大きい場合は、その間にワールドのサイズを縮小して公開から削除するようにお願いする場合があります。ワールドを200MB未満に保つようにしてください。
まぁあまり重すぎるとVRChatのサーバー容量も圧迫してしまうため、ある程度気を遣った方が良いのかな。
PCスペック低いと快適に開けないワールドとなると、来れる人も限定されてしまうし。
やったこと
色々やってみたので一つずつ書いておきます。
△ オブジェクト自体を全部インスペクターオフで非表示にしてみる
VRC Scene Descripterがあるオブジェクト以外を全部非表示にしてみた。
これやったら動作はめっちゃ軽くなったけど、読み込みの容量は減らなかったな…。


◎ 非表示ではなくシーン内から削除する
これやったら読み込み容量が一気に減りましたΣ(゚Д゚)


インスペクターオフにしていてもスクリプトで表示に切り替えられるわけだから、いつでも表示できるよう読み込みはされてるんだろうな…。
これVRChatに限らず、ゲーム制作の時もシーン内で使わないオブジェクトがあったら削除したほうが良いですね。
非表示でもビルドデータに含まれてしまい、容量が肥大化してしまうと思う。
〇 パーティクルを減らす
これ湯気を出すために設定してたら明らかに重くなり、questでやった時にカクカクで酷い目にあった経験がある。
↓のやつね。
多用すると良くないかもしれない。
しかし動作が重くなるだけで容量的にはそこまででもないかな…?
◎ スカイボックスを軽いやつに変える
スカイボックスを変えるのは ウィンドウ → レンダリング → ライティング → 環境 → スカイボックスマテリアルのところね。




これデフォルトのスカイボックスにしたら15MBくらい容量が減ったΣ(゚Д゚)
これは大きいからできるだけ軽いヤツにしたほうが良いな…。
◎ ライトを減らしてライティングを生成し直す
デフォルトで暗くしてポイントライトでクールな感じにしていたのだが、多用しすぎて重くなっていた気がする。
ディレクショナルライトだけにしたら15MBくらい容量が減りましたΣ(゚Д゚)
これについてはインスペクター非表示にして生成しなおすだけで減ったので、ライトマップ?が重かったのかもしれない。
ライティングを生成はここね。


左の「自動生成」にチェックを入れるとリアルタイムでライティング生成してくれるけど、動作が重くなるのであんまりやらないほうがいいかも。
ライトはすぐ調整しやすいため、Quest向けワールドの時はディレクショナルライトだけにするとラクかな?
PC向けのワールドをAndroidに切り替えても、100MB超えてるとQuest向けワールドとしてアップロードできないんだけど、ライトならすぐ容量を調整しやすい。
ポイントライトなどはインスペクターオフにしてディレクショナルライトだけにし、光量を調整してライトベイクすればそれだけで容量が減らせる。
追加でスカイボックスもデフォルトのやつにすれば、私の場合は30MBくらいはすぐ減らせた。まぁライトが多すぎたというのもあるけど(;^_^A
PC向けのワールドに切り替えても、これならすぐ戻せるのでラクです。
△ アセットフォルダ内の使わないファイルを消す
これは変わらなかったけど、プロジェクト全体の容量は減るからやったほうが良いと思う。
特に詰め合わせ系のアセットで全く使ってない、使う予定もないオブジェクトは消したほうが良いかも。
△ Libraryフォルダを消す
これプロジェクトフォルダ肥大化の原因として大きいから、削除すると大幅にフォルダ容量は減ります。
だけど何かあったら自己責任なので、プロジェクトをバックアップしといたほうが良いです。
これやるの危険という説も見たし自己責任ですが、私は今のところこれで不具合が出たことはありませんね…。
一応カラのLibraryフォルダだけ残して、中身をCtrl+Aで全選択して削除しました。


ワールドの容量や動作を軽くする効果はなかったけど、プロジェクト全体の容量は5GBくらい減りましたΣ(゚Д゚)


しかし削除後のUnityエディター起動で、必要なLibraryフォルダが自動で再生成されるので、起動に時間はかかります。
〇 ローポリにする
ハイポリだと1つのオブジェクトで数MBとかは普通に行くので、できるだけローポリにしたほうが良さげ。
blenderでデシメートするのが手軽かな。
あとはオブジェクトを結合して一つに、テクスチャベイクして一枚にしても軽くなると思うけど、めんどくさいのでどこまでやるかって話になると思う(^_^;)
〇 テクスチャの解像度を下げて軽くする
これも明らかに容量が減るわけだから効果あると思う。
これiLoveIMGとかで圧縮しても効果あるかな?画質は悪くなると思うけども。
〇 ハイトマップなどは消す
これ設定してたら見た目はリアルで良い感じになったけど、Questだと画面内に移った時に重くなったから無いほうが良いかな…。
スタンダードシェーダーだとアルベドのところにテクスチャ一つだけ設定したほうが軽いと思う。


使ってもせいぜいノーマルマップだけにしたほうが良いかな…まぁどこまでやるかだけど。
△ 余計なギミックを消す
動作は多少軽くなると思うけど、Udonのファイルなんて軽いからな…。
大量のUdonファイルがあるなら減らしたほうが良いだろうけど、せいぜい数個~10個程度ならあまり変わらないと思う。
とりあえず58MBまで減った
そこまで削除しまくったわけではないけど割とすぐここまでは減らせた。


貢献度が高いのは
- スカイボックスをデフォルトに
- ライトを減らしてライティング再生成
- 使わないオブジェクトはシーンから削除
かな?
Questワールドはディレクショナルライトのみ、スカイボックスデフォルトに…だけでもだいぶ減らせる
しかしあまり軽くしすぎてもつまらないワールドになってしまうため、PC向けワールドは好き勝手に作って、Quest向けワールドだけ100MB以下になるよう調整すればいいか?
Quest向けワールドはディレクショナルライトだけにしてライトベイク、スカイボックスはデフォルトに…ってするだけでもだいぶ減らせたので、とりあえずシンプルにこれをやるだけでも違うと思う。
スカイボックスはアセットストアで買ったやつしか使ったことがないけど、だいたいデフォルトのやつより重い…。けど探せば軽いのもあるかもしれない。
PC向けのワールドはもともとゲーミングPCでアクセスする人が多いため、ある程度低スペックの人たちは切り捨ててしまっても良いかな…?
まぁ今は内蔵グラフィックやAPUもかなり進化しているから、VRじゃなければそこそこ動いてしまうようだけど。
或いは中スペック向け、高スペック向けとワールドを分けたり、パーティクルなどをオンオフするコントローラーのギミックを置いておく…とかはよく見ますね。
おわりに
とりあえずこれらをやれば軽くなることが分かったので、あとは容量と相談しつつやるしかないかな。
まぁワールド作成なんて自己満足に近いから、自分とフレンドだけ楽しめればそれでいいと割り切れば別に重くても構わないかもしれませんが(;^_^A
Quest向けは100MB以下で制限が厳しいけど、PC向けならある程度好き勝手に作っても良いとは思う。
また何かあれば追記します(*^_^*)