Adobe Substance 3D Painter(以下 Painter)で塗ったテクスチャを、Unreal Engine の ORM や Unity HDRP の Mask Map のように「1枚に詰めた形」で書き出すには、Output template を使います。本記事では、ORM 用テンプレートの作り方、ファイル名の変数、形式とビット深度、テンプレートのチーム共有までを、Painter の画面に沿って解説します。
対象は執筆時点(2026年9月)の最新版 Painter 12.1(12.1.5)です。書き出し画面は旧バージョンと構成が違う箇所があり、表記はバージョンによって異なります。チャンネル割り当てや圧縮形式との相性といった設計の考え方は チャンネルパッキング戦略|UE/Unityのテクスチャを軽くする設計 で扱っているので、本記事は Painter での操作に絞ります。
夕宮たいだふぁ……みんな〜、今日は Painter の書き出しテンプレートの話だよぉ。ORM を1枚に詰める設定って、一回作っておけばずっと使えるんだぁ。一緒にいこ〜。
書き出し画面と Output template
ひとことで:Output template は、どのチャンネルを、どのファイルの、どの色チャンネルへ入れるかを決める書き出しの設計図です。
書き出しは File > Export textures(Ctrl+Shift+E)で開く Export Textures ウィンドウで行います。出力先や形式を決める Export settings、テンプレートを作る Output templates、書き出し結果とエラーを表示する List of exports の3タブ構成です。下部の Save settings を押すと、書き出し設定がプロジェクトに保存されます。
テンプレートには、複製して編集できる Default Output templates と、編集できない Predefined Output templates があります。ゲームエンジン向けの Default には Unreal Engine (Packed)(バージョンによっては Unreal Engine 4 (Packed))や Unity HD Render Pipeline (Metallic Standard) などがあります(一覧は公式ドキュメントの Default Output templates)。
12.1 では命名規則(naming convention)を選ぶドロップダウンが加わり、OpenPBR シェーダーを使うプロジェクトでは既定で OpenPBR の命名が選ばれます。テンプレートを指定せずに作った新規プロジェクトも 12.1 からは OpenPBR になるので、チャンネルの表示が見慣れないときはこの設定を確かめてください。
入力に使える3種類のマップ
ひとことで:チャンネル、メッシュマップ、変換マップの3系統から選びます。ゲーム向けでは変換マップの Mixed AO と Normal DirectX/OpenGL が要です。
| 系統 | 中身 | 例 |
|---|---|---|
| Input maps | Texture Set settings で追加したチャンネル | Base color、Roughness、Metallic |
| Mesh maps | ベイクしたメッシュマップ | Normal、Ambient occlusion |
| Converted maps | 書き出し時にほかのマップから生成される仮想のマップ | Mixed AO、Normal DirectX、Glossiness |
ゲーム向けでよく使う変換マップは次の3つです。
- Mixed AO:ベイクした AO と、Ambient occlusion チャンネル(手で描いた AO)を合成したもの
- Normal DirectX/Normal OpenGL:ベイクした法線、Height、Normal チャンネルを合成し、指定の形式で出力したもの
- Glossiness:Roughness を反転したもの。Unity の Smoothness に使う
ORM の R にメッシュマップの Ambient occlusion を直接入れると、手で描いた AO が書き出されません。法線にメッシュマップの Normal を直接使うと、Height や Normal チャンネルに描いた凹凸が抜けます。書き出す法線の形式も、プロジェクトの Normal Map Format ではなく、Normal DirectX と Normal OpenGL のどちらを選ぶかで決まります。



Mixed AO と Ambient occlusion、名前が似てて、むずかしいねぇ……。手で描いた AO まで入るのが Mixed AO、って覚えとけばいいのかなぁ。
ORM テンプレートを作る手順
ひとことで:既定の Unreal Engine (Packed) を複製し、R・G・B の中身を確かめてから、自分の規約に合わせて直します。


ここでは Unreal Engine 向けに、R に AO、G に Roughness、B に Metallic を入れた ORM テンプレートを作ります(公式ドキュメントの Create Output templates も参考になります)。
テンプレートを複製する
Output templates タブの左にある Presets list で Unreal Engine (Packed) を選び、一覧の上にある複製ボタン(Duplicate)を押します。複製したテンプレートは、ダブルクリックか右クリックメニューで名前を変えます(例:MyGame_UE_ORM)。ゼロから作るときは、新規作成のボタンで空のテンプレートを追加します。
複製元には、AO・Roughness・Metallic を1枚にまとめた出力マップ(既定の名前は末尾が OcclusionRoughnessMetallic)が入っています。まずその R・G・B に何が割り当てられているかを確かめ、自分の規約と違うところだけを直すのが近道です。



