Adobe Substance 3D Painter(以下 Painter)で PBR(物理ベースレンダリング)のテクスチャを作るときに、どこで何を決め、塗った値をどう確かめ、どう書き出すかを、操作の順番で整理します。理論は「PBRの理論|物理ベースの3原則とマップの値域・典型的な誤値を解説」と「DCC→エンジンの色合わせ|リニア・sRGB・色空間の実務」に任せ、本記事は Painter での手順に絞ります。
夕宮たいだふぁ……みんな〜、今日は Painter で PBR をちゃんと塗るお話だよぉ。理論はなんとなく分かったけど、画面のどこを触ればいいの?ってところを、一緒に見ていこ〜。
この記事の前提
ひとことで:Painter 12.1 の英語UIで、ゲームエンジン向けのメタル/ラフネスを説明します。
- 対象バージョン:Adobe Substance 3D Painter 12.1(2026年9月時点の最新は 12.1.5)。項目名は英語UIの表記で、バージョンによって表記が異なります(日本語UIへは Edit > Settings の Language で切り替え可能)
- 12.1 の変更:新規プロジェクトの既定シェーダーが、ツール間で材質を受け渡すための共通モデルである OpenPBR になりました(Adobe の OpenPBR 解説)
- 扱わない範囲:ノーマルや AO を焼く手順は「Substance 3D Painterのメッシュマップとベイク入門」で扱います
手順は Adobe の公式ドキュメント(Project Creation、Texture Set settings、Export settings、12.1 のリリースノート)に基づいています。
Painter で PBR の見た目を決める3つの部品
ひとことで:シェーダー・チャンネル・メッシュマップの3つで、ビューポートの見た目が決まります。
- シェーダー:チャンネルの値の読み方と光の当て方を決めます。Shader Settings(Window > Views から表示)で確認します
- チャンネル:Base Color・Metallic・Roughness・Normal・Height など、レイヤーで塗る情報の入れ物です。Texture Set Settings で管理します
- メッシュマップ:モデルの形から焼いた Normal や AO などです。焼いた Normal と Normal チャンネル、焼いた AO と Ambient Occlusion チャンネルは、それぞれ合成されて表示されます
理論編のマップとの対応は次のとおりです。
| 理論上のマップ | Painter での置き場所 | 値の扱い | 主な書き出し先 |
|---|---|---|---|
| BaseColor | Base Color チャンネル | 色(sRGB) | Base Color |
| Metallic | Metallic チャンネル | データ(リニア) | Metallic またはパック済みテクスチャ |
| Roughness | Roughness チャンネル | データ(リニア) | Roughness またはパック済みテクスチャ |
| Normal | Normal チャンネル+焼いた Normal | データ(リニア) | Normal DirectX / Normal OpenGL(合成済み) |
| AO | Ambient Occlusion チャンネル+焼いた AO | データ(リニア) | Mixed AO(合成済み)など |





