Substance 3D PainterのPBR入門|正しい値の塗り方と書き出し

Substance 3D PainterのPBR入門|正しい値の塗り方と書き出し

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 での置き場所値の扱い主な書き出し先
BaseColorBase Color チャンネル色(sRGB)Base Color
MetallicMetallic チャンネルデータ(リニア)Metallic またはパック済みテクスチャ
RoughnessRoughness チャンネルデータ(リニア)Roughness またはパック済みテクスチャ
NormalNormal チャンネル+焼いた Normalデータ(リニア)Normal DirectX / Normal OpenGL(合成済み)
AOAmbient Occlusion チャンネル+焼いた AOデータ(リニア)Mixed AO(合成済み)など
Substance 3D Painter のチャンネルとメッシュマップが書き出しにつながる流れ
図1:Normal と 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 managementLegacy か OCIO / ACE かをチームで統一する
法線の規約Normal Map Format と Compute Tangent Space per Fragmentエンジンの推奨値に合わせ、変えたら焼き直す

ポストエフェクトは 12.0 で刷新されたため、トーンマッピングの項目はバージョンによって表記が異なります。環境マップは Shift を押しながら右ボタンでドラッグすると回転できます。ライティングの差の切り分け方は「ライティング基礎|DCCとエンジンの差を切り分ける実践ガイド」が参考になります。

Painter とゲームエンジンで表示条件をそろえる4つの項目
図2:比べる前に、環境マップ・トーンマッピング・カラーマネジメント・法線の規約をそろえる
夕宮たいだ

トーンマッピングとカラーマネジメント、似た言葉が並んでむずかしいねぇ……。まずは「同じ 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 として読み込んでいる

次に読む記事

夕宮たいだ

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

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次