Substance PainterからUnityへテクスチャを持っていくと、ほぼ必ず2つのことが起きる。AO(アンビエントオクルージョン)のファイルが見当たらない。そして凹凸が逆向きに彫れている。どちらも操作ミスではなく、書き出しプリセットの定義がそうなっているのが原因だ。
実機の Substance 3D Painter 12.1.2 に同梱された書き出しプリセット34個について、定義ファイルを直接読み出して出力マップと参照チャンネルを確認した。公式ドキュメントは説明文だけで中身の記載が無い部分なので、その実測値を出す。
Unity向けプリセットは4種類。どれを選ぶ?
Export Textures の Output template に、Unityと名の付くプリセットは4つある。URPで作っているなら「Unity Universal Render Pipeline (Metallic Standard)」を選ぶ。
| プリセット | 書き出されるファイル |
|---|---|
| URP (Metallic Standard) | AlbedoTransparency / MetallicSmoothness / Normal / Emission |
| URP (Specular) | AlbedoTransparency / SpecularSmoothness / Normal / Emission |
| HDRP (Metallic Standard) | BaseMap / MaskMap / Normal / Emissive |
| HDRP (Specular) | BaseMap / Specular / MaskMap / Normal / Emissive |
URPプリセットがAOを書き出さないのはなぜ?
URPの2プリセットは出力が4ファイルで、その中にAO(Occlusion)が無い。34プリセットの定義から参照チャンネルを機械的に抽出したところ、AOのメッシュマップを参照しているのは8個だけ(Unreal Engine (Packed) 2種・Maxwell 2種・Lens Studio・Spark AR Studio・Unity HDRP 2種)で、URPはそこに含まれない。HDRPは MaskMap の1枚にAOとスムースネスをまとめており、参照チャンネルにも AO_Mixed と Glossiness が入っている。プリセットの定義上、HDRP側はAOを含み、URP側は含まない。
一方でURP LitにはOcclusion Mapのスロットがある。使うなら自分で出力を足すことになる。
- URP (Metallic Standard) を選び、複製ボタンでコピーする(同梱プリセットは直接編集できない)
- 複製側に出力マップを1つ追加し、
Ambient occlusionのメッシュマップをRGBへ割り当てる
AOそのものが崩れている場合は、書き出しより先にベイクエラーの解決のほうが効く。
凹凸が逆転するのは「汎用プリセット」を選んだから
ノーマルマップの規格はDirectXとOpenGLで緑チャンネル(Y軸)の向きが逆で、UnityはOpenGL側を前提にしている。多いのが汎用の「PBR Metallic Roughness」をそのまま使うケースだ。定義を読み出すと参照チャンネルは Normal_DirectX だった。
| 使ったプリセット | Normalの参照チャンネル(実測) | Unity側の扱い |
|---|---|---|
| Unity URP / HDRP(4種すべて) | Normal_OpenGL |
Unityの前提と一致 |
| PBR Metallic Roughness(汎用) | Normal_DirectX |
緑チャンネルが逆=Flip Green Channelが必要 |
🔎 実測した範囲:書き出しプリセット(.spexp)34件とプロジェクトテンプレート(.spt)26件を直接読み出し、出力マップ・参照チャンネル・OpenPBR固有パラメータの有無を全件について確認したところまでが実測値だ。Unityに取り込んで描画を比較する検証は行っていないので、「DirectXのまま渡すと凹凸が反転する」はUnity側の仕様に基づく帰結として書いている。見え方はシェーダーやライティングでも変わるので、最終判断は自分のシーンで。
「UE5では合っていたのにUnityでおかしい」も同じ理屈で、UE5側はDirectXが正しい(逆方向の事故はUE5でテクスチャの色が変わる原因)。書き出し済みの分はUnity側の Flip Green Channel で戻せる。
Unity側のインポート設定で必ず触る3か所
Unityは拡張子やファイル名から用途を推測しない。インポート設定は人間が指定する。
| テクスチャ | Texture Type | sRGB (Color Texture) |
|---|---|---|
| AlbedoTransparency | Default | ON(人が見る色) |
| MetallicSmoothness | Default | OFF(数値データ) |
| Normal | Normal map | —(自動でOFF) |
MetallicSmoothnessのsRGBを外し忘れるとMetallicの数値にガンマ補正がかかり、本来より大きな値として扱われる。「Painterでは落ち着いていたのにUnityで白飛びする」ときに最初に見るべき箇所がここだ。さらにマテリアル側で Workflow Mode を Metallic、Smoothness Source を Metallic Alpha にする。Albedo Alpha のままだと質感が丸ごとずれる。
解像度とビット深度は書き出し設定・解像度完全ガイド、モデル本体の持ち込みはBlenderからUnityへのFBXインポート設定に分けてある。
12.1でOpenPBRが既定になった。Unity向けはどう作る?
Substance 3D Painter 12.1(2026年6月22日)から、OpenPBR 1.1が既定のワークフローになった。Adobe公式は「テンプレートを選ばずに作成した新規プロジェクトはOpenPBRシェーダーを使う」としている。
問題は書き出し側が追いついていない点だ。同梱プリセット34個のうちOpenPBR向けは1つも無い。プロジェクトテンプレート26個のうちUnityと名の付くものは Unity HD Render Pipeline (Metallic Standard) だけで、URP用テンプレートは存在しない。OpenPBR系は Anisotropy / Coat / Fuzz / Subsurface Scattering の4つがある。
OpenPBRテンプレートには specularIoR・coatIOR・subsurfaceRadius といったパラメータが並ぶが、これらはURP Litに受け皿が無い。作り込んでもUnityに渡した瞬間に落ちる。
⚠️ URP向けなら、テンプレートを選ばずに新規作成しない。12.1以降はそれがOpenPBRプロジェクトになる。New Project の Template で PBR - Metallic Roughness を明示的に選ぶこと。11系以前のチュートリアルはここだけ手順が食い違う。
まとめ:Unity書き出しの5チェック
- プリセットはUnity URP (Metallic Standard)。汎用のPBR Metallic RoughnessはDirectX規格を参照している
- URPプリセットはAOを書き出さない。必要なら複製してOcclusion出力を追加する
- MetallicSmoothnessのsRGBはOFF。金属の白飛びはほぼこれ
- NormalはTexture TypeをNormal mapに。DirectXで出した分はFlip Green Channelで戻せる
- 12.1以降はテンプレートを明示する。無指定だとOpenPBRになる

コメント