MeshBakerの使い方

Mesh Baker は Ian Deane 氏が AssetStore にて販売している、テクスチャアトラス・メッシュ結合を行う Unity 拡張です。

ここでは Mesh Baker を用いて描画負荷削減を行う手順について解説します。以下は 2022/5/19 時点、 Unity 2019.4.31f1 での情報です。

URL

機能制限のあるFree版と、制限なし $86.9 の完全版があります。

注意

MeshBakerで出来ること

  • 複数のテクスチャを1枚に結合し、変化したUVを元のメッシュに反映する
  • 複数のメッシュを1つに結合する

MeshBakerでできないこと

Skinned Mesh Renderer を Mesh Renderer に変換できますが、その際ボーンの Transform や BlendShape の設定値は引き継がれません。

BlendShape は再設定すれば良いのですが、ボーンは削除されてしまうのでポーズは固定できないです。
→ Skinned Mesh Renderer のベイクには SkinnedMeshBaker も併用してください

Free版での機能制限

Free版にある機能制限のうち、大きく影響するものは以下の点です。

  • Free版では、テクスチャアトラス化可能なシェーダに制限があり、Diffuse および Bumped Diffuse 以外のマテリアルが含まれている場合は結合してもエラーメッセージが出る。
  • そのため Arktoon や UTS などを使っている場合はFree版の制限に掛かってしまう
    • 回避策1:テクスチャアトラス化は Mesh Baker 以外の手段(例えば Blender のアトラス化プラグイン)などを用いる
    • 回避策2:マテリアルを Diffuse または BumpedDiffuse に変更してアトラス化し、その後シェーダを再設定する
  • Free版では、Bake Into Scene Object しか使えない。つまりシーンファイル以外の個別のファイルとしてメッシュ情報を保存できない。
    • この制限のためVRCにアップロードしたアバターからメッシュが消えてしまったように見えます
    • VRCワールドのアップロードは問題ない様子です
    • Vket2022 Summerの入稿にもFree版は使えるはず

手順の概要

Mesh Baker での結合手順は、大きく2段階に分かれています。

  • A. テクスチャのアトラス化とマテリアルの結合
    • アトラス化(複数のテクスチャを並べて1枚のテクスチャに統合する)
    • アトラス化の結果に従ってマテリアルを出力する
    • 処理は『TextureBaker』が担当する
  • B. メッシュの結合
    • 複数のメッシュを結合して、ひとつのメッシュに出力する
    • アトラス化されている場合はその結果を元に、UVをメッシュに再設定する

手順A→Bを続けて行うことも、手順Bのみ行うこともできます。

手順

A. テクスチャのアトラス化とマテリアルの結合

A-1. GameObject から TextureBaker and MeshBaker を Create する

アトラス化・マテリアル結合を行う TextureBaker と、メッシュの結合を行う MeshBaker のオブジェクトを作成します。

meshbaker

A-2. 結合する MeshRenderer や SkinnedMeshRenderer を D&D する

赤枠内にD&Dしてください。追加されたオブジェクトは Object To Be Compined から確認できます。D&D以外の方法、Open Tools For Adding Objects から追加しても同じです。

meshbaker

A-3. Create Empty Assets For Combined Material する

asset ファイルを保存するダイアログが開きます。ベイク結果を保存する先のファイル名を指定してください。

同じフォルダ内にテクスチャベイクの結果が保存されるので、出力用の一時フォルダを作成すると良いでしょう。

meshbaker

A-4. 結合するマテリアルの指定

結合するマテリアルを指定するために Multiple Combined Materials をチェックして Build Source To Combined Mapping From Objects To Be Combined ボタンを押す。

meshbaker

サブメッシュごとに『結合先マテリアル(Combined Material)』と『結合元マテリアル(Source Materials)』がリストアップされます。『結合元マテリアル』を組み替えることで結合対象を変更できます。同一のシェーダごとに結合すると良いでしょう。

meshbaker

