Unity Asset Storeからインポートした高精度な3Dモデルを使用して、動作が重たくなってしまったことはありませんか?
これは、メッシュやマテリアルの数が多いためにドローコールの数値が大きくなってしまっているからです。
本記事では、Unityでメッシュやマテリアルを統合してドローコールを削減することのできるアセット「Mesh Baker」の使い方について解説します。
Contents
MeshBakerについて
Mesh Bakerは、アセットストアで購入できる有料のツールです。
執筆時の価格は$71.50でした。ライセンスがシート制のため、使う人数分購入する必要があります。チームに導入する場合は気をつけましょう。
Mesh Bakerを使用すると、テクスチャのアトラス化やメッシュ・マテリアルの統合がUnityだけで簡単に行えます。アセットストアで購入したモデルをシーンに詰め込むと、オブジェクトやマテリアルの数が膨大になってしまいますが、それらを一つのオブジェクトにまとめることができます。
実際にアセットストアからインポートしたアセットを使用したプロジェクトを見てみましょう。
Mesh Bakerを使う前のドローコールの値がこちらです。
Batchesが168、Set Pass Callsが164でした。
そしてMesh Bakerを使った後のドローコールの値がこちらです。
Batchesが14、Set Pass Callsが16で、大幅な削減に成功しています。おおよそ10分の1の描画負荷に抑えることができました。これならステージの描画で動作が重くなることはないでしょう。
このようにMesh Bakerを使用すればドローコールを削減することができます。
Free版について
アセットストアには「Mesh Baker Free」というものもあり、こちらは無料で使用することができます。有料版と無料版の違いは以下の通りです。
有料版 | 無料版 | |
---|---|---|
シェーダーの制限 | なし | DiffuseとBumpのみ |
ベイクしたメッシュのセーブ | 可能 | 不可 |
Prefab化 | 可能 | 不可 |
更新頻度 | 多い | 少ない |
ソースコード | あり | 一部DLLを使用 |
基本的な機能は問題なく使えますので、一度こちらで試してから有料版を購入してもいいでしょう。
MeshBakerの使い方
本記事ではステージのモデルとして以下のアセットを使用します。
①Bakeするオブジェクトを準備
まず初めに統合したいオブジェクトをひとつの場所にまとめます。こちらは統合後に非アクティブまたは削除するので、ライトやパーティクルなどを含めないようにします。
②MeshBakerツールを追加
GameObject > Create Other > Mesh Baker > TextuerBaker and MeshBakerと選択して、Mesh Bakerのツールを呼び出します。
③Bakeするオブジェクトを選択
呼び出したツールはHierarcyに追加されます。TextureBaker (0)はテクスチャのアトラス化とマテリアル統合を行い、子のMeshBakerはメッシュの統合を行います。
TextureBaker (0)を選択しInspectorの「Open Tools For Adding Objects」からウインドウを開きます。
タブを「Search For Meshes To Add」に切り替え、Exclude meshes with out-of-bounds UVsのチェックを外しておきます。
Hierarchyにある、①で作成したオブジェクトのまとまりを選択した状態で、Add Selected Meshes To Targetを押します。
TextureBaker (0)のObject To Be Combinedを開いて(デフォルトでは閉じているので注意)、選択漏れがなければ完了です。ほかに追加するオブジェクトがあれば、Sizeを変更してD&Dで追加しておきます。
④マテリアル統合のためのassetファイルを作成
TextureBaker (0)のInspectorからCreate Empty Assets For Combined Materialを押し、統合後のマテリアルを保存するためのassetファイルを作成します。今回は「MeshBaker」というファイルを作成し、そのなかに「BakedMaterial.asset」と名付けて作成しました。
⑤MeshBakerの設定項目
TextureBaker (0)のInspectorにあるMaterial Bake Optionsでは、テクスチャのアトラス化やマテリアルの統合方法に関する項目を設定します。
今回はConsider Mesh UVsのチェックを入れて、テクスチャのTilingを反映させます。
次に、Inspectorを下にスクロールしてLightmapping UVsの設定項目を、Ignore_UV2からGenerate_new_UV_layoutに変更します。こうすることで後にライトベイクをモデルに反映することができるようになります。
⑥TextureBakerでテクスチャとマテリアルを統合
設定を完了したら、いよいよ統合をはじめます。TextureBaker (0)のInspectorからBake Materials Into Combined Materialを押します。
実行が完了すると、先ほど作成したBakedMaterial.assetと同じ階層に、アトラス化されたテクスチャとマテリアルがつくられています。
⑦MeshBakerでメッシュを統合
最後にメッシュの統合をします。TextureBaker (0)の子要素にあるMeshBakerを選択し、Inspectorで「Bake」を押します。その後しばらく待つと、Hierarcyに新しくCombinedMesh-MeshBaker-meshというオブジェクトとその子要素にMeshBaker-mesh-meshというものがつくられます。これが最終的に統合されたメッシュで、先ほど統合したマテリアルもすでに設定されています。
元のオブジェクトと二重で表示されているので、そちらは非アクティブにします。コライダーが無くなってしまっているので、新しくつくられたMeshBaker-mesh-meshにMesh Colliderを追加しておきます。
実行してみます。Batches, Set Pass Calls共に数値が下がり、非常に軽いステージを作ることができました。
テクスチャ崩れの対処法
Mesh Bakerを使用すると、下の画像のようにテクスチャが正常に適応されないことがあります。これらを解決するための設定を紹介します。
Tilingを設定したマテリアルがある場合
テクスチャをループして表示させるTilingを設定したマテリアルがある場合は、TextureBakerのMaterial Bake OptionsでConsider Mesh UVsの項目にチェックを入れておきましょう。
テクスチャを持たないマテリアルがある場合
マテリアルのベースカラーを変更していたる場合やテクスチャを持たないマテリアルを使用している場合は、TextureBakerのMaterial Bake OptionsでBlend Non-Texture Propertiesにチェックを入れておきましょう。
まとめ
本記事ではマテリアルやメッシュを統合してドローコールを削減できるアセット「Mesh Baker」を紹介しました。
アセットストアで高精度なモデルを購入しても、実際のプロジェクトでは重すぎて使えないとなっては困りものです。そんなときにMesh Bakerを使えば、Unityだけで軽いモデルに変換することができるので非常に便利です。
メッシュだけを統合したり、一部のマテリアルのみ統合対象から除外したりと設定の自由度は高いです。ぜひMesh Bakerを導入して試してみてください。