橋本翼(ツバサムス)

メタバースプログラマー。
UnityとUnreal Engineを専門的に扱う。
メタバース系スタートアップ企業に所属。

詳細はこちら

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

Unity

「VRChat」のワールドの最適化

代表的な方法

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

  • ゲーム中に絶対に動かないゲームオブジェクトを「Hierarchy」ウィンドウから選択し、「Inspector」ウィンドウの右上の「Static」にチェックを入れる

メッシュの圧縮

  • 「Assets」内の3Dモデル.fbx)を選択し、「Inspector」ウィンドウの「ModelMeshesMesh Compression」を「Off」から変更する

テクスチャの圧縮

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

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

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

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

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

不要なマテリアルの削除

  • 「Hierarchy」ウィンドウから「VRCWorld」を選択し、「Inspector」ウィンドウの「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をコピーしました