Unity で Mesh を結合すると言えば？の MeshBaker を使ってみた

Unity Asset で Mesh を結合すると言えばこの Asset というところではないでしょうか？ということで、Mesh Baker（有償版） を使ってみました。

# TL;DR
さすが有名な Asset ということもあり、Batches と SetPass Call の削減ができる Asset でした。オプションも、Bake 方法も複数あり、自動でやれることも、手動できめ細やかにやれることもある Asset だなと思いました。

今回は手動で Bake する対象を増やす方法として、[さらに一歩踏み込んで使ってみる]( https://qiita.com/matchyy/items/bc02673e829ad6a5030c#%E3%81%95%E3%82%89%E3%81%AB%E4%B8%80%E6%AD%A9%E8%B8%8F%E3%81%BF%E8%BE%BC%E3%82%93%E3%81%A7%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B) 紹介しています。

# MeshBaker とはどういう Asset？
> このアセットはUnity上でマウスをポチポチッとするだけで複数のメッシュを統合し1つに、更にテクスチャもアトラス化して1枚に、そしてマテリアルも1つにしてくれちゃうスグレモノです。
![2019-11-10_11h51_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/1f392504-01e4-03cf-f5ca-cae1be119985.png)

こちらの [サイト](https://bironist.hatenablog.com/entry/2019/03/17/193649) がわかりやすいです。


# 使い方
## 慣れれば簡単です
いろいろなサイトで紹介されているので、ここでは割愛させてもらいます。

* 簡単に試すなら → [こちら](https://bironist.hatenablog.com/entry/2019/03/17/193649) （先ほどと同じ）
* Batches、SetPass calls も意識しながらやるなら → [こちら](http://www.asset-sale.net/entry/Mesh_Baker181121) 


# 実際に使ってみた
## Bake したものを比較してみる
左（1枚目）がBakeする前のもので、右（2枚目）がBakeしたものです。
![2019-11-10_12h11_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/ac629215-58ca-daaa-45c2-de93a14433be.png)
![2019-11-10_12h12_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/a23e8d24-667b-f25d-66db-38006c0d2166.png)

Batches と SetPass calls は以下の通りになりました。Batches、SetPass calls 共に削減されていることがわかります。削減率もなかなかいい割合だと思います。

項目          | 結合前  | 結合後  | 削減率 
--------------|--------|--------|--------
Batches       |    161 |     59 |  36.6%
SetPass calls |     58 |     33 |  56.9% 

※ Bake は柱と銅鑼を別々に実施しています。詳細は後述です。

## 近くで見てみる
左が削減前、右が削減後です。右側の銅鑼がの色がもっさりしているのがわかります。削減率が高かったとしても、これでは？となってしまいますよね。
![2019-11-10_12h14_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/600c2b50-a755-efc9-9a85-74a3ab8ce4ad.png)


## もっさりを改善する
MeshBaker は大きく 4 つのやり方があります。
1. MeshBaker
2. TextureBaker
3. TextureBaker and MeshBaker
4. TextureBaker and MultiMeshBeshBaker
![2019-11-06_09h33_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/f22cf477-6faa-079f-c804-a49203fe6b32.png)


上記もっさりはしたものは4でやっていたので Texture も bake しています。そこで銅鑼は 2 を使って、Mesh だけ bake してみました。どうでしょうか？Meshのみ結合した（一番右）近くでの見た目も、結合前（一番左）と比較して遜色ないことがわかりますよね。
![2019-11-10_12h24_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/3d4985dc-0866-2b86-5c30-3a3d5aa5e364.png)

Batches、SetPass calls は以下の通りです。少し削減率が落ちていることがわかりますね。

項目          | 結合前 　| もっさり | Meshのみ | 削減率 
--------------|--------|----------|----------|--------
Batches       |    161 |       59 |       82 |  53.0% 
SetPass calls |     58 |       33 |       36 |  69.6% 

![2019-11-10_12h23_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/abfdb788-d075-e972-5dce-95db0356c03d.png)


## さらに一歩踏み込んで使ってみる
この鳥居は6か所にMeshがありますが、Torii(7)を選択して Mesh を Bake しても全ては結合されません。
柱（Gate）と銅鑼（Gong）と吊るす糸（Line）は別々のマテリアルを使用しています。
別の Mesh を Bake するときにマテリアルも結合してくれるのですが、
この関係からか別マテリアルの場合、自動で MeshBaker の対象にならないことがあります。

この場合は手動で追加していきます。

1. ヒエラルキー上で TextureBaker を選択します
  ![2019-11-06_09h53_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/d0bf91f5-ede5-6a0e-af05-c71297591162.png)
2. MB3_Texture Baker の Objects To Be Combined を展開し、Sizer をメッシュの数に合わせて修正します。
  （ここでは 4 から 6 に変更しています）
3. 増えた項目に追加したい Mesh をドラッグ＆ドロップで追加します
![2019-11-06_09h54_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/97e83cc5-385c-2141-b66e-44c577b5421b.png)

ここから先は同じ手順です。実施した結果が下です。一番右が今回の手順で実施した鳥居です。他と比べると暗いですね。結果的に分割して Bake したほうが良かったみたいです。
（他は左から、未実施、別々にBake、銅鑼はMeshのみBake、今回の手順で実施、です。）
![2019-11-07_09h26_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/2ca20b61-87ae-f35d-d882-c1aaa38a3078.png)


## 大きなオブジェクトを Bake する
（時間があるときに実施した結果は追記しようと思います。）
大きなオブジェクトを Bake すると、当然ですが大きなオブジェクトの Mesh が一つのものとして Bake されます。例えば家を Bake すると、その家が一つの Mesh として Bake されます。そうすると家の中にいるとして、ある一面の壁しか見えていない時でも、家全体の Mesh を描画計算する必要がでてきます。その結果、Batches などは減っているけど、Tris などの値が増えてしまい、結果処理が遅くなることもあります。ご利用は計画的にですね。

# まとめ
Batches、SetPass Call を減らすためにはとても有用な Asset だと感じました。

* 操作も慣れれば簡単
* 簡単に Batches、SetPass Call を減らすことができる
* 見た目を変えずにBakeするには調整が必要な場合もある
  * Texture は Bake しない
  * Mesh を一度に Bake しないで、分割して Bake する
* 大きすぎるオブジェクトに使うときは本当に必要か考えてから