clusterのワールドを軽量化しよう
これはCluster Creator Kit Advent Calendar 2020 15日目の記事です
数分遅れで16日に投稿しています
サーセン
あんた誰?
Dolphiiiinです(ほかに書くことはない)
さて今回はワールドの重さの話です
clusterではハイスペックなPCを使用している人もいればスマホの人もいます
そんな中でネックになってしまうのが、ワールドの重さです
実際に自分のワールドでパソコンだと入れるのに重くてスマホで入れないという事故がよくありました
clusterのワールドサイズ
ワールドサイズが大きすぎると、ロード時間が長くなってしまい、ユーザーに対してのストレスになってしまうこともあります。RAMの消費量が増えてしまうため、場合によっては処理落ちしてしまうと言うこともあります
(自分が知っている中で最もサイズが大きかったのは、837MBでした)
とりあえず80MBを目標にして制作するのがおすすめです
今回軽量化するワールド
今回はアセットのFPS Hangarのサンプルシーンをワールドとしてアップロードしたものを軽量化していきます
まずワールドサイズは、79MBとまずまずの容量でしょう
しかしながら、一部の人は読み込みが困難な場合があるかもしれません
まずは開発者モードを有効にしてFPS値を見てみましょう
(単純にPCのスペックが低いというのもありますが...)5.6FPSとただ歩くだけでも操作が困難なほどです
さらにこれがゲームだとすると、圧倒的なクソゲーと化するでしょう...
ワールドのサイズを削減する
テクスチャ
経験上テクスチャがワールドサイズの大部分を占めている場合が多いです
WizTreeというソフトを使用して、プロジェクト内のファイルサイズを調べてみましょう
今回の場合 .tgaつまりテクスチャ用の画像ファイルが大多数のようです
テクスチャを圧縮する
基本的には画像の解像度を下げるソフトを使用するのが効果的なのですが、面倒くさいので他の方法を使います
UnityのProject画面の検索にt:Textureと打つことで、テクスチャのみを絞り込むことができます
圧縮するテクスチャを選択して、インスペクターを開きます
圧縮するには、
- 
MaxSizeの値を落とす - 
Compressionを落とす - 
UseCrunchCompressionで強く圧縮する 
ことでできます
自分はいつもとりあえずサイズ重視で圧縮したいので、UseCrunchCompressionをオンにして0に設定しています
(これがいいのか悪いのかは知らない)
設定したらApplyで適用しておきましょう
一旦これでアップロードしてみます
アップロードしたところ、79MBあったワールドサイズが18MBにまで削減できました
とりあえずワールドサイズはこれで十分でしょう
ワールドの最適化
次はワールドのFPS値の改善を行っていきます
Unityのプレビュー画面から、Statsを見ていきましょう
SetPass Callsを見てみます
現在のところでは635となっています
目標としてはこの値を100まで下げたいところです
ワールドのライティング
このワールドでは数多くのライトが設置されています
ライトを事前に計算しておくベイクをして軽量化をしてみましょう
始めにベイクするライトのModeをBakedに設定します
一つ一つ選択して変更するのもいいですが、今回はLight Explorerを使用します
Unityのメニューから
Window=>Rendering=>LightExplorer
で開きます
変更するライトを一括選択して、Bakedに設定します
次にオブジェクトにStaicを設定します
動かさないオブジェクトのインスペクターを開き
Staicにチェックを入れます
これでベイクを行っていきます
Window=>Rendering=>Lighting Settingから設定画面を出します
詳しい設定項目については割愛します...
今回はこのような設定でベイクします
画面下のGenerate Lightingを押すことで、ベイクが開始します
気長に待ちましょう
このライトベイクが完了した時点で、もう一度プレビューで確認してみます
SetPass Callsが635から172に改善しました
FPS値も向上しています
オクルージョンカリング
Unityの機能として、オクルージョンカリングというものがあります
普段プレイヤーの視線の向きの関係なしにワールド全体が描画されます
オクルージョンカリングを使用することで、プレイヤーの視線に入っているオブジェクトのみを描画することで、負荷を下げることが期待できます
cluster公式がいい感じの記事書いてくれたのでおすすめです
旧解説
オクルージョンカリングのウィンドウを出しましょう
Window=>Rendering=>Occlusionより表示できます
Visualizationの項目からBakeを押してオクルージョンカリングをベイクします
オクルージョンカリングの画面を表示した状態でプレビューをすることで、Sceneの画面で実際の動作を確認できます
オクルージョンカリングをすることによって、SetPass Callsの値がまたさらに低くなり40となりました
これで目標の100*を下回ることができました やったね!
さらに軽量化する
まださらに軽量化したい場合は、MeshBaker、Mesh Simplifyという有料ツールで軽量化したり...
探せばもっと軽量化の手段があるので、探してみるのもいいでしょう
おまけ
今日からUnity Asset Storeでアセットが最大50%OFFになる年末年始セールが開催されています
アセットは持っていて損はないし、ゲームジャムでも結構役立つのでチェックしておきましょう!
Cluster Creator Kit Advent Calendar 2020 12/25の記事はこれで以上です
明日今日はガルペノさんのclusterゲームワールドに求められる3要素です!
Dolphiiiin
Discussion