VRChat のワールドの最適化
代表的な方法
オブジェクトの静的(static)化
ゲーム中に絶対に動かないゲームオブジェクトをヒエラルキーから選択し、インスペクターの右上の「Static」にチェックを入れる。
メッシュの圧縮
「Assets」内の3Dモデル(FBX)を選択し、インスペクターの「Model>Meshes>Mesh Compression」を「Off」から変更する。
テクスチャの圧縮
- 「Assets」内のテクスチャを選択し、「Max Size」を「512」辺りに変更する。
ライトベイク(影の計算・描写の軽減)
全てのゲーム中に絶対に動かないゲームオブジェクトを静的(static)化した後に高千穂マサキ様のこちらの記事を参考にして各設定を行い、「Window>Rendering>Lighting Settings」から「Lighting」を開き、「Generate Lighting」を押す。
オクルージョンカリング(視界の外を描写しない)
下の記事を参考にして各値を設定後、「Bake」を押す。
不要なマテリアルの削除
ヒエラルキーから「VRCWorld」を選択し、インスペクターの「VRC Scene Descriptor」コンポーネントの「Dynamic Materials」からゲーム中に絶対に変わる事の無いマテリアルを削除する。
メッシュベイク(複数のメッシュを1つにまとめる)
Mesh Baker 等を購入してメッシュベイクするか、下の記事を参考にして Blender 等でメッシュを結合する。
小技
鏡
- Layer を利用して鏡に映り込むゲームオブジェクトを減らす
- 「VRC_MirrorRiflection」の「MaxAntiAliasing」を1~4程に下げる
- なるべくオブジェクトが映り込まない位置に鏡を置く
- 鏡の初期値をオフにしておきローカルで「ON/OFF」を切り替えられるようにする
- 鏡を Camera と RenderTexture で代替する
ライト
- 変化しない限りはライトを「Realtime」に設定しない
- 動くオブジェクトへのライトの反映には LightProbe を使う
- 解像度(Lightmap resolution)を下げる
- 「Lightmap Size」を調整する
その他
- 「VRC_Trigger」ではなく、Unity の Animator の遷移で状態を作るようにする
- 複雑な3DモデルにはLOD(Level Of Detail)を設定する
- 同じ構成のオブジェクトはプレファブ化する
- メッシュコライダーを使わずに基本図形(BoxCollider 等)の組み合わせで代替する
その他
参考記事
- 【VRChat】自作ワールド作りました! いろいろメモ(作業手順、UdonSharp、軽量化など)
- ワールド最適化
- オクルージョンカリングを設定して、ワールドの軽量化をする
- ライトベイクの基本を学ぼう