今回は同一シェーダごとに、以下のように結合します。

meshbaker

A-5. テクスチャのアトラス化

Bake Materials Into Combined Material を押すと、アトラス化と結合が行われます。

meshbaker

もし、この段階でコンソールにエラー The free version of Mesh Baker only works with Diffuse and Bumped Diffuse Shaders. が出てしまった場合、Mesh Baker Free を使用して Diffuse/BumpedDiffuse 以外のマテリアルを結合しようとしているようです。

この時点で、テクスチャとマテリアルのコピーが、指定のフォルダに格納されます。

A-6. MeshBaker への設定引き継ぎ

TextureBaker オブジェクトの子供として MeshBaker オブジェクトが存在していると思います。メッシュ結合はその MeshBaker を用いて行いますが、出力設定はTextureBakerオブジェクトに用意されているMeshBakerGrouper で行うようになっています。

下図のように Use Shared Settings に設定されているオブジェクト側で、手順B-4を行うようになっています。Use Shared Settings の設定値をクリアしてしまえば下部の Disable も外れて個別の設定が可能です。

meshbaker

B. メッシュの結合

メッシュの結合のみ行う場合は、手順 B-1 から実施してください。
前段で TextureBaker を使用した場合は、手順 B-3 から実施してください。

B-1. MeshBaker の作成

テクスチャアトラス化せずメッシュの結合のみ行う場合は、GameObject から MeshBaker を Create してください

meshbaker

B-2. 結合する MeshRenderer や SkinnedMeshRenderer を D&D する

赤枠内にD&Dしてください。追加されたオブジェクトは Custom List Of Objects To Be Compined から確認できます。

meshbaker

B-3. 出力方法を指定する

Free版では Output Into Scene Object しか選べません。有料版は Bake Into Prefab にて mesh 情報をファイル保存しておくと扱いやすいのでおすすめです。

meshbaker

Output Into Scene Object の場合 Combined Mesh Object に Hierarcy 上のオブジェクトを指定します。

None 指定の場合、新しくオブジェクトが作成されて Hierarcy に追加されるのでそのままで大丈夫です。

Bake Into Prefab の場合、Combined Mesh Prefab には Project エクスプローラから Prefab ファイルを output に指定してください。同じフォルダにメッシュ情報を格納した asset ファイルも出力されます。

B-4. 出力設定を変更する

meshbaker

Renderer では、出力先を Mesh Renderer と Skinned Mesh Renderer のどちらかから選ぶことができます。Skinned Mesh Renderer に紐付けられているボーンは、結合前メッシュの Armature のままです。

Include Blend Shapes にチェックを入れて Skinned Mesh Renderer にて出力すると、シェイプキーも同時にコピーされます。ただしキー名重複を避けるためにキー名が変更されるため、Animation の再設定が必要です。

Lightmapping UVs はライトベイク対象のメッシュ(Lightmap staticのメッシュ)を結合する場合に設定します。

  • ライトベイクしないメッシュの場合
    • Ignore_UV2 で構いません。結合後メッシュにUV2はコピーされません。
  • ライトベイク対象かつ 結合前メッシュGenerate Lightmap UVs自動生成されたUV2を持っている 場合
    • Generate_new_UV2_layout を選択してください。Mesh Baker が新たに UV2 を自動生成します。
  • ライトベイク対象かつ 結合前メッシュが独自のUV2を持っている場合
    • Copy_UV2_unchanged_to_separate_rects を選択してください。結合前メッシュとほぼ同じ UV2 が結合後メッシュにも設定されます。

B-5. メッシュをBakeする

Bake ボタンを押すとメッシュが結合され、指定の出力先・指定の設定にてメッシュが出力されます。
結合前のテクスチャ・マテリアル・メッシュはそのまま残るため、入稿フォルダ内に含めないようにしてください。設定しなおして再結合する場合、そのまま残っている結合前メッシュ等から再実施できます。

以上です

おつかれさまでした。