Adobe Substance 3D Painter(以下 Painter)でテクスチャを作るときの最初の関門が、ハイポリのディテールをローポリへ焼き付ける High to Low ベイクです。本記事では、ハイポリの読み込みから名前一致、レイの距離とケージ、法線の平均化、典型的なアーティファクトの対処まで、Painter の画面での手順を解説します。
対象は執筆時点(2026年9月)の最新版 Painter 12.1(12.1.5)です。ベイクの画面は 12.1 で改修されており、11.x 以前とはパネルの名前や配置が違う箇所があります(バージョンによって表記が異なります)。High/Low/Cage の考え方は ベイク全体論|MayaとPainterの責任分界とエラー対処、法線マップの規約は ノーマルマップとタンジェント空間|DCCとエンジンで一致させる で扱っているので、本記事は Painter での操作に絞ります。
夕宮たいだふぁ……みんな〜、今日は Painter でハイポリを焼き付ける実務の話だよぉ。考え方はベイク全体論の記事にまかせて、ここでは画面のどこを触るかに集中していこ〜。
準備するデータ
ひとことで:ローポリとハイポリは「同じ位置・同じ単位・そろった名前」で用意します。
Painter に渡す前に、DCC 側でデータを次の状態にしておきます。
- ローポリ:UV 展開済み。頂点法線が意図どおりで、法線の情報を含めて書き出す
- ハイポリ:ローポリと同じ原点・同じ単位で重なり、移動・回転・スケールはリセット済み
- 名前:ローポリのメッシュ名に
_low、対応するハイポリに_highを付ける - 三角化:エンジンに入れるメッシュと同じ三角形の分け方にする
- ケージ(使う場合のみ):ローポリを膨らませた複製で、頂点数はローポリと同じ
DCC 側の操作は Mayaのスムージングと頂点法線 と MayaのFBXエクスポートと座標系トラブル で扱っています。
焼く前に決めるプロジェクト設定
ひとことで:法線マップの形式とタンジェントの計算方法を、焼く前に出力先のエンジンへ合わせます。
File > New の新規プロジェクト画面には、ベイク結果に直接効く設定が2つあります。
- 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 では有効、それ以外の Unity では無効です
Painter のタンジェント空間は常に MikkTSpace です。ローポリの FBX にタンジェントとバイノーマルがあればそれを使い、なければ MikkTSpace で計算します。エンジン側も同じ方針にそろえてください。
どちらもあとから Edit > Project configuration で変えられますが、変えたらメッシュマップの焼き直しが必要です。書き出すファイルの法線形式は、書き出し用テンプレートで Normal DirectX と Normal OpenGL のどちらを使うかで決まります(Substance 3D Painterのチャンネルパック|ORM書き出し設定 で解説)。
もう1つ、焼く前に確かめたいのが三角化です。四角ポリゴンを三角形に分ける方法には決まった正解がなく、ベイカーとエンジンで分け方が違うと、法線マップとメッシュが食い違って黒い影が出ます。公式ドキュメントの Triangulating before baking も、ベイク前にローポリを三角化しておくことを推奨しています。三角化したメッシュで焼き、同じメッシュをエンジンに入れてください。
ベイクモードでの基本手順
ひとことで:F8 でベイクモードに入り、焼く対象、メッシュマップ、共通設定の順に決めてから Bake を押します。
ベイクモードに入る
Mode > Bake Mesh Maps を選ぶか、F8 キーを押します(ビューポート右上のクロワッサン形のアイコンでも切り替えられます)。画面には、焼くマップを選ぶ Mesh map bakers、全マップ共通の Common settings、マップ固有の設定、結果とエラーを表示する Baking log が並びます。
焼く対象とメッシュマップを選ぶ
Texture Set list のチェックボックスで焼くテクスチャセット(UV タイルを使う場合はタイル)を選び、Mesh map bakers で焼くマップにチェックを入れます。選べるのは Normal、World space normal、ID、Ambient occlusion、Curvature、Position、Thickness、Height、Bent normals、Opacity です。
12.1 の一覧では、マップごとに、ビューポートでのプレビュー(Visualize)、そのマップだけの焼き(Quick bake)、設定を変えるたびの自動リベイク(Auto-rebake)、テクスチャセット間での設定の同期(Synchronize)をボタンで操作できます。
Common settings を詰める
Common settings では、出力とハイポリに関する設定をまとめて決めます。
- Output size:焼くマップの解像度。鍵のアイコンをクリックすると、縦横で別の値にできる
- Dilation width/Apply diffusion:焼いた情報を UV アイランドの外へ延ばす幅と、外側を縁の色でなめらかに埋めるかどうか
- Antialiasing:アンチエイリアスの強さ。8.3 以降は Supersampling の倍率で選ぶ表記
- High definition meshes:ハイポリのファイルを追加する欄。複数のファイルを登録できる
- Cage:Distance based、Automatic (experimental)、Custom file の3方式(後の章で解説)
- Match と接尾辞の欄:名前一致の設定(次の章で解説)
- Ignore backface:裏面(バックフェース)を無視して焼くかどうか
ハイポリを使わずローポリ自身から焼くときは、Use Low poly mesh as high poly mesh を有効にします。ハイポリが重いときは、Baking visualization settings の High definition mesh にある Mesh の表示を切ると、表示用のメモリから外せます。
Antialiasing は計算時間に直結し、公式ドキュメントによると 2×2 相当でレイが4倍、8×8 相当で64倍になります。AO など二次レイを使うマップは、Antialiasing より二次レイ(Secondary rays)を増やすほうが効率がよく、2×2 相当と128本以上の二次レイの組み合わせが推奨されています。
焼いてログを確かめる
ビューポート下部の Bake ボタンには、焼く枚数(テクスチャセット数 × UV タイル数 × メッシュマップ数)が表示されます。焼き終わったら Baking log でエラーや警告を確かめます。ハイポリのファイルが見つからない、壊れているといった読み込みの失敗もここに出ます。
_low と _high の名前一致
ひとことで:_low と _high より前の部分が完全に一致したメッシュだけが、同じ組として焼かれます。
Match の初期値は Always で、ローポリはレイが届いたハイポリをすべて拾うため、近接するパーツが写り込みます。Match を By mesh name にすると、名前で組になったハイポリだけが焼かれます。照合のルールは公式ドキュメントの Matching by Name にまとまっています。
- 見るのはオブジェクト(メッシュ)の名前で、マテリアル名ではない
- 既定の接尾辞は
_lowと_high。Low poly mesh suffix/High poly mesh suffix で変えられる - 大文字と小文字は区別される
- 接尾辞より前が一致すれば組になり、接尾辞の後ろの文字は照合に影響しない
| ローポリの名前 | 組になるハイポリ | 組にならないハイポリ |
|---|---|---|
body_low | body_high、body_high_top、body_high_1 | body-high、body_top_high |
Head_low | Head_high | head_high |
Leg_low_top | Leg_high、Leg_high_top | Leg_top_high |