ほよ? Normal と AO って、焼いたマップとチャンネルが合成されてたんだぁ。書き出しのときに「Mixed AO」って名前が出てくるのは、そういうことなんだねぇ。
プロジェクト作成:テンプレートと法線の規約を決める
ひとことで:File > New の時点で、エンジンに合わせたテンプレートと法線の規約を選びます。
File > New(Ctrl+N)で開く New project ウィンドウで、次の項目を確認します。
- File:塗る3Dモデル(ローポリ)を指定します。モデルのマテリアルごとに Texture Set が作られます
- Template:シェーダーやチャンネルなどの初期値をまとめたひな形です。テンプレートなしで作ると OpenPBR シェーダーになります(12.1 以降)。ゲームエンジン向けなら、エンジン名やメタル/ラフネス(Metallic Roughness)を含むテンプレートを選びます。テンプレート名はバージョンによって表記が異なります
- Resolution:Texture Set ごとの初期解像度です。作業中は 4096、書き出し時は 8192 まで扱えます
- Normal Map Format:DirectX(X+, Y-, Z+)か OpenGL(X+, Y+, Z+)を選びます。公式の推奨は Unreal Engine が DirectX、Unity が OpenGL です
- Compute Tangent Space per Fragment:推奨は Unreal Engine が有効、Unity が無効(HDRP を使う場合は有効)です
- Color management:既定は Legacy です。OCIO や Adobe ACE の運用が決まっていなければ、そのままで構いません
法線の2項目は Edit > Project configuration で後から変えられますが、変えたらメッシュマップの焼き直しが必要です。作成後は Shader Settings でシェーダーを確かめ、設定をチームで共有するなら File > Save as template でテンプレートにします。
Texture Set Settings でチャンネルを確認する
ひとことで:塗る前に、チャンネルの構成・保存形式・合成方法を確認します。
Texture Set Settings(Window > Views から表示)には、解像度(Size)、シェーダー(Shader instance)、チャンネルの一覧がまとまっています。
- チャンネルの追加:Add channel ボタンから、シェーダーが使うチャンネル(Supported channels)や User channels を追加します。12.1 では Add or remove channels ボタンから複数をまとめて追加・削除できます
- 保存形式:sRGB8・L8・L16F などは保存の精度の設定で、色空間の指定ではありません。Roughness はデータとして、Base Color はガンマ補正された色として扱われます
- Mixing settings:Normal mixing は既定が Combine(焼いた Normal とチャンネルを合成)、Ambient occlusion mixing は既定が Multiply(乗算)、Height to normal method は既定が Smooth (Sobel) です
AO は Base Color とは別の経路で合成されるので、くぼみの陰影を Base Color に塗り込む必要はありません。
Base Color・Metallic・Roughness を正しい値で塗る
ひとことで:値は数値で入れ、素材の違いは Fill レイヤーとマスクで分けます。
素材ごとに Fill レイヤーを作り、マスクで範囲を分けるのが基本です。Properties の Material にあるチャンネルボタンは、選択を外すとそのレイヤーでは使われないので、「Roughness だけを上げる手あか」のような部分的なレイヤーも作れます。
- Base Color:カラーピッカーのスライダー設定で Floating point values をオフにすると、RGB を 0〜255 で読めます(16進数の欄は sRGB)。非金属は理論編の目安どおり sRGB 8bit で 30〜240 に収め、金属は金・銅・鉄などの反射の色そのものを入れます
- Metallic:金属は 1、非金属は 0 の二値が基本です。錆びた鉄のような混在は 0.5 で塗らず、マスクで範囲を分けて切り替えます
- Roughness:0 が鏡面、1 が完全なマットです。0 や 1 ちょうどの値は避けます。Glossiness が必要な場合は、書き出しテンプレート側で反転して出力します
- Normal と Height:細かい凹凸は Height チャンネルに塗ると、法線に変換されて反映されます。外部で作ったノーマルマップを読み込むと DirectX 形式として扱われるので、OpenGL 形式のものはプロパティで形式を切り替えます



金属なのに Base Color を真っ黒にしたり、Metallic を 0.5 で塗ったり……絶対ダメだよ! 錆や汚れは、マスクで範囲を分けるのが Painter のやり方なんだぁ。
値を確かめる:ソロ表示と PBR Validate
ひとことで:ライティング込みの見た目ではなく、チャンネル単体の表示とフィルターで検査します。
- ソロ表示:C キーで次のチャンネル、Shift+C で前のチャンネルを単体で表示し、M キーでマテリアル表示に戻ります。B キーは焼いたメッシュマップの表示です
- 陰影なしで見る:Display Settings の Viewport settings で Display solo view without lighting (unlit) を有効にします。Color channels で R・G・B・Alpha を1つずつ表示することもできます
- 値を拾う:ビューポートでスポイトを使うときに Shift を押すと、表示色ではなく編集中のチャンネルの値をそのまま拾えます
Metallic は白と黒がくっきり分かれているか、Roughness は素材ごとに意図したグレーの段差があるかを見ます。データチャンネルのソロ表示では、カラーマネジメントの変換は自動で無効になります。
色の範囲の検査には PBR Validate フィルターが使えます。Assets ウィンドウから、レイヤースタックの一番上へドラッグ&ドロップします。判定は目安として扱い、確認が済んだら非表示にするか削除してから書き出します。
ビューポートとエンジンの見え方をそろえる
ひとことで:環境マップ・トーンマッピング・カラーマネジメント・法線の規約の4点をそろえてから比べます。
Painter とエンジンの見え方のズレは、値そのものより表示条件の違いから生まれることがほとんどです。比べる前に、次の4点をそろえます。
| 確認項目 | Painter 側の場所 | そろえ方 |
|---|---|---|
| 環境マップ | Display Settings の Environment Map | 同じか近い HDRI で比べる。付属の環境マップなら Environment Exposure は 0 のまま |
| トーンマッピング | Display Settings のポストエフェクト(Tone mapping) | エンジンと同じ系統(ACES など)にするか、両方で無効にして比べる |
| カラーマネジメント | Edit > Project configuration の Color management | Legacy か OCIO / ACE かをチームで統一する |
| 法線の規約 | Normal Map Format と Compute Tangent Space per Fragment | エンジンの推奨値に合わせ、変えたら焼き直す |
ポストエフェクトは 12.0 で刷新されたため、トーンマッピングの項目はバージョンによって表記が異なります。環境マップは Shift を押しながら右ボタンでドラッグすると回転できます。ライティングの差の切り分け方は「ライティング基礎|DCCとエンジンの差を切り分ける実践ガイド」が参考になります。





