この記事では「奇麗なワールドをつくったけど重くて存分に楽しめない!」という方向けにワールドの軽量化方法を、奇麗なワールドを多く制作しているclusterクリエイター・高千穂マサキさんが解説します!実際に公開されているワールドを例に解説しているので、記事とワールドを照らし合わせながら読んでみてください。
はじめに
ワールドのビジュアルと軽量化は二律背反であり難しい作業です。
しかし見た目が良くてもスマホやQuest単体で入れない重さではワールドで遊んでもらえず、かといって見た目を落としすぎてもがっかりされてしまいます。
そこで、この記事では実際に私の作ったワールドPiscina di lusso

でのワールド軽量化の実例を紹介していきます。みなさんの参考になれば幸いです。
動かないオブジェクトはStatic設定
ワールド内で動かす予定がないオブジェクトはStaticの設定をしましょう。
Staticが設定されたオブジェクトのうち同じマテリアルを共有しているものはUnityがまとめて描写することで高速に描写されます(静的バッチ処理)。なので、基本的に動かないものにはすべてStaticの設定をしましょう。
(例外としてInteract item Triggerのコンポーネントがついたオブジェクトなどはチェックしないようにしましょう、どうやら逆に重くなってしまうようです)
設定はとても簡単!オブジェクトを選択して右上のStaticにチェックを入れるだけ。これだけでもワールド負荷は下がります。

ライティングをベイクする
まずリアルタイムライトは重いです。その中でもPoint Lightは特に負荷が高いライトです。ワールドでリアルタイムのPoint Lightを使っているならライトベイクすることで動作が軽量化されます。
さらにclusterにおいてリアルタイムライトは2つまでしか使用できません。2つ以上のライトを置いた場合どこかのライトがついたり消えたりしてちらつきが発生します。ただベイク用ライトならライトを好きなだけ使えます!しかもベイク用ライトなら沢山ライトを使ってもワールドは重くなりません!
実例

Piscina di lussoでは83個のライトを使用しています。そのうちリアルタイムで動作しているのはDirectional Light1つだけです。あとはすべてライトベイクしています。
また、clusterではリアルタイムライトの影が描写されません。オブジェクトの影をつけたいならライトベイクが必要です。ライトベイクでライトの影をつけることでワールドのビジュアルは格段にアップします。

ワールドの見た目と動作の軽量化を両立可能なライトベイクにぜひ挑戦してみてください!ライトベイクの方法はこちらの記事を参考にどうぞ!

ちなみにこれがPiscina di lussoのLighting設定です。これで解像度2048×2048pixのライトマップ1枚に収まるようにしています。ライトマップの枚数を減らすのも軽量化のポイントです!

テクスチャサイズの調整
小さなオブジェクトや近寄ってじっくり見ないようなものはテクスチャサイズを小さくすることでワールド容量を削減します。シーン上で見栄えを確認しつつ最小の解像度に設定することでメモリを節約できます。
テクスチャの解像度はテクスチャを選択してinspectorからテクスチャのMAX Sizeを調整できます。Applyを押せば設定完了です。
Use Crunch Compressionのチェックを入れるとさらにファイルサイズを圧縮できます。ワールド本体の容量を軽くするのに有効です。下にあるゲージでQualityの設定ができますが、下げすぎるとテクスチャ画質は大きく劣化するので注意しましょう。
実例

椅子のテクスチャは元解像度1024pixから128pixまで縮小。その結果、テクスチャ容量700KB→10.7KBになりました。その他のテクスチャも見た目に問題ない最小サイズに設定しています。
マテリアルの節約
ワールド内で使用するマテリアル数を少なくすることで動作は軽くなります。同じマテリアルを共有するオブジェクトが多ければ、最初に説明した静的バッチ処理でひとまとめに描写できるからです。そこで1つのマテリアルをなるべく使いまわしてみましょう。
実例

椅子に使用しているFabric2というマテリアルをビーチパラソルにも適用してマテリアル数を節約しました。


テクスチャのタイリング
床や壁などの広い面積を占める場所では継ぎ目の目立たないシームレステクスチャをタイル状に並べることで解像度の小さなテクスチャでも見栄えが良く、容量も節約できます。マテリアル設定のTillingという項目から設定できます。シームレステクスチャはUnityアセットストアなどで入手できます。
実例

Piscina di lussoでは、ワールド全体の床に解像度512pixのテクスチャを X30枚 × Y20枚 並べる設定をしています。
テクスチャのアトラス化
複数のマテリアルを1つにまとめる(テクスチャを1枚に統合)することでマテリアル数を減らしワールド動作を軽くできます。
この作業はUnity標準の機能だけではできないので以下のアセットなどを使用してテクスチャのアトラス化を行います。今回ツールの使い方は省略しますがワールドのマテリアル数をぐっと抑えられるのでワールドの重さに悩んでいる方はぜひ使ってみてください。
実例


2種類の銃にそれぞれ設定されていたマテリアルを1つに統合しました。
以上、私が行っている見た目にかかわる部分での軽量化を紹介しました。ワールド軽量化についてはこちらの記事も合わせて読むのをおすすめします!