BlenderのFBXエクスポータは、既定のままだとSubstance Painterに渡したい情報を一部書き出さない。特にスムージング(辺のハード/ソフト)とタンジェント(接線)で、どちらも初期値が「出力しない」側に倒れている。
実機の Blender 3.6.11 でFBXエクスポータの全パラメータの初期値を列挙し、さらに同じ球体を条件を変えて3回書き出して、生成されたFBXの中身を数えた。以下はその実測値だ。
既定のまま書き出すと何が欠ける?
同一のメッシュを3条件で書き出し、FBX内の要素の出現数を数えた結果がこれだ。
| 書き出し条件 | LayerElement Smoothing |
LayerElement Tangent |
LayerElement Binormal |
LayerElement Normal |
|---|---|---|---|---|
| 既定のまま | 0 | 0 | 0 | 2 |
| Smoothing を Face に | 2 | 0 | 0 | 2 |
| + Tangent Space を有効 | 2 | 2 | 2 | 2 |
🔎 法線そのものは既定でも出ている(Normal は3条件とも2)。欠けるのはスムージンググループ=どの辺を硬く扱うかの情報と、タンジェント/バイノーマルの2つだ。「法線が消える」ではないので、症状も「真っ黒になる」ではなく「エッジの出方が意図と違う」という形で出る。
タンジェントを入れるとファイルサイズは約1.3倍になった(同条件で複数回測って比率は安定)。頂点ごとに接線ベクトルが増えるためで、ハイポリを大量に扱うときは無視できない差になる。
どの項目を変えればいい?
FBXエクスポータの主要パラメータについて、実機で読み出した初期値と、Painterへ渡す前提での扱いを並べる。
| パラメータ | 初期値(3.6.11実測) | Painterへ渡すなら |
|---|---|---|
Smoothing(mesh_smooth_type) |
OFF |
Face か Edge に変える |
Tangent Space(use_tspace) |
False |
法線ベイクの整合を優先するなら有効 |
Triangulate(use_triangles) |
False |
三角化の結果を固定したいなら有効 |
Apply Modifiers(use_mesh_modifiers) |
True |
そのまま。モディファイア適用後が出る |
| Apply Scalings | FBX_SCALE_NONE |
そのまま(Scaleは1.0で作業しておく) |
| Apply Unit / Space Transform | どちらも True |
そのまま |
| !Experimental! Apply Transform | False |
触らない |
| Forward / Up | -Z / Y |
そのまま(FBXの標準軸) |
⚠️ 「!Experimental! Apply Transform」(bake_space_transform)は初期値のオフのままにする。名前のとおり実験的な項目で、有効にすると回転・スケールが焼き込まれる。軸が合わないときの応急処置として紹介されることがあるが、原因はたいていオブジェクトのトランスフォーム未適用のほうにある。書き出し設定ではなく、Blender側でCtrl+Aの適用を済ませるのが順番として正しい。
Painter側は何を選べばいい?
新規プロジェクトのTemplateで「Blender」を選ぶ。同梱テンプレート26個の中にBlender専用のものがあり、実機で中身を読むとdefaultExportPreset に Blender (Principled BSDF) の書き出しプリセットが紐付いている。
これは地味に効く。SPからBlenderへの書き出しで書いたとおり、汎用のPBR系プリセットを選ぶと法線がDirectX参照になって凹凸が反転するが、Blenderテンプレートで作っておけば書き出し時の既定が最初からBlender用になる。入口で選べば出口で間違えない。
ただしテンプレートが持っている書き出しパラメータの初期値も実機で読める。bitDepth は “8”、形式はPNG、dilationDistance は16、パディングは infinite だった。
🔎 8-bitのままでいいかは用途による。BaseColorは8-bitで問題ないが、NormalやHeightは緩やかなグラデーションで段差(バンディング)が出ることがある。ビット深度と解像度の考え方は書き出し設定・解像度完全ガイドにまとめてある。
ベイクのための準備はBlender側で終わらせる
Painterにモデリング機能はないので、UV展開・命名・マテリアル分けはBlenderを離れる前に済ませる。ハイポリとローポリは _low / _high の接尾辞で揃えておく。ベイク設定の Match を「By Mesh Name」にしたとき、この命名が対応づけの根拠になる。
密集したパーツをそのまま焼くと隣のパーツの影が乗るので、この命名は見た目の問題ではなく必須の準備だ。ベイクの詳細はSubstance Painter入門ガイドで扱っている。
ハイポリは数百万ポリゴンになることがあり、書き出しの時点でメモリを使う。Painter側のベイクはGPUで走るのでVRAMも要る。ここが詰まると作業が止まる。
毎回設定し直さないためには?
FBX書き出しダイアログの上部にあるOperator Presets の+ボタンで、いま入れた設定に名前を付けて保存できる。次からはプルダウンで呼び出すだけになる。Smoothing と Tangent Space は毎回手で戻すには忘れやすい位置にあるので、ここで固定しておく。
🔎 実測した範囲:Blender 3.6.11 をバックグラウンドモードで起動し、FBXエクスポータの全パラメータの初期値を列挙、同一メッシュを条件を変えて書き出し、生成物のバイト列を数えたところまで(Face/Edgeの比較、UVを外した場合の挙動を含む)。Painter側は同梱テンプレート26件と書き出しプリセット34件の定義を直接読んだ範囲で、Painterへ実際に読み込んでベイクした比較はしていない。「Smoothingが無いとエッジの出方が変わる」は、書き出し側にデータが無いこと(実測)からの帰結として書いている。
まとめ:出口ではなく入口で決める
- 既定のFBXにはSmoothingもTangentも1件も入らない。法線は出ているので気づきにくい
- Smoothing は Face か Edge に変える。Tangent Space は法線ベイクの整合を優先するなら有効に
- Apply Transform(実験的)は触らない。軸ズレはBlender側のCtrl+Aで直す
- Painterは「Blender」テンプレートで作る。書き出しプリセットが自動で紐付く
- 設定はOperator Presetsに保存する。毎回手で戻すと必ずどこかで抜ける

コメント