Blenderのオブジェクトに複数のマテリアルがついているとき、テクスチャにベイクすることで、それを一つのマテリアルにまとめることができます。
基礎的なベイクの方法 + マテリアルが複数ついているときのベイク を解説します。
わりと一般的というか基礎的な技術らしいですが、自分は今まであまりやったことがなかったです。1つのオブジェクトに複数マテリアルがついてるとき、それをまとめることはできないと思い込んでいたんですよね…。ベイクすることで簡単に解決できました。
この記事は、Blenderで1つのオブジェクトについた複数のマテリアルを1つにまとめる方法を書いた初級者~中級者向けの記事です。
難易度
①1つのオブジェクトにマテリアルを複数つける

まず複数のマテリアルがついたオブジェクトを用意する
このようにトーラスに二つのマテリアルをつけました。
- ドット柄
- ストライプ柄
この二つのマテリアルは、ノーマルもつけました。微妙に凹凸があります。
どうやって複数のマテリアルをつけるの?

複数のマテリアルをつける方法
編集モードで面選択をし、別のマテリアルをつけたい部分を選択した状態で、マテリアルをAssignすれば、その部分だけに特定のマテリアルをつけることができます。
こうして何種類でもマテリアルをつけていくことが可能です。
②UV展開
トーラスのUV展開
ふつうにUV展開します。(トーラスなので水平方向と垂直方向にシームを入れた方がいいです)
複数のマテリアルがある場合のUV展開のコツ
- マテリアルの境目にシームを引く
- 柄がはみ出すのを避けるため、マージンをとる

UV editorにいき、全選択でUを押してUnwrapでUV展開すると、左下にUV展開のオプションが出ますので、そこでMethodを変えて、UVがいい感じになるように調整します。
UVがいい感じってどういうこと?って方はこないだ書いた記事があるので参考にしてみてください↓
マージンの調整もできるので、ある程度開けた方が綺麗にベイクできます。(開けすぎると面積がもったいないのでバランスとってください)
③二つのマテリアルをベイク
二つのマテリアルをベイクしていきます。今回は色とノーマルがあるので、色用とノーマル用に二つテクスチャを作っていきます。
ベイク準備
いよいよベイクするのでベイク準備します。
- Render EngineをCyclesにします。
- マテリアルにImage Texture ノードを出します。
Image Textureノード

それぞれのマテリアルにImage Textureノードを出してNewで新しい画像を作っておきます。
名前はTorus Textureにしました。
名前をいれて、透過しないのでAlphaのチェックを外してNew Imageを押してください。

同じ名前の同じイメージテクスチャをすべてのマテリアルに追加して置いといてください。
今ある色やノーマルを焼きたいので、ノードにつなげないでください。
あと、これは自分がやらかしたミスなんですが、PrinsipleBSDFなどのシェーダーノードは出しておいてください。いらないだろうと思って、直接色などをMaterial Outputにつなげたら全くベイクできなくて悩んでたことがあります。
色(Diffuse)をベイクする

ベイクの設定
レンダープロパティの中のBakeのセクションで設定します。
Bake Type…Diffuse(色)にします
Contributions…Colorのみにチェックを入れます。(Direct,Indirectはその環境の光の影響も入れてしまうので、純粋に色を焼くことができません。)
Bakeのボタンを押す前に
必ず
- オブジェクト(トーラス)を選択
- それぞれのマテリアルにおいてあるImage TextureノードをShiftを押しながら選択し、白い枠線がついた状態にしておいてください。

枠に白い線が出て選択されていることを確認する
これらが確認できたら、Bakeのボタンを押してベイクします。(少々時間がかかることがあります)

Bakeが終わったら、Texture Paintの画面に行きます。
柄が焼かれていることを確認します。それぞれのUVに柄がはみ出ていないことも確認。
※もしはみ出ていたら、もう一度UV展開し直し、マージンの数値を少し上げましょう。
うまく焼けていたら、Imageタブを開いてSave As…でこのイメージテクスチャを必ず保存しておいてください。(保存しないと無くなってしまいます)
ノーマル(Normal)をベイクする
まずNormalをベイクする用のImage Textureノードを用意します。

名前をTorus Normalにして、透過しないのでAlphaのチェックを外してNew Imageで新規画像を作っておきます。
これもすべてのマテリアルに同じイメージテクスチャをコピペして置いておきます。ノードはつなげません。

Bakeの設定
レンダープロパティの中のBakeのセクションで設定します。
Bake Type…Normalに設定します。
今回も
- オブジェクト(トーラス)を選択
- 各マテリアルについてるノーマル用のImage Texture ノードをすべて選択
してからBakeのボタンを押します。(Bakeが終わるまで少々時間がかかることがあります)

Bakeが終わったらTexture Paintの画面に行きます。
画像のように水色~ピンクの範囲で焼けていたら成功しています。黄色などの色が出ていたら失敗しています。(今回はベイクの失敗については解説しません…)
Normalのテクスチャもできましたので保存しておきます。
④マテリアルをセットし直す
色とノーマルのテクスチャが出来たので、それらを使って新しいマテリアルを設定していきます。

マテリアルに新しくTorus Texというマテリアルを作ります。
以下のように作ったテクスチャを使ってマテリアルを作ります。

ポイント
Normalテクスチャを使う場合はColor SpaceをNon-Colorにしておき、Normal MapのColorとつなぎます。
なぜかわからない方は以下の記事を書きましたので参考にしてください↓

Image Textureノードに表示される名前が望むものになってない場合があります。ファイルの名前そのものではないので、Texture Paintの画面へいき、メニュー上部で名前を自由に変えることができるので、わかりやすい名前に変えておきましょう
あとはPrinciple BSDFノードで調整すればおもしろマテリアルが簡単に出来上がります。

他のマテリアルはもういらないので削除しても大丈夫です。
このようにマテリアルが一つに統合されました。
余談
この記事を書くきっかけになったのが、以下の記事です。
この記事では、二つのオブジェクトについてる、それぞれのテクスチャを一つのテクスチャにまとめるという記事なんですが、そもそも二つのオブジェクトってオブジェクトを統合しておけば同時にUV展開できて一つのテクスチャにまとめることができるんですよね。

二つのオブジェクトをCtrl + Jで統合してからUV展開、→ ベイク でマテリアルを1つにできる

でもこの記事の素晴らしい知見は、今のUVを保持しながら、新しいUVにテクスチャを焼けるってところだと思うんですよ。
この技術を応用したら、今まで出来ないと思ってた「1つのオブジェクトについてる複数のマテリアルの統合」も可能になると気づきました。実はかなり一般的な技術というか、よく使われている手法らしいんですが、…自分はやったことがなかったんですよね。
容量を軽くするのに、こうやってベイクでテクスチャをまとめるという技術は不可避だと思うので、これからも隙あらばまとめていけるようになりたいです。