前回紹介したMeshBakerについて、基本的な使い方を紹介していきます。
結合手順
下のビル群を使います。
こちらのアセットに含まれているものです。
West European Old Town Volume1 for Mobile
MeshBakerをシーン内に作成する
Hierarcyビューの
Create > Create Other > Mesh Baker
から、用途に合わせてオブジェクトを選択します。
今回は Mesh And Material Baker を使ってみます。
下のように、空のオブジェクトにビルのプレハブを三つ入れておきます。
結合対象をリスト化する
まず専用ツールを開きます。
シーン内に MaterialBaker0 というオブジェクトが作成されているので、選択してインスペクタを表示すると、以下のようになっているので、 Open Tools For Adding Objects ボタンを押します。
するとツールが開きます。
まず Exclude meshes with out-of-bounds UVs のチェックを外します。(後述)
この状態で、BuildingRootを選択し、 Add Selected Meshes To Target ボタンを押しましょう。
すると配下のメッシュがすべて、MaterialBaker0 に結合対象としてリストアップされます。
結合後に使用するマテリアルを作成
次にマテリアルの結合設定です。
Create Empty Assets For Combined Material ボタンを押すとダイアログが出るので、保存先を選択します。
こんな感じで結合用のファイルができあがりました。
この状態でマテリアルはできあがっていますが、テクスチャは結合されていません。
Bake Material Into Combined Material ボタンを押すとテクスチャが結合されます。
メッシュ結合!
いよいよメッシュを結合します。 MaterialBaker0 の下に MeshBaker というオブジェクトがあるので、選択してインスペクタを見ましょう。
下のほうに Bake ボタンがあるので、これを押せば結合が始まります。
結合後、 Disable Renderers On Source Objects ボタンを押すと、元のMeshReandererをすべて無効にできるので、手作業で元オブジェクトを消す必要はなくなります。
下が結合後のメッシュです。
一見うまく結合できているようですが…
ビルの天井の模様がめちゃくちゃですね。
パラメータ調節
MaterialBaker0の Consider Mesh Uvs にチェックを入れます。
これは元のメッシュのUV値が0〜1の範囲を超えている場合に、うまいこと調節してくれるオプションです。
その後、テクスチャのベイクからやりなおします。
- MaterialBaker0オブジェクトの Bake Material Into Combined Material ボタン
- MeshBakerオブジェクトの Bake ボタン
今度はうまく焼けました。
プレハブに書き出す
デフォルトの設定だとシーンに直にメッシュを書き出します。
書き出されたGameObject をプレハブにしようとしても、うまくいかないので注意です。
有料版限定で、プレハブに書き出すことができます。
空のプレハブを用意し、MeshBakerのOutputオプションを下のようにしましょう。
注意
Exclude meshes with out-of-bounds UVs
今回は結合対象をリスト化する際にチェックを外しました。
Add Selected Meshes To Targetボタンを押した時に以下のエラーが出るようなら、チェックを外しましょう。
Tilingなもの
地面など、マテリアルのTilingが有効になっている場合、Consider Mesh UVsにチェックを入れましょう。
この場合、結合後のテクスチャは Tilingしている分だけ繰り返して 焼きこまれるため、容量が増えたりするので注意です。
テクスチャがないオブジェクトを結合したい場合
以下のようなエラーが出ることがあります。
Could not find a tiled rectangle in the atlas capable of containing the uv and material tiling on mesh xxxxxx
これはテクスチャが無いのにメッシュのUVを参照しようとしているためで、 Consider Mesh UVs オプションをOFFにすれば解決します。
当オプションが必要なものと結合したい場合、ちょっと工夫する必要があるかもしれません。
頂点数が64K超えたら
Unityでは一つのメッシュの頂点数は最大で64K(65534)となっています。
この数字を超える場合、複数のメッシュに分けて結合しなければなりません。