トーンマッピングとカラーマネジメント、似た言葉が並んでむずかしいねぇ……。まずは「同じ HDRI、同じトーンマッパーで並べて見る」だけ覚えとけば大丈夫だよぉ。
テクスチャを書き出す
ひとことで:File > Export Textures で出力テンプレートを選び、Output maps を確認して書き出します。
File > Export Textures(Ctrl+Shift+E)で Export ウィンドウを開き、Export settings タブで次の項目を設定します。
- Output directory:書き出し先のフォルダーです
- Output template:チャンネルをどんな名前・組み合わせでファイルにするかを決めます。Unreal Engine (Packed)、Unity Universal Render Pipeline (Metallic Standard)、PBR Metallic Roughness などが用意されています
- File type:ファイル形式とビット深度です(png なら 8bit か 16bit など)
- Size:Based on each Texture Set’s size を選ぶと、各 Texture Set の解像度で書き出します
- Padding:UV の外側の埋め方です。Dilation infinite などで埋めておくと、ミップマップで境界の色がにじみません
- Dithering:8bit で書き出すときの階調の段差を目立たなくします。Normal や Height で特に効果があります
Texture Set を選ぶと、Output maps の欄に書き出されるファイルの一覧が並びます。名前・形式・ビット深度は、書き出す前にここで確認します。12.1 では命名規則のドロップダウンが加わり、OpenPBR シェーダーを使うプロジェクトでは OpenPBR の命名が既定になります。
エンジンに読み込むときは、Base Color のような色のテクスチャを sRGB、Metallic・Roughness・Normal・AO のようなデータのテクスチャをリニアとして設定します。ORM などのパック構成は「チャンネルパッキング戦略|UE/Unityのテクスチャを軽くする設計」と「Substance 3D Painterのチャンネルパック」で扱います。



エンジン名のテンプレートを選ぶだけで、ファイル名もチャンネルの詰め方もそろうんだよぉ。ほら、便利でしょ? でも Output maps の一覧だけは、毎回ちゃんと見てねぇ。
よくある失敗と対処
ひとことで:症状から、プロジェクト設定・値・表示条件のどこに原因があるかを切り分けます。
| 症状 | 主な原因 | 対処 |
|---|---|---|
| エンジンで凹凸が逆に見える | Normal Map Format がエンジンの規約と違う | Edit > Project configuration で合わせ、焼き直してから書き出し直す |
| 金属がプラスチックのように見える | Metallic が 1 でない、または Base Color が暗すぎる | ソロ表示で確かめて金属部を 1 にし、Base Color に反射の色を入れる |
| くぼみが不自然に暗い | 陰影を Base Color に塗り込み、AO と二重にかかっている | 陰影は AO に任せ、Base Color から除く |
| 読み込んだノーマルマップの凹凸がおかしい | OpenGL 形式のものを DirectX として読んでいる | Fill レイヤーやツールのプロパティで形式を切り替える |
| Painter とエンジンで色の印象が違う | 表示条件やエンジン側の sRGB 設定の不一致 | 4点の表示条件と、エンジン側の sRGB 設定を確認する |



ぁぅ……凹凸が逆のまま気づかずに渡しちゃうの、けっこうあるんだぁ。書き出したら、一度はエンジンで表示して確かめてねぇ。
チェックリスト
ひとことで:書き出しの前に、次の項目を確認してください。
- Normal Map Format と Compute Tangent Space per Fragment が、エンジンの推奨値になっている
- Shader Settings で、意図したシェーダーが割り当たっている
- 非金属の Base Color が sRGB 8bit で 30〜240 程度に収まっている
- Metallic が 0 と 1 の二値で、混在はマスクで分けている
- くぼみの陰影を Base Color に塗り込んでいない
- ソロ表示と PBR Validate で確認し、検査用のフィルターを外した
- Output maps で、名前・形式・ビット深度を確認した
- エンジン側で、色のテクスチャだけを sRGB として読み込んでいる
次に読む記事
- PBRの理論|物理ベースの3原則とマップの値域・典型的な誤値を解説:値の目安の根拠
- DCC→エンジンの色合わせ|リニア・sRGB・色空間の実務:エンジン側の色空間とトーンマッピング
- Substance 3D Painterのメッシュマップとベイク入門:Normal や AO を焼く手順
- Substance 3D Painterのチャンネルパック:パック済みテクスチャの出力テンプレート
- ノーマルマップとタンジェント空間|DCCとエンジンで一致させる:DirectX と OpenGL の規約の背景



ふぁ……おつかれさま〜。「法線の規約は最初に決める」「値は数値で入れてソロ表示で見る」「書き出しは Output maps を確認する」、この3つで大丈夫……かな? 次はベイクの記事で待ってるよぉ。





