こんにちは!ワールド制作アシスタントのミオです。今回は制作したワールドを軽量化して、更に快適に遊んでもらうための方法について紹介します。
軽量化にもいくつかあり、スクリプトでの処理を最適化・物理演算の行うもの量の削減・アニメーションの削減・描画処理の軽量化などがありますが、今回はこの中でも、描画処理の軽量化にフォーカスした内容です!
描画処理の負荷を確認する
まず初めに、自身のワールドが重いかどうかを確認する必要があります。
Unityには「Set Pass Call」というものがあり、これはCPUからGPUへの描画の設定を送る回数を表しています。この回数が多いほど、描画処理が重くなっていくわけです。
つまり、「Set Pass Call」の値を知ることができれば、自身のワールドの描画負荷が分かり、この値を抑えるほど描画負荷は小さくなり、快適なワールドになります。
「Set Pass Call」の値は、「Gameビュー」>「Stats」>「SetPass Calls」から確認できます。

上の画像のワールドでは、現在の値は「58」です。このくらいなら問題なく動作する快適なワールドになります。
もしご自身のワールドで「Set Pass Call」の値が「100」を超えるような場合は、ぜひこれから説明する軽量化方法を試してみて下さいね。
軽量化する
ライトをベイクする
まずは、ライトをベイクすることで軽量化を目指していきます。
ベイクとは「焼く」という意味で、あらかじめUnity上で光の当たり方を計算して、実際に光が当たっているかのようにテクスチャに描きこむ処理を行うことで、リアルタイムでの計算処理を抑える方法です。
ライトオブジェクトのInspectorから、「Light」コンポーネント > 「Mode」>「Baked」でライトのベイク設定は完了です。

また、ベイクを適用できるのはStaticなオブジェクトです。
Staticなオブジェクトとは、ワールド内で動くことがないオブジェクトのことです。その様なオブジェクトには「Static」にチェックを入れることで、Unityに動かないオブジェクトだと知らせることができます。
これにより、「Static」にチェックが付いて同じマテリアルを使用しているオブジェクトは一度の描画命令で描画することができるので、処理の負荷を抑えることができます。(staticバッチング)

また、ライトをベイクする時、自動で反映するかどうかの設定も可能です。
「Window」>「Rendering」>「Lighting Settings」より「Lighting」ウィンドウを表示します。

「Lighting」ウィンドウの下部にある「Auto Generate」にチェックを入れることで、Unityが自動でライトの計算を行ってくれます。
ただし、オブジェクトを動かしたり配置したりするだけでも自動でライティングの更新が入るので、鬱陶しく感じる方はチェックを外して、ライトマップをベイクする時に「Generate Lighting」を押す、とした方が良いと思います。

「Real time」のライトに近しい結果が欲しい場合はもあると思います。
その様な場合は「ライトプローブ」というものがありますが、今回は説明については省かせていただきます。
詳しくは公式マニュアルよりご確認ください。

複数のマテリアルを1つのテクスチャにまとめる
「Set Pass Call」はCPUからGPUへの描画の設定を送る回数というのをはじめに記述しました。これにはマテリアルの数が関係しています。マテリアル数が多いほど、「Set Pass Call」の値も大きくなります。なので、マテリアル数を抑えることで「Set Pass Call」の値も少なくすることができます。
以下の画像では2つのCubeに対して



と、2つのマテリアルを用いています。これを1つにまとめることができれば良いということです。
マテリアルを1つにまとめるには、


上の画像のように1枚のテクスチャにまとめて、それをマテリアルにアタッチする必要があります。
こちらはUnity既存のものでは行うことができないため、Assetや拡張ツールや3Dモデリングソフトなので行う必要がありますが、使い方に関しましては省かせていただきます。

スプライトを1つのテクスチャにまとめる
使用するスプライトを1つのテクスチャにまとめる(テクスチャアトラス)ことで「Set Pass Call」の値を抑えることが可能です。
こちらは上記のマテリアルと同じ理由になります。
作成方法については省かせていただきます。詳しくは公式マニュアルよりご確認ください。
まとめ
これらの方法を使うことで「Set Pass Call」の値を下げ、処理負荷を抑えることが可能です。
試しに以下のSceneに対して、動かないオブジェクトは「static」に、ライトはベイクしてみます。



「Set Pass Call」の値を「29」まで減らすことができました!
以上で軽量化の説明は終わりになります。
面白いギミックを作ったけど重くて楽しめないなどの問題が少しでも解決することを願っています。