MRが楽しい

MRやVRについて学習したことを書き残す

MeshBakerを使ってメッシュを結合する

本日は Unity の小ネタ枠です。
MeshBakerを使ってメッシュを結合する手順を記事にします。
f:id:bluebirdofoz:20200828222411j:plain

MeshBaker

MeshBaker はメッシュとマテリアルを結合して、ドローコールを減らします。
assetstore.unity.com

マテリアルを共有できるようモデルを修正し、テクスチャのアトラスを作成します。
インポートされたモデルのスケーリング、回転、および変換を修正します

・テクスチャ配列を作成します
・任意のマテリアルおよびシェーダーで動作します
・複数のマテリアルを完全にサポートします
・スキンメッシュを組み合わせてカスタマイズします
・UV 、法線、接線が自動的に調整されます
・タイルテクスチャをベイクします
・ライトマッピングを完全にサポートします
・ソースアセットは変更されません
スクリプトは不要で、5分で簡単に学習できます
・負のスケーリングを処理します
・RunTime API
f:id:bluebirdofoz:20200828222438j:plain

MeshBaker は有料アセットです。
幾つかの機能が制限された無料版の MeshBaker Free もあります。
assetstore.unity.com

MeshBaker Free では以下の機能が制限されています。
・無料版では Diffuse と Bumped(レガシーシェーダー)のみサポート
・結合されたメッシュをアセットとして保存できません

MeshBakerのインポート

Unity の Assets Store から MeshBaker のページを開き、[Import]をクリックします。
f:id:bluebirdofoz:20200828222542j:plain

ImportUnityPackage ウィンドウが開くので[Import]ボタンをクリックします。
f:id:bluebirdofoz:20200828222556j:plain

これで MeshBaker がインポートされました。
正常にインポートが完了すると、メニューに GameObject -> CreateOther -> MeshBaker が追加されます。
f:id:bluebirdofoz:20200828222608j:plain

MeshBakerでオブジェクトを結合する

結合対象のメッシュオブジェクトを指定する

試しにユニティちゃんモデルを使ってメッシュとテクスチャの結合を試してみます。
メニューから GameObject -> CreateOther -> MeshBaker -> TextureBaker and MeshBaker をクリックします。
f:id:bluebirdofoz:20200828222620j:plain

Hierarchy に TextureBaker(0) オブジェクトが追加されます。
[Inspector]ビューを開き、[Open Tools For Adding Objects]をクリックします。
f:id:bluebirdofoz:20200828222629j:plain

[DigitalOpus..]ウィンドウが開くので[Search For Meshes To Add]タブを開きます。
今回、一度そのまま結合処理を行ったところ、テクスチャの形状がおかしくなってしまったので以下のチェックを外しました。
・Exclude meshes with out-of-bounds UVs
本チェックを外すと、0~1の範囲を超えたUVも処理してくれます。
f:id:bluebirdofoz:20200828222640j:plain

次に結合するメッシュオブジェクトを選択します。
Hierarchy から対象のオブジェクトを選択した状態で、[Add Selected Meshes To Target]ボタンをクリックします。
f:id:bluebirdofoz:20200828222650j:plain

これで[Objects To Be Combined]の一覧に、結合するメッシュオブジェクトの一覧が追加されます。
f:id:bluebirdofoz:20200828222702j:plain

テクスチャをベイクする

最初にベイク先となる新規マテリアルを作成します。
TextureBaker(0) オブジェクトの[Inspector]ビューを開き、[Create Empty Assets For Combined material]を実行します。
f:id:bluebirdofoz:20200828222717j:plain

マテリアルの出力先を指定するダイアログが表示されます。
出力先のディレクトリを指定して[保存]をクリックします。
f:id:bluebirdofoz:20200828222728j:plain

マテリアルが作成されました。次にテクスチャの結合を行います。
結合前に、[Inspector]ビューから以下のチェックを有効化します。
・Consider Mesh UVs
これは0~1の範囲を超えたUVを調整してベイクするオプションです。
この状態で[Bake Materials into Combined Material]を実行します。
f:id:bluebirdofoz:20200828222738j:plain

これで結合されたテクスチャが出力されました。
f:id:bluebirdofoz:20200828222751j:plain

モデルをプレハブに出力する

最後に、メッシュとテクスチャを結合したモデルをプレハブに出力します。本機能は有料版のみの機能となります。
最初に空のプレハブを作成します。
Hierarchy で右クリックから CreateEmpty を実行します。
f:id:bluebirdofoz:20200828222802j:plain

作成されたゲームオブジェクトを Assets フォルダにドラッグして空のプレハブを作成します。
f:id:bluebirdofoz:20200828222813j:plain

TextureBaker(0) の子オブジェクトの MeshBaker の[Inspector]ビューを開きます。
[Output]の項目を[Bake Into Prefab]に設定します。
f:id:bluebirdofoz:20200828222822j:plain

[Combined Mesh Prefab]に先ほど作成した空のプレハブを設定します。
この状態で[Bake]を実行します。
f:id:bluebirdofoz:20200828222831j:plain

これでモデルがプレハブに出力されました。
f:id:bluebirdofoz:20200828222840j:plain

まとめられたマテリアルの設定を変更して見た目を調整します。
SetPass Call や Batches の値を確認すると、結合の効果により、描画負荷が大幅に改善されていることが分かります。
f:id:bluebirdofoz:20200828222850j:plain