BlenderでFBXにテクスチャを埋め込みたい!

はじめに

FBXにテクスチャを埋め込むとUnityや他のアプリケーションで使うときにテクスチャを指定しないで良いので便利です。
しかし、あまりまとまった記事が見つからなかったのと Blender 2.8 からは埋め込みの方法が変わっていたのでその方法を忘れないようにメモしておきます。

Blender 2.79

レンダリングモードが「Blender レンダー」のとき限定です。 (マテリアルのテクスチャスロットでテクスチャ画像を指定している場合)

  • FBX エクスポートのときに「パスモード」を「コピー」にする
  • 「パスモード」の右にあるトレイのようなアイコンをクリック

これでうまくいかない場合は、すべての「外部データ」から「.blend ファイルに自動パック」のチェックをつけるとうまくいくかもしれません。

Blender 2.80 Beta

blender-2.80-25772c9e1d2d (2019/1/27の最新版) での確認になります。

プリンシプルBSDF によるテクスチャ埋め込み

Blender 2.8 からは従来の「Blenderレンダー」がなくなり、「EEVEE」に変わりました。
これによりノードベースのシェーダーしか使えなくなったため、以前のバージョンで使えた方法が使えなくなりました。
(APIからマテリアルのテクスチャスロットという概念が消えています…)

Blenderに標準で入っている FBX をインポート・エクスポートするアドオン「io_scene_fbx」もこの変更を受けて大幅な修正が行われています。
2019/1/27現在も活発なコミットがなされているようなので、今後変更があるかもしれませんが、EEVEE/Cyclesでもテクスチャ埋め込みをする方法が用意されていたので紹介しておきます。

  • 「マテリアル出力」 -「 プリンシプルBSDF」 - 「画像テクスチャ」が直接並んでいるノードにする
  • あとは 2.79 のときと同じようにエクスポートする

テクスチャ埋め込みが動作する例は下記のようなノードで、それぞれのノードに他のノードが挟まってはいけないようです。

これで一応 Blender2.8 でも FBX にテクスチャを埋め込めるようになったのですが…プリンシプルBSDFノードに接続すると見た目がPBR(物理ベースレンダリング)みたいになって嫌になることもありませんか?
特に VRChat のアバターではNPR(非写実的レンダリング )を好んで使うことも多いと思います。

そこで、プリンシプルBSDFを経由しなくても、最終的にマテリアル出力につながってる画像テクスチャノードの画像をすべて埋め込むように io_scene_fbx アドオンに修正を加えることにしました。

「マテリアル出力」ノードにつながっている画像テクスチャノードをすべて埋め込む

というわけで修正を加えたバージョンの io_scene_fbx アドオンがこちらです!

具体的な修正点はコミットを見てください。
この変更は、「マテリアル出力」ノードから順にノードを辿っていって、すべての画像テクスチャノードで指定されている画像を埋め込み対象にします。

こちらの FBX エクスポートでは 2.79 までと同じ手順でテクスチャを埋め込むことが出来ます。

これをこのままアドオンディレクトリに放り込むと同名のアドオンがかぶってしまうので、元のアドオンはどこかに避難させておくと良いかもしれません。
標準で入ってるアドオンの位置は下記の「ファイル」のところにあります。

最後に

Blender2.8 では glTF 2.0 へのエクスポートアドオンが標準で有効になっているので、もしかしたらそちらを使うほうが早いかも知れません…。(未検証)