Substance 3D PainterのHigh to Lowベイク実務

Substance 3D PainterのHigh to Lowベイク実務

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_lowbody_high、body_high_top、body_high_1body-high、body_top_high
Head_lowHead_highhead_high
Leg_low_topLeg_high、Leg_high_topLeg_top_high
夕宮たいだ

ほよ? _high の後ろに番号が付いてても組になるんだぁ。ハイポリを細かく分けてても、前半の名前さえそろえればいいってことだねぇ。

組はテクスチャセット(マテリアル単位)とは別に、メッシュ名ごとに作られます。ZBrush の OBJ は、サブツールのグループ(Grp)出力を切り、body_high.obj のようにファイル名で照合させます。

Baking log では、名前一致で組になったメッシュ名の一覧も確かめられます。狙いどおりの組になっているかは、焼き上がりを眺める前にここで確かめるのが確実です。

レイの距離とケージの決め方

ひとことで:まず Distance based で取りこぼしをなくし、それでも歪む場所だけをケージやスキュー補正で直します。

Max frontal distance と Max rear distance がレイの範囲を決める断面図
図1:レイは外側の距離から内側の距離までを探す。外にはみ出したハイポリは焼かれない

ベイカーはローポリの表面からレイを飛ばし、ハイポリに当たった場所の情報を読み取ります。Cage の3方式は、このレイの範囲と向きの決め方の違いです。

方式レイの範囲の決め方向いている場面
Distance basedローポリを一定の距離だけ膨らませた仮想の囲い最初に試す標準の方式
Automatic (experimental)Painter がメッシュを解析し、表面に近く交差の少ない囲いを自動で作る距離の調整だけでは決まらない形状
Custom fileDCC で作ったケージのファイル場所ごとに範囲を細かく制御したいとき

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)にすると、その部分の裏面が無視されます。

よくある失敗と対処

ひとことで:症状を「重なり」「距離」「法線」「解像度」「三角化」のどれが原因かに切り分けます。

ベイクでよく出る4つの失敗の見た目
図2:見た目から、重なり・距離・法線・解像度のどれが原因かに当たりを付ける

公式ドキュメントの 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 を確かめた

次に読む記事

夕宮たいだ

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

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

この記事を書いた人

目次