ほよ? _high の後ろに番号が付いてても組になるんだぁ。ハイポリを細かく分けてても、前半の名前さえそろえればいいってことだねぇ。
組はテクスチャセット(マテリアル単位)とは別に、メッシュ名ごとに作られます。ZBrush の OBJ は、サブツールのグループ(Grp)出力を切り、body_high.obj のようにファイル名で照合させます。
Baking log では、名前一致で組になったメッシュ名の一覧も確かめられます。狙いどおりの組になっているかは、焼き上がりを眺める前にここで確かめるのが確実です。
レイの距離とケージの決め方
ひとことで:まず Distance based で取りこぼしをなくし、それでも歪む場所だけをケージやスキュー補正で直します。


ベイカーはローポリの表面からレイを飛ばし、ハイポリに当たった場所の情報を読み取ります。Cage の3方式は、このレイの範囲と向きの決め方の違いです。
| 方式 | レイの範囲の決め方 | 向いている場面 |
|---|---|---|
| Distance based | ローポリを一定の距離だけ膨らませた仮想の囲い | 最初に試す標準の方式 |
| Automatic (experimental) | Painter がメッシュを解析し、表面に近く交差の少ない囲いを自動で作る | 距離の調整だけでは決まらない形状 |
| Custom file | DCC で作ったケージのファイル | 場所ごとに範囲を細かく制御したいとき |
Automatic は実験的な機能(11.0 で追加)なので、結果を必ず確かめてください。Custom file のケージは、ローポリと頂点数が同じでないと正しく機能しません。
Distance based の4つの設定
- Max frontal distance:ローポリの表面からどれだけ外側をレイの始点にするか。ビューポートにケージとして表示されるのはこの距離
- Max rear distance:表面からどれだけ内側でレイを打ち切るか
- Relative to bounding box:有効だと距離はローポリのバウンディングボックスを基準にした相対値、無効だと書き出し時の単位。寸法が決まったアセットは、無効にして実寸で入れたほうが扱いやすい場合がある
- Average normals:有効だとレイの向きに平均化した頂点法線を使う。無効だと元の頂点法線に沿うため、ハードエッジで囲いが裂けて情報が抜けることがある
ビューポートで取りこぼしを見る
ビューポート左上の Baking visualization settings で Matching error を表示すると、ケージの外にはみ出したハイポリが色付きで示されます(初期状態は赤)。Max frontal distance を少しずつ上げ、この色が消えたところが目安です。同じパネルの Missing seams on hard edges では、UV シームのないハードエッジが強調されます。