既定のテンプレートを複製して直すだけなら、ゼロから組まなくていいんだぁ。気楽にいこ〜。
出力マップの型を選んで割り当てる
出力マップは、中央の Output maps list の上部にあるボタンで型(Gray、RGB、R+G+B、RGB+A、R+G+B+A)を選んで足します。ORM は、3つのチャンネルに別々のグレースケールを入れる R+G+B です。
右側の一覧から入力マップを、出力マップのスロットへドラッグ&ドロップします。ドロップすると、入力のどの成分を入れるか(RGB、R・G・B の各チャンネル、アルファ、グレースケールへの変換)を選ぶメニューが開きます。ORM では次のように割り当て、それぞれグレースケールとして読み込みます。
- R:Converted maps の Mixed AO
- G:Input maps の Roughness
- B:Input maps の Metallic
Unity HDRP の Mask Map にする場合
Unity HDRP の Mask Map(R に Metallic、G に AO、B に Detail Mask、A に Smoothness)なら、R+G+B+A の出力マップを作り、R に Metallic、G に Mixed AO、A に Converted maps の Glossiness を割り当てます。Detail Mask を使わないなら B は空のままでかまいません(空のスロットには既定色が入ります)。既定の Unity HD Render Pipeline (Metallic Standard) を複製し、中身を確かめてから直すのが安全です。
ファイル名の変数
ひとことで:$mesh と $textureSet で名前を自動で組み立て、規約の接頭辞や接尾辞は文字で書き足します。


$mesh はメッシュファイル名、$textureSet はテクスチャセット名に置き換わる出力マップの名前欄には、書き出し時に置き換わるキーワードを入れられます。キーワードは名前欄の $ ボタンから挿入できます。
| キーワード | 置き換わる内容 |
|---|---|
$project | プロジェクトファイル(.spp)の名前 |
$mesh | 読み込んだメッシュファイル(.fbx など)の名前 |
$textureSet | テクスチャセット(マテリアル)の名前 |
$udim | UDIM の番号 |
$colorSpace | そのチャンネルに使われている色空間の名前 |
/ | フォルダの区切り |
$textureSet は、公式ドキュメントのキーワード一覧では $textureset、作成手順の例では $textureSet と表記されているので、$ ボタンから挿入するのが確実です。
公式ドキュメントの例では、cymourai.fbx のテクスチャセット MaterialBase に対して、$mesh_$textureSet_BaseColor が cymourai_MaterialBase_BaseColor.png になります。$mesh/$textureSet_BaseColor なら、cymourai フォルダの中に MaterialBase_BaseColor.png が作られます。
エンジン側の命名規則に合わせるなら、固定の文字を書き足します。テクスチャ名の先頭に T_ を付ける規約なら T_$textureSet_ORM とします。$textureSet はマテリアル名から作られるので、DCC 側でマテリアル名を規約どおりに付けておくのが近道です(アセット命名・バージョン規則|チームで事故らないルール作り)。
組み込みのテンプレートに見られる (.$udim) のような括弧は、値がないとき(UDIM を使わないプロジェクトなど)に省かれる部分として使われていますが、公式のキーワード一覧には説明がないため、使うときは書き出して確かめてください。ファイル名は英数字とアンダースコアでそろえるのが無難です(12.1.4 で、ASCII 以外の文字を含むファイル名でのクラッシュが修正されています)。
形式・ビット深度・パディング
ひとことで:テンプレートでマップごとに形式を決めたら、Export settings の File type を Based on output template にします。
テンプレートの出力マップには、名前欄の横に形式とビット深度を選ぶドロップダウンがあります。ただし、この設定が書き出しに使われるのは、Export settings タブの File type で Based on output template を選んだときだけです。File type で PNG などを直接選ぶと、すべてのファイルがその形式とビット深度になります。



テンプレートで 16bit にしたのに 8bit で出てくる……ってときは、たいていここだよぉ。気をつけてねぇ。
ゲーム向けでよく使う形式と、選べるビット深度は次のとおりです(公式ドキュメントの Export settings から抜粋)。
| 形式 | 選べるビット深度 |
|---|---|
| PNG | 8、8 + dithering、16 |
| TGA | 8、8 + dithering |
| OpenEXR | 16 (floating)、32 (floating) |
- BaseColor と ORM:8bit が基本です。公式ドキュメントも、ゲームエンジンは多くの場合 8bit に圧縮すると説明しています
- 法線と Height:8bit では段(バンディング)が出やすいので、16bit にするか、8 + dithering でノイズを加えて段を目立たなくします。ディザリングが効くのは 8bit で書き出す Normal、Displacement、Height だけです
- ベイクしたメッシュマップ:内部では 16bit で生成されるため、32bit にしても精度は上がりません


設定には上書きの階層があります。Global settings が全テクスチャセット共通の基本で、左の一覧でテクスチャセットを選ぶとそのセットだけ解像度などを上書きでき、表示される Output maps の一覧では、ファイルごとに書き出しの有無や形式、ビット深度も変えられます。
Padding は UV アイランドの外側の埋め方で、No padding (passthrough)、Dilation infinite、Dilation + transparent、Dilation + default background color、Dilation + diffusion から選びます。ミップマップで縮小されるゲーム用テクスチャには、縁を外側へ延ばす Dilation infinite か Dilation + diffusion が向いています。余白を透明にする Dilation + transparent は、アルファを使わない ORM には不向きです。
ORM の値は色ではなくデータなので、エンジンでは sRGB を切って Linear として読み込みます(DCC→エンジンの色合わせ|リニア・sRGB・色空間の実務)。
テンプレートの保存場所とチーム共有
ひとことで:テンプレートは .spexp ファイルとして配り、プロジェクトに埋め込まれた古い版との食い違いに注意します。


