ぼっちブログ

個人ゲーム開発者やっています。主に購入したUniyアセットの使用感を書いていきます。

【Unity】【Mesh Baker】モデルのマテリアルを結合してSet Pass Callを減らす

Set Pass Callの大小はパフォーマンスに大きく影響する、らしい。

この部分で引っかかったことないのでピンときませんが。

ともかく、Set Pass Callをなるべく減らしておいたほうが良さそうです。

そんなわけで、今回はMesh Bakerを使ってモデルのマテリアルを結合してSet Pass Callを減らす方法を紹介。

とりあえず、これ。

モデル毎にSet Pass Callが増加している

MagicaVoxelで.objを出力したのをインポートしたものだけど、1個のモデルにつきマテリアルが1つ割り当てられています。

4種類あるので4マテリアル。

同時に表示すると、Set Pass Callは当然+4(後の1は背景分)。

これをマテリアル結合して、Set Pass Callを+1にします。

まずは、作業用のシーンを新たに作ってMeshBakerって名前で保存しておきます。

GameObject→Create Other→Mesh Baker→Batch Prefab Makerを選択して、BatchPrefabMakerをシーンに配置。

BatchPrefabMakerをシーンに配置

BatchPrefabMakerのインスペクターで、Prefab Rowsのサイズを4にして、Source Prefabにモデルをセット。

Source Prefabにモデルをセット

Browse For Output Folderを押して、マテリアルを結合したモデルとかを保存するフォルダを指定。

Create Empty Result Prefabsを押して、空のプレハブを作成しておきます。

空のプレハブを作成

作成した空のプレハブがResult Sourceに自動的にセットされる
作成した空のプレハブはResult Sourceに自動的にセットされる

Objects To Be CombinedでSizeを4にして、Elementにモデルをセットします。(もしモデルのMesh Rendererが子オブジェクトにいる場合は、子オブジェクトをセットする)

Objects To Be Combinedにモデルをセット

Create Empty Assets For Combined Materialを押して、マテリアルを保存します。

マテリアルを保存

(この保存される.assetの方は何者かよくわかってないのですが、マテリアルの設定情報を保存してるのかな)

あとはBake Materials Into Combined Materialでテクスチャを結合して出力、Batch Bake Prefabsでプレハブを出力します。

結合されたテクスチャ
結合されたテクスチャ(わかりづらいけど)

マテリアルが結合されてSet Pass Callが2に減った
マテリアルが結合されてSet Pass Callが2に減った

もし、新しいモデルを追加したい場合は,新しいモデルをPrefab RowsとObjects To Be Combinedに追加して、Create Empty Result Prefabsで新しいモデルの空プレハブを作成してから、Bake Materials Into Combined MaterialとBatch Bake Prefabsをすれば追加できます。

このアセットのいい部分は、もしマテリアルを結合しなおしても、既存の出力したプレハブを更新する形なので、出力したプレハブを使っている場所の参照が切れないところ。

あと、マテリアルを共通化するためにMagicaVoxelやQubicleでモデルを大量に並べて配置して出力する必要もなくなるので、おすすめです。