ぁぅ……赤いのが消えないからって距離をどんどん上げると、今度は隣のパーツまで拾っちゃうんだぁ。名前一致とセットで使ってねぇ。
レイが遠くまで届くほど、隣のパーツや反対側の面に当たりやすくなります。名前一致で対象を絞り、距離は取りこぼしが消える最小限にとどめるのが基本です。
スキュー補正をペイントする
Average normals を有効にするとハードエッジでもレイが途切れませんが、ベベルの近くでは平均化された向きが面に対して斜めになり、ボルトや溝のディテールが傾いて焼き付くことがあります。これがスキュー(歪み)です。12.1 からは、ローポリの上に補正を直接塗ってレイの向きを直せます。使える条件は次の3つです。
- ハイポリを読み込んでいる(Use Low poly mesh as high poly mesh ではない)
- Cage が Distance based
- Average normals が有効
Common settings の Paint skew correction を押すと補正のペイントに入り、Normal の自動リベイクが有効になります。ブラシ、消しゴム、ポリゴン塗りつぶしが使え、X キーで塗る値を反転できます。ビューポートに表示される線は、赤が補正なし(平均化された既定の向き)、緑が完全に補正された状態(面に垂直な向き)です。傾いた面を塗り、自動リベイクの結果を見ながら範囲を詰めます。
Edge protection を有効にすると、ハードエッジの近くでは塗った補正が弱められ、ハードエッジに焼き付くハイポリの柔らかい丸みが保たれます。効く範囲は Edge distance、境目のぼかし具合は Edge contrast で調整します。



