blender 4.2 テクスチャをベイクする
blender で作成したモデルを、Unity などの他のアプリケーションにエクスポートして使いたいという需要も多いと思いますが、生成テクスチャ等 blender 独自の機能によるマテリアルは、他のアプリケーションでは再現できません。
そこで、それらのマテリアルを画像としてベイクし、他のアプリケーションでも利用する方法を紹介します。
環境 Blender 4.2.0 , Mac Mini M1 OS 14.4
テクスチャベイクとは
テクスチャベイクとは、オブジェクトの表面に適用された、カラーや模様、粗さ、起伏などのデータを、画像として保存する機能。これらは、Unity、UE など他のアプリケーションでも共通なため、blender のマテリアルをそのみためのまま適用することができる。
サンプルオブジェクト
テクスチャベイクを行うテーブルランプオブジェクト。マテリアルはベースの木材(Wood)と、金属製のシェード(Metal)で構成されている。

シェードの幾何学的な起伏(Bump)はボロノイ、ベースの木目はノイズ、ベースの縞模様(粗さ)は波、の各テクスチャで生成し、画像は使っていない。このため、このオブジェクトをエクスポートし他のアプリケーションでマテリアルを再現するには、これらの blender 独自のテクスチャを、汎用性のある画像としてベイクする必要がある。
準備
UV 展開
ベイクするテクスチャは、UV によって模様の位置等を決定するので、あらかじめ、UV 展開を行う。

UVアイランド(切り離されたUV)間はやや離し、アイランド同士で重なりがないように配置する。自動でおこないたい場合は、UVエディター内メニューの、UV > アイランドを梱包、を実行し、「余白」を 0.1 など適宜設定する。
ベイク用テクスチャの作成
UV エディター画面の「新規」から、ベイク結果を保存する新規画像を作成する。

レンダー設定
ベイクは EEVEE では行えないため、レンダープロパティで、レンダーエンジンに Cycles を選択。ベイクにはサンプル数を必要としないので、レンダー > 最大サンプル数を、10 程度に設定し、ベイク時間を短縮する。

シェーダーエディター設定
ベイクを行うマテリアルであることを明示するため、各マテリアル、ここでは、Wood、Metal 両マテリアルに、テクスチャ > 画像テクスチャノードを追加し、上で作成した「BakeTexture」を指定する。

画像テクスチャノードは接続する必要はないが、すべて選択状態(白枠)とする。
ベイク
ベイクを行う準備が整ったので、各種ベイクテクスチャを作成する。
ディフューズ(Diffuse)
マテリアルの、ライティングの影響を排除したカラー情報。ベイクタイプに「ディフューズ」を選択し、「ベイク」ボタンを押す。

UV エディターでベイクされた画像を確認し、画像 > 保存 でベイクテクスチャを保存する。フォーマットは JPEGとし、 ここでは「Diffuse.jpg」として保存した。


ベイクされたディフューズベイクテクスチャ、Diffuse.jpg。おもにベースの木目が保存された。

なお、ディフューズの出力には、メタリックの値が邪魔をするようなので、金属マテリアルの場合、いったんメタリックの値はゼロとする。
粗さ(Roughness)
同様に、ベイクタイプに「粗さ」を選択し、ベイク、Roughness.jpg として保存した。

縞模様はランプベースの、中央のグレイはシェード部分の表面。
ノーマル(Normal)
ベイクタイプに「ノーマル」を選択し、ベイク、Normal.jpg として保存した。ノーマルは表面の起伏を擬似的に表現するデータ。

ランプシェード部分、ボロノイ生成テクスチャによる幾何学模様的な起伏がベイクされている。
メタリック(Metalic)
ベイクタイプに「光沢(Glossy)」を選択し、ベイク。Metalic.jpg として保存した。その表面が金属であるかないかを示すデータ。


ベイクタイプには、なぜかメタリックがなく、他の方法もあるようだが、ここでは光沢で代用している。本来、金属でないはずの木製ベース部分にも弱く適用されてしまっているが、光沢の一部として無視できる範囲だろう。
結果
上記で作成したベイクテクスチャをすべて適用したマテリアル。


ランプシェードの起伏については、バンプとノーマルマップによる違いがあり、ややエッジに乏しく、100%は再現されていないが、ベースカラー、粗さ、メタリックも正しく適用されている。
この後、必要であれば、FBXフォーマット等でエクスポートし、Unity や UE で、ほぼ後処理なく、マテリアル付きでインポートが可能だ。
補足
上で紹介したベイクの他に、ポリゴン数の節約のため、オブジェクトの細かい起伏は、ノーマルマップとしてベイクしたいという場合もあるだろう。
下の 2 オブジェクトを作成した。上の平面は細分化し、形状として起伏をつけた。下の平面は大きさはおなじで、細分化はなく 1 面のみ。

ここでは平面追加時のデフォルトの UV をそのまま利用するが、形状により必要であれば UV 展開を行う。
2 平面には、それぞれ、下の同一のマテリアルを適用する。

テキスチャ > 画像テクスチャを追加し、「新規」をクリック。ここでは 幅高さを 2048 x 2048 とし、名前を BakeNormal とした。 上記同様、接続の必要はない。

ベイク設定。ベイクタイプは「ノーマル」、「選択物 → アクティブ」にチェック、「ケージ」にチェック、ケージを押し出しは 1 m とした。
Shift キーを押しながら、上、下の平面の順に選択。ベイクボタンを押し、ベイクする。


ベイクしたノーマルマップをマテリアルに適用することで、細分化された面でなくても起伏を擬似的に表現でき、とくにゲームや動画用などで処理負担の軽減になる。
まとめ
blender 以外は使わない、blender ですべてのプロセスを完結する、という場合は、あまり必要のない操作ではありますが、blender で作成したモデルを他のアプリケーションでインポートし、ゲーム制作に取り入れたり、アバターとして利用する際などには、欠かせない機能です。
ただ、標準の機能ではすこしわかりづらい、手順が多い、などの印象もあるので、積極的に使う場合は、アドオンが便利かもしれません。
フリーアドオン。使用経験はないが、どちらも評価は高いようだ。