自作のテンプレートは、Export Preset のファイル(拡張子 .spexp)として1つずつ保存されます。Windows での保存先は次のとおりです(7.2 以降。一覧は公式ドキュメントの Adding content on the hard drive)。
C:\Users\ユーザー名\Documents\Adobe\Adobe Substance 3D Painter\assets\export-presets
チームで同じテンプレートを使う方法は3つあります。
- ファイルを配る:.spexp を各メンバーの export-presets フォルダへコピーする。バージョン管理(Git や SVN)に置けば変更の履歴も残る
- 共有ライブラリに置く:Edit > Settings > Libraries で共有フォルダをライブラリとして追加すると、既定と同じフォルダ構成が作られる。その export-presets フォルダに .spexp を置き、全員で同じ場所を参照する(追加はプロジェクトを開いていない状態で行う)
- プロジェクトに埋め込む:テンプレートを使って書き出すと、次の保存からプロジェクトファイルに含まれ、別の PC でも同じテンプレートで書き出せる
埋め込まれるのは最後に使ったテンプレートだけで、同じ名前のテンプレートがローカルにもあると、プロジェクト内の方は一覧で Outdated と表示されます。テンプレートを更新したら配布側の .spexp を差し替え、各プロジェクトで一度書き出し直して埋め込みも新しくしておきます。なお、Output templates タブでの削除は元に戻せません。



.spexp を配っておけば、みんな同じ名前・同じ詰め方で書き出せるよぉ。ほら、便利でしょ?
書き出して中身を確かめる
ひとことで:テンプレートを作ったら一度書き出し、R・G・B を1チャンネルずつ見て確かめます。
作ったテンプレートを Export settings で選び、File type を Based on output template にして Export を押します。List of exports でファイル名とエラーを確かめたら、ORM を画像編集ソフトで開き、チャンネルを1つずつ表示します。R(AO)は溝やすき間が暗い、G(Roughness)はツヤのある部分が暗い、B(Metallic)は金属の部分だけが白い、が正しい状態です。
よくある失敗と対処
ひとことで:多くは「入力の取り違え」「形式設定の見落とし」「古いテンプレートの残り」のどれかです。
| 症状 | 主な原因 | 対処 |
|---|---|---|
| エンジンでツヤが反転している | Unreal Engine 向けの G に Glossiness、Unity 向けの A に Roughness を入れた | Unreal Engine の ORM は Roughness、Unity の Smoothness は Glossiness |
| 手で描いた AO や凹凸が書き出されない | メッシュマップの Ambient occlusion や Normal を直接使った | Mixed AO、Normal DirectX/Normal OpenGL に替える |
| 凹凸が逆に見える | エンジンと違う形式の法線を書き出した | Unreal Engine は Normal DirectX、Unity は Normal OpenGL |
| 決めた形式やビット深度にならない | File type が Based on output template でない | Export settings の File type を切り替える |
| 更新したテンプレートが反映されない | 古い .spexp や埋め込まれた版が使われている | 配布ファイルを差し替え、Outdated 表示を確かめる |
| ユーザーチャンネルの中身が空 | 表示名で探している | 元の名前(user_x)のチャンネルを割り当てる |
| エンジンでだけ粗さが違って見える | ORM を sRGB のまま読み込んでいる | エンジンで sRGB を切る |



Unreal Engine 向けの G に Glossiness を入れちゃうと、ツヤが真逆になっちゃうの。ほんと、ダメだよ。書き出したら、チャンネルごとの確認までがセットだからね。
チェックリスト
- 規約(Unreal Engine の ORM か、Unity の Mask Map か)に合うテンプレートを、既定の複製から作った
- AO は Mixed AO、法線は Normal DirectX か Normal OpenGL を割り当てた
- 出力マップの名前に
$mesh・$textureSetと、規約の接頭辞や接尾辞を入れた - 形式とビット深度をマップごとに決め、File type を Based on output template にした
- .spexp の置き場所(配布、共有ライブラリ、バージョン管理)を決めた
- 一度書き出して、チャンネルごとに中身を確かめた
次に読む記事
- チャンネルパッキング戦略|UE/Unityのテクスチャを軽くする設計:ORM と Mask Map の規約
- DCC→エンジンの色合わせ|リニア・sRGB・色空間の実務:パックしたテクスチャを Linear で扱う理由
- Substance 3D PainterのHigh to Lowベイク実務:書き出す前のメッシュマップを正しく焼く
- Substance 3D PainterのPBR入門:チャンネルに正しい値を塗る
- Substance 3D PainterのPython自動化:書き出しをスクリプトにする



ふぁ……テンプレートを1個作って、チャンネルごとに中身を確かめる。これだけで事故はだいぶ減るはず……かなぁ。書き出しを自動にしたくなったら、Python の記事も見てねぇ。