ケージを作り直さなくても、斜めになったところだけ塗って直せるんだよぉ。ほら、便利でしょ?
マップ別に確認したい設定
ひとことで:AO・Thickness・Bent normals は二次レイにも名前一致の設定があり、共通設定だけでは足りません。
Ambient occlusion、Thickness、Bent normals は、二次レイを飛ばして遮蔽を計算します。二次レイには Match とは別の名前一致の設定があるため、Match を By mesh name にしても、隣のパーツの影が AO に乗ることがあります(公式ドキュメントの Why is Matching by Name not working with Ambient Occlusion/Thickness?)。各マップの設定にある Self occlusion を、同じ名前のメッシュだけを対象にする設定(Only Same Mesh Name。バージョンによって表記が異なります)に切り替えます。
本体から離して置いたボタンなどの「浮かせた」ハイポリは、法線マップには問題なく焼けますが、AO では下の面に影を落とします。浮かせたハイポリの名前に _ignorebf を付け(例:button_high_ignorebf)、AO の Ignore backface を名前で判定する設定(By Mesh Name)にすると、その部分の裏面が無視されます。
よくある失敗と対処
ひとことで:症状を「重なり」「距離」「法線」「解像度」「三角化」のどれが原因かに切り分けます。


公式ドキュメントの Common Issues をもとに、よく出る症状と対処をまとめます。
| 症状 | 主な原因 | 対処 |
|---|---|---|
| 法線マップにカラフルなグラデーション | ハイポリとローポリのずれ、ハイポリの欠け、法線の反転 | 変形をリセットして重なりと Baking log の組を確かめる |
| 別パーツの形が写り込む | レイが遠くまで届きすぎている | 名前一致、ケージ、距離を下げる |
| 面ごとにカクカクして見える | ローポリの全エッジがハードエッジ | 頂点法線をなめらかにし、法線の情報を含めて書き出す |
| UV シームのない辺にも継ぎ目 | 分割された頂点法線で、辺の両側のレイの向きが割れている | Average normals かケージで向きを制御する。または頂点法線を結合する |
| UV シームに沿った点々やギザギザ | エイリアシング | 解像度か Antialiasing を上げる。UV の縁をピクセルにそろえる |
| ボルトや溝が傾いて焼ける | ベベル付近の平均化された法線が斜め | スキュー補正を塗る、ケージを調整する |
| エンジンで黒い十字状の影 | 三角化、タンジェント空間、法線形式の食い違い | ベイク前に三角化し、設定をエンジンとそろえる |
| AO に他のパーツの影が乗る | 二次レイの名前一致が無効 | Self occlusion を同名のみにする。浮かせたパーツは _ignorebf |
| 焼いた直後にモデルが真っ黒 | 焼いたマップ(多くは AO)が真っ黒 | 焼きの設定を見直す。Texture Set Settings から黒いマップを外す |
| UV の外側に伸びた線や色のにじみ | Dilation と Diffusion による正常な処理 | 対処は不要 |



エンジンに入れるメッシュと、焼いたときのメッシュで三角形の分け方が違うの、絶対ダメだよ。見た目は同じでも、影がぐちゃってなるんだから。
チェックリスト
- Normal Map Format と Compute Tangent Space Per Fragment が、出力先のエンジンに合っている
- ローポリをベイク前に三角化し、同じメッシュをエンジンに入れる
- ハイポリとローポリが、同じ原点・同じ単位で重なっている
_low/_highより前の名前が大文字と小文字まで一致し、Baking log で組を確かめた- 距離は Matching error が消える最小限にし、傾いたディテールはスキュー補正かケージで直した
- AO・Thickness・Bent normals の Self occlusion を確かめた
次に読む記事
- ベイク全体論|MayaとPainterの責任分界とエラー対処:High/Low/Cage の考え方
- ノーマルマップとタンジェント空間|DCCとエンジンで一致させる:DirectX/OpenGL と MikkTSpace
- Substance 3D Painterのメッシュマップとベイク入門:各メッシュマップの役割
- Substance 3D Painterのチャンネルパック|ORM書き出し設定:焼いた結果をまとめて書き出す
- Mayaのスムージングと頂点法線:ハードエッジと UV シームの運用
- UVとテクセル密度の設計|チームで品質を揃える数値基準:エイリアシングを減らす UV の考え方



ふぁ……名前をそろえて、距離は最小限、斜めになったら塗って直す。これでだいたい焼けるはず……かなぁ。焼いたあとの書き出しは、チャンネルパックの記事で続きをやろうねぇ。





