本日は Unity の小ネタ枠です。
MeshBakerを使ってメッシュを結合する手順を記事にします。
MeshBaker
MeshBaker はメッシュとマテリアルを結合して、ドローコールを減らします。
assetstore.unity.com
マテリアルを共有できるようモデルを修正し、テクスチャのアトラスを作成します。
インポートされたモデルのスケーリング、回転、および変換を修正します
・テクスチャ配列を作成します
・任意のマテリアルおよびシェーダーで動作します
・複数のマテリアルを完全にサポートします
・スキンメッシュを組み合わせてカスタマイズします
・UV 、法線、接線が自動的に調整されます
・タイルテクスチャをベイクします
・ライトマッピングを完全にサポートします
・ソースアセットは変更されません
・スクリプトは不要で、5分で簡単に学習できます
・負のスケーリングを処理します
・RunTime API
MeshBaker は有料アセットです。
幾つかの機能が制限された無料版の MeshBaker Free もあります。
assetstore.unity.com
MeshBaker Free では以下の機能が制限されています。
・無料版では Diffuse と Bumped(レガシーシェーダー)のみサポート
・結合されたメッシュをアセットとして保存できません
MeshBakerのインポート
Unity の Assets Store から MeshBaker のページを開き、[Import]をクリックします。
ImportUnityPackage ウィンドウが開くので[Import]ボタンをクリックします。
これで MeshBaker がインポートされました。
正常にインポートが完了すると、メニューに GameObject -> CreateOther -> MeshBaker が追加されます。
MeshBakerでオブジェクトを結合する
結合対象のメッシュオブジェクトを指定する
試しにユニティちゃんモデルを使ってメッシュとテクスチャの結合を試してみます。
メニューから GameObject -> CreateOther -> MeshBaker -> TextureBaker and MeshBaker をクリックします。
Hierarchy に TextureBaker(0) オブジェクトが追加されます。
[Inspector]ビューを開き、[Open Tools For Adding Objects]をクリックします。
[DigitalOpus..]ウィンドウが開くので[Search For Meshes To Add]タブを開きます。
今回、一度そのまま結合処理を行ったところ、テクスチャの形状がおかしくなってしまったので以下のチェックを外しました。
・Exclude meshes with out-of-bounds UVs
本チェックを外すと、0~1の範囲を超えたUVも処理してくれます。
次に結合するメッシュオブジェクトを選択します。
Hierarchy から対象のオブジェクトを選択した状態で、[Add Selected Meshes To Target]ボタンをクリックします。
これで[Objects To Be Combined]の一覧に、結合するメッシュオブジェクトの一覧が追加されます。
テクスチャをベイクする
最初にベイク先となる新規マテリアルを作成します。
TextureBaker(0) オブジェクトの[Inspector]ビューを開き、[Create Empty Assets For Combined material]を実行します。
マテリアルの出力先を指定するダイアログが表示されます。
出力先のディレクトリを指定して[保存]をクリックします。
マテリアルが作成されました。次にテクスチャの結合を行います。
結合前に、[Inspector]ビューから以下のチェックを有効化します。
・Consider Mesh UVs
これは0~1の範囲を超えたUVを調整してベイクするオプションです。
この状態で[Bake Materials into Combined Material]を実行します。
これで結合されたテクスチャが出力されました。
モデルをプレハブに出力する
最後に、メッシュとテクスチャを結合したモデルをプレハブに出力します。本機能は有料版のみの機能となります。
最初に空のプレハブを作成します。
Hierarchy で右クリックから CreateEmpty を実行します。
作成されたゲームオブジェクトを Assets フォルダにドラッグして空のプレハブを作成します。
TextureBaker(0) の子オブジェクトの MeshBaker の[Inspector]ビューを開きます。
[Output]の項目を[Bake Into Prefab]に設定します。
[Combined Mesh Prefab]に先ほど作成した空のプレハブを設定します。
この状態で[Bake]を実行します。
これでモデルがプレハブに出力されました。
まとめられたマテリアルの設定を変更して見た目を調整します。
SetPass Call や Batches の値を確認すると、結合の効果により、描画負荷が大幅に改善されていることが分かります。