「全体の容量が大きくなりすぎる」「全体の容量は少ないはずなのに動作が重すぎてフリーズしたり熱暴走する・・」
VRChat等でワールドを作った際、容量を軽量化する方法をまとめます。
ワールドが重たい原因は主に2つあります。
・全体の容量の重さ
・処理の重さ
です。
「全体の容量の重さ」は置く物体(オブジェクト)の多さ、マテリアルの多さ、テクスチャの解像度の高さなどで決まります。
広いワールドでもオブジェクトが少なかったり、マテリアルが少なければ重くはなりません。
狭いワールドでもオブジェクトが多かったり、マテリアルが多いと重くなります。
※ここで示した最軽量化の方法を試すと、容量は減りますが、イベントや集会所向けのサンプルワールドのような「かなり単色で、のっぺりした味気ないワールド」になります。
ワールドの雰囲気や綺麗さをクオリティ調整したいのであれば、数値は各自微調整して下さい。
オブジェクトのテクスチャの画質を下げる
Hierarchyから対象のオブジェクトを選びます。
右のInspectorのMesh Renderer→materials→Elementのマテリアルを選択
下のAssetの項目がマテリアルに切り替わる→そのマテリアルを選択
右のInspectorもマテリアルの内容に切り替わる→MainMapsなどにマテリアルのテクスチャがあるので選択
・Max Sizeを32/64/128/256/512/1024/2048/4096/8192から選択。
数が大きいほど高画質で、数が小さいほど低画質です。
画質を重視したいオブジェクトは数を大きく、単色などで画質を重視しないオブジェクトは数を小さくします
◯高画質
2048~1024
(skyboxで風景の背景テクスチャなど)
◯低画質
32
(単色系)
この値の範囲内で見た目に応じて調節しています。
CompressionをNomal Quality(標準)にして、すぐ右下のApplyをクリックします。
更にLow Qualityだとテクスチャを低品質で圧縮してメモリ利用率を減らすことも出来ます。
Skyboxのマテリアルの画質を下げる
背景のSkyboxを設定している場合、同じ要領でSkyboxのテクスチャを解像度を下げてみましょう。
unityの上のメニューバーのWindow→Rendering→Light setting→Lighting→Sceneのタブ
SkyboxMaterialの項目でマテリアルを選ぶ
下のAssetの項目のマテリアルを選択(テクスチャではない)→
右のInspectorもマテリアルの内容に切り替わる
・Max Sizeを32/64/128/256/512/1024/2048/4096/8192から選択。
背景写真系なら512~1024であればそれなりに耐えられる見栄えになります。
CompressionをNomal Quality(標準)にして、すぐ右下のApplyをクリックします。
Skyboxのライティングを下げる
また同じくunityの上のメニューバーのWindow→Rendering→Light setting→Lighting→Sceneのタブの
Environment Reflectionsなどの項目がある場合、
Resolutionのサイズを32/64/128/256/512/1024/2048から選んで、数字を小さくすると減ります。
さらに下部のAuto GenerateをチェックするとUnityの自動light計算の設定になります。
動かないオブジェクトはStatic(スタティック)、反射の影も消す
ワールド内で動くことがないオブジェクトにはInspectorの右上の「Static」にチェックを入れることで軽量化できます。
またMesh RendererのLightingオブジェクトの影を消し、probes(プローブ:何もない空間のライト)を消すと更に軽くなります。
イベント会場や集会所やサンプルワールドなど景観やリアリティを重視しない場合、オブジェクトの影は必要ないことが多いです。
Mesh RendererのLighting→Cast ShadowsをOFF
→Receive Shadowsのチェックを外す。
ProbesのLight ProbesとReflection ProbesをOFFに。
景観やリアリティを重視する場合は各自調整しましょう。
Occluder Staticのチェックを外す
オブジェクトのStaticの隣の▼をクリックして、Occluder Staticのチェックを外すと軽くなります。
似たものにOccludee Staticがあります。Occluder StaticかOccludee Staticはどちらかがチェックされていればいいです。
Occluderは1m以上の壁のオブジェクト、Occludeeは隠れた描画を消すオブジェクトなどです。
カメラ設定で遠くの描画を消す
Hierarchy→MainCamera→Clipping Planesのfarを200程度に変更。
遠くのオブジェクトが描画されなくなります。
全体ライティング軽量化
イベント会場や集会所やサンプルワールドなど景観を重視しない場合、オブジェクトの影は必要ないことが多いです。
全体の影の描画をなくして軽量化させましょう。
景観をあまり重視しない場合
右のInspectorのDorectional LightなどのライトオブジェクトのInspector→ModeをBaked。
Shadow TypeをNo Shadowに。
Qualityレベルの設定。
unityの上のメニューバーのEdit→Project Settings→Quality→VRchatの場合「VRC High」をチェック。
これらはVRChat上では反映されませんが、unity上での軽量化になります。
すべてのプロジェクトで影を使わない場合、
unityの上のメニューバーのEdit→Project Settings→Quality→Shadows→Disble Shadowsを選択
景観を保ちたい場合
逆に少しでも景観を保ちたい場合、
unityの上のメニューバーのEdit→Project Settings→Quality→Shadows→Distance Shadowmaskを選択
Shadow Distanceを150→15など小さくすると近距離だけRealtime(リアルタイム)な影になります。
テクスチャのLightmap Resolutionも小さくしても粗さが目立ちにくくなります。
Occlusion Culling(オクルージョンカリング)で隠れた場所を描画しない設定
Occlusion Cullingは動かないstaticのオブジェクトに隠れた場所を描画しないことで処理を軽くさせます。
unityのメニューバーのWindow→Rendering→Occlusion Culling→Bakeのタブ→Smallest Occluderのパラメータを1に→右下の「Bake」をクリック
動くオブジェクトの場合
「動くオブジェクト」の場合
オブジェクトのStaticの隣の▼をクリックして、Batching Staticのチェックを外して、
マテリアルのEnable GPU instancingにチェックしましょう。
CPUではなくグラフィックボード(GPU)で処理するので速くなります。
逆に「動かないオブジェクト」はオブジェクトのStaticの隣の▼をクリックして、Batching Staticのチェックをして、マテリアルのEnable GPU instancingにチェックを外しておきましょう。
複数のマテリアルを1つのテクスチャにまとめる
ワールドやアバターの完成図がガッチリ固まったら、Mesh Bakerでメッシュやマテリアルの統合をしましょう。
Mesh Bakerとは容量を少なくしてくれる画期的なソフトです。
まともにワールド制作やアバター改変していると容量が重たくなってしまい、読み込みができなかったり、アップロード時に弾かれたりします。
Mesh Bakerはアバターやワールドをまとめて容量を縮めてくれます。
ワールド制作にもアバターの軽量化にも超便利なので必須のアセットです。
同じシェーダーであればマテリアルは一括化で統合して問題ないです。
そして忘れがちですが、Mesh Bakerでマテリアル、メッシュ、画像を圧縮してできたHierarchyにあるオブジェクトの「CombinedMesh-MeshBaker-mesh」はあくまでそのパーツの部分だけです。
出来上がったCombinedMesh-MeshBaker-meshのオブジェクトを差し替えます。(元のオブジェクトを非表示や削除します)
(参考)Mesh Baker
Mesh Baker:メッシュとマテリアルの統合
http://www.asset-sale.net/entry/Mesh_Baker181121
導入したモデルがそもそもハイポリゴンすぎる場合は、Mesh Optimizerで3Dモデルのポリゴン数を下げます。
(参考)
【Unityアセット】Mesh Optimizerで3Dモデルのポリゴン数を下げてシーンを軽くする
https://styly.cc/ja/tips/assets%CC%B2-unity-3dcg-mesh-polygon/
参考
(参考)ライティング
サイズ容量が大きいアセットを縮小してSTYLYにアップロードする方法
https://styly.cc/ja/tips/filesize-reduction/
(参考)テクスチャ軽減
描画負荷を減らしてワールドの軽量化をする
https://creator.cluster.mu/2020/10/21/world-weight-saving/
(参考)オクルージョンカリング
VRChat ワールド軽量化のための設定+オクルージョンカリングについて
https://note.com/kluele_vrc/n/n9cda525ebcb9