【Unity/VRChat】自作ワールドの負荷の軽減方法

Unity

VRChat のワールドの最適化

代表的な方法

オブジェクトの静的(static)化

ゲーム中に絶対に動かないゲームオブジェクトをヒエラルキーから選択し、インスペクターの右上の「Static」にチェックを入れる。

メッシュの圧縮

Assets」内の3Dモデル(FBX)を選択し、インスペクターの「ModelMeshesMesh Compression」を「Off」から変更する。

テクスチャの圧縮

  • Assets」内のテクスチャを選択し、「Max Size」を「512」辺りに変更する。

ライトベイク(影の計算・描写の軽減)

全てのゲーム中に絶対に動かないゲームオブジェクト静的(static)化した後に高千穂マサキ様のこちらの記事を参考にして各設定を行い、「WindowRenderingLighting Settings」から「Lighting」を開き、「Generate Lighting」を押す。

オクルージョンカリング(視界の外を描写しない)

下の記事を参考にして各値を設定後、「Bake」を押す。

不要なマテリアルの削除

ヒエラルキーから「VRCWorld」を選択し、インスペクターの「VRC Scene Descriptor」コンポーネントの「Dynamic Materials」からゲーム中に絶対に変わる事の無いマテリアルを削除する。

メッシュベイク(複数のメッシュを1つにまとめる)

Mesh Baker 等を購入してメッシュベイクするか、下の記事を参考にして Blender 等でメッシュを結合する。

引用:https://assetstore.unity.com/packages/tools/modeling/mesh-baker-5017

小技

  • 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 等)の組み合わせで代替する

その他

参考記事

クレジット

お問い合わせ

    タイトルとURLをコピーしました