ベイク全体論|MayaとPainterの責任分界とエラー対処

3DCG パイプライン(DCCソフトとエンジンを繋ぐ制作の流れ全体)で「ベイク」と呼ばれる処理は、ハイポリ(高精細モデル)のディテールをローポリ(軽量モデル)のテクスチャに焼き付ける 作業です。Maya でつくり、Painter(Substance Painter=Adobeのテクスチャペイントソフト)で焼く──このフローは現代のゲーム制作で標準化されていますが、どこで何が起きているか言語化できないまま「焼けない」「飛び散る」「継ぎ目が出る」事故に遭う人は少なくありません。

本記事では、ベイクの基本概念から High / Low / Cage の3段階構成、Maya 側と Painter 側の責任分界、典型エラーと対処、エクスプロードまでを、新人にベイクを教えられる粒度で整理します。前提として CR-01 PBRの理論CR-04 ノーマルマップとタンジェント空間 を読んでおくと、本記事の用語が一気に立体になります。

夕宮たいだ

ふぁ……みんな〜、今日は「ベイク」のおはなしだよぉ。最初の壁になりがちだけどぁ、流れさえ見えればこわくないんだ〜。一緒にいこ〜。

目次

1. ベイクって何だっけ

ひとことで:High Poly の情報を Low Poly のテクスチャに焼き付ける処理です。

ベイクとは、ハイポリゴンモデル(凹凸が細かく作り込まれた重いメッシュ)の情報を、ローポリゴンモデル(ゲームに組み込む軽いメッシュ)のUV平面上にテクスチャとして焼き込む処理を指します。CR-04 で扱ったノーマルマップの生成も、このベイク処理の一種です。

焼くマップの種類

実務でよく焼く出力は以下です。

  • Normal:面の細かな向き(CR-04 で扱った内容)
  • AO(Ambient Occlusion):凹んだ部分にできる薄い影
  • Curvature:エッジ(凸)と谷(凹)の情報
  • Position:モデル空間内での位置(高さや奥行き)
  • Thickness:内側からの厚み
  • World Space Normal:ワールド座標系での法線

これらは Substance Painter のスマートマテリアルや、エッジ摩耗・ホコリ堆積のジェネレーターが「どこをエッジ扱いするか」「どこに影を落とすか」を判断するための材料になります。ベイクの精度がそのままテクスチャクオリティの上限を決めるので、最初のひと手間として軽視できません。

2. High / Low / Cage の3段階

ひとことで:「ディテール元」「最終形」「レイ範囲」の3つのメッシュで成立します。

ベイクには3種類のメッシュが登場します。下図のように、同じ部品を High / Low / Cage で並べたものを思い浮かべてください。

High Poly、Low Poly、Cageの3段階を並べて示す概念図
図1:ベイクは High / Low / Cage の3点セットで考える

High Poly(ハイポリ)

ディテールの源です。Sub-D(Subdivision Surface=サブディビジョン。ポリゴンを細分割して滑らかな曲面を作る技法)モデリング、ZBrush(ピクソロジック社の3Dスカルプティングソフト。粘土のように細部を彫り込める)のスカルプト、CAD(製図用ソフト)由来のメッシュなど、ポリゴン数を気にせず細かい凹凸を作り込んだ状態です。ゲームには重すぎて持ち込めませんが、その情報をローポリのテクスチャに焼き込むことで、見た目だけハイポリ風に保てます。

Low Poly(ローポリ)

ゲームに組み込む最終形のメッシュです。トポロジー(ポリゴンの流れ・配置パターン)、ポリゴン数、UV、頂点法線が整っている必要があります。ベイクは「このローポリの UV」に対して情報を書き込むので、UV が崩れているとベイク結果も崩れます(CR-03 UVとテクセル密度の設計 を参照)。

Cage(ケージ)

ベイクは ローポリの各ポイントから法線方向にレイ(光線。コンピュータ上で飛ばす仮想の線)を飛ばし、ハイポリ表面と当たった場所の情報を取得する 仕組みです。Cage はこのレイの「飛ばす範囲」を決める囲いのメッシュです。ローポリを少し膨らませた形が一般的で、ハイポリ全体を内側に包めるサイズが必要です。

夕宮たいだ

ていねいに整理するねぇ。High が「元」、Low が「出口」、Cage が「レイの届く範囲」。この3点セットだよぉ。

3. Maya 側の準備:命名・スムージング・エクスポート

ひとことで:命名規則・スムージング・履歴削除を、ベイク前に整えます。

命名規則

業界標準的な命名は次のとおりです。

  • 全体:AssetName_high.fbx / AssetName_low.fbx
  • サブメッシュ:partA_high / partA_lowpartB_high / partB_low
  • Cage:partA_low_cage(ローポリと同じトポロジー)

サブメッシュは Painter 側の Match by Mesh Name によって対応が取られます。次の H2 で詳細を扱います。

スムージング

CR-04 で扱ったとおり、ローポリの頂点法線はベイク結果を大きく左右します。

  • ハードエッジを置く場所は UV シームと一致させる
  • ベイク前のスムージング設定を、エンジン側のインポート設定と揃える
  • 不要に全辺をハードエッジにしない(陰影の計算が崩れる原因)

Freeze・History Delete・UV確認

エクスポート前のチェックポイントです。

  • Freeze Transformations:移動・回転・スケールをリセット
  • Delete History:古いデフォーマや操作履歴を削除
  • UV確認:ローポリ側にテクセル密度・パディングが揃ったUVがあるか

FBX エクスポート設定

Painter に持ち込むときの注意点は以下です。

  • Smoothing Groups:ON
  • Tangents and Binormals:ON(CR-04 のタンジェント未出力エラー回避)
  • Triangulate(トライアンギュレート=四角形を含むポリゴンをすべて三角形に分割する処理):OFF(Painter 側で自動処理されるため、Maya で先に三角化すると頂点順序のズレが起きる)

4. Painter 側のベイク:Match by Mesh Name の仕組み

ひとことで:High と Low を「名前」で紐づけて、サブメッシュ単位でベイクします。

Substance Painter のベイクダイアログには Match by Mesh Name というオプションがあります。これを有効にすると、Painter は次のように動作します。

1. Low Poly メッシュ内の各サブメッシュ名(例:partA_low)を取得 2. High Poly ファイル内から、サフィックスを置換した名前(例:partA_high)のサブメッシュを探す 3. 該当ペアだけを使ってレイを飛ばし、ベイクする

つまり、隣接するパーツ同士の干渉を避け、「partA_low には partA_high の情報だけが焼き付けられる」という挙動が保証されます。下図に、命名で High と Low が線で結ばれる対応関係を示します。

Match by Mesh NameでLowとHighの同名パーツが対応する図
図2:命名で High と Low の対応を固定する
夕宮たいだ

ほよ? 名前で対応取ってたんだぁ。だから命名規則を揃えとくのが、ほんとに大事ってことなんだねぇ。

Match by Mesh Name を使わない場合

OFF にすると、Painter は「ローポリの各点から飛ばしたレイが、最初にぶつかった任意のハイポリ面」の情報を取ります。隣接するパーツのハイポリにレイが届くと、別パーツの情報を焼いてしまいます。これが「ベイクが飛び散る」「他パーツの影が乗る」の主因です。

Cage 設定

Cage の指定方法は2通りあります。

  • Cage メッシュを別ファイルとして渡す(推奨、明示的)
  • Max Frontal Distance / Max Rear Distance を数値指定(簡易、Painter 内蔵)

複雑なアセットほど Cage メッシュを明示的に指定したほうが事故が減ります。

5. 典型エラーと対処

ひとことで:原因は「対応取れていない」「Cage 不足」「スムージング不一致」のどれかに集約されます。

ベイクで起きるトラブルは、症状ごとに見ると無数にありますが、原因を分類するとほぼ3カテゴリに収まります。下図に典型3パターンの結果と原因の対応を示します。

ベイクの典型エラーである飛び散り、シャドウ漏れ、シームの原因と対処
図3:ベイクエラーは原因別に切り分ける
夕宮たいだ

ぁぅ……飛び散るやつ、ほんと焦るんだぁ。最初は何が原因かわかんないんだよぉ。気をつけてねぇ。

飛び散ったベイク(場違いな模様)

別パーツのハイポリ情報が混ざって焼かれている状態です。

  • 原因:Match by Mesh Name 未使用、または命名不一致
  • 対処:Painter ダイアログで Match by Mesh Name を ON、命名規則を再確認

シャドウ漏れ

意図しない場所に AO 由来の暗い影が出る状態です。

  • 原因:Cage が小さすぎる、または Max Distance 不足でハイポリがはみ出している
  • 対処:Cage メッシュを膨らませる、または Max Frontal/Rear Distance を増やす

継ぎ目(シーム)が見える

UV シームの線が陰影として浮く状態です。

  • 原因:タンジェント未エクスポート、スムージング不一致、UV パディング不足
  • 対処:FBX 設定確認、ハードエッジを UV シームと一致、UV パディング 8〜16px 確保

Cage が裏返る

複雑な凹凸でローポリを膨らませた結果、Cage の一部が裏返り、ローポリ表面と交差する状態です。

  • 原因:鋭い凹みや薄い壁
  • 対処:その箇所のローポリを微修正、または Cage メッシュを手動編集

6. 大規模アセットでの工夫:エクスプロード

ひとことで:パーツを物理的に離してから焼く、干渉ベイク回避の手法です。

複雑なメカ・車両・武器など、パーツが密集しているアセットでは、Match by Mesh Name でも完全には干渉を防げないケースがあります。ボルトの頭がフレームに埋まっている、装甲が重なっている──こうした「隣接ハイポリが Cage 内に飛び込んでくる」状況です。

そこで使うのが エクスプロード(Exploded Bake) です。

密集したアセットをエクスプロードしてベイク干渉を避ける図
図4:密集パーツはエクスプロードで干渉を避ける
夕宮たいだ

一回知っとくと便利でしょ? アセットを「分解」してベイクするんだぁ。爆発四散みたいでちょっと楽しいんだよねぇ。

手順

1. ベイク用に High と Low を、各パーツ単位で 同じ移動量 だけずらす 2. パーツ同士が物理的に重ならない状態で別 FBX に書き出す 3. Painter でベイク → 各パーツがクリーンに焼ける 4. テクスチャ完成後、Painter にロードする最終 Low Poly は エクスプロード前の組み立て状態 を使う

UV は変わらないため、エクスプロード版で焼いたテクスチャは、組み立て状態のメッシュにそのまま適用できます。

ベイク解像度の選び方

ベイク解像度は、最終運用解像度の 同じか1段上 が定石です。

  • 最終 1024px 運用 → ベイクは 1024 か 2048
  • 最終 2048px 運用 → ベイクは 2048 か 4096

低解像度でベイクして後でアップスケールすると、エッジが甘くなります。逆に過剰な高解像度ベイクは、時間とディスク容量を浪費します。

7. ハンズオン演習

ひとことで:シンプルな箱で High / Low / Cage の3点セットを作り、Painter で焼いてみましょう。

1. Maya で立方体をモデリング、各辺を Bevel して High Poly を作成(命名 cube_high) 2. Bevel なしの立方体を Low Poly として複製(命名 cube_low) 3. Low Poly を少し膨らませた Cage を複製(命名 cube_low_cage) 4. それぞれを別 FBX に書き出し(High と Low を別ファイル) 5. Painter で Low Poly をロード、Bake Mesh Maps ダイアログで High Poly を指定 6. Match by Mesh Name を ON、Cage を指定 7. ベイク実行、Normal と AO を確認

これだけで、Bevel された角の情報が Low Poly のノーマルに焼き込まれ、ローポリの立方体に Bevel された角の陰影が出るはずです。最小構成で1回成功させると、後は応用です。

8. チェックリスト

ひとことで:ベイク前のセルフチェック項目です。

  • [ ] High / Low / Cage の3メッシュが命名規則どおりに揃っている
  • [ ] Low Poly の Freeze・History Delete・UV準備が完了している
  • [ ] FBX エクスポートで Smoothing Groups と Tangents が ON
  • [ ] Painter で Match by Mesh Name を ON にしている
  • [ ] Cage または Max Distance が、ハイポリ全体を包めるサイズ
  • [ ] ベイク解像度が最終運用解像度と同じか1段上
  • [ ] 飛び散り・シャドウ漏れ・継ぎ目・Cage 裏返しが起きていない

9. よくある間違い・トラブルシュート

ひとことで:命名不一致・スムージング食い違い・Cage 距離不足・Triangulate 順序ミス、の4つが定番です。

命名不一致

cube_highCube_low(大文字小文字違い)でマッチしない、サフィックスが _HighPoly_LowPoly で揃っていない、など。プロジェクトで命名規則を文書化し、テンプレート化するのが解決策です。

スムージング食い違い

ベイク前の Low Poly のスムージング設定が、エンジン側のインポート時に再計算されて別物になる現象。CR-04 で扱った「DCC・FBX エクスポート・エンジンの3者で揃える」鉄則が効いてきます。

Cage 距離不足

Cage が小さく、ハイポリの一部がはみ出している状態。一部の面だけが焼けない、もしくは別パーツの情報が混ざります。Cage を膨らませる、または Max Distance を増やします。

Triangulate 順序のミス

Maya 側で先に三角化してから FBX 出力すると、Painter 側で再三角化された結果と頂点順序がズレることがあります。Maya 側では Triangulate せず、Painter に任せるのが安全です。

夕宮たいだ

ふぁ……ベイクの全体像はこんな感じかなぁ。次はチャンネルパッキングや、Painter 実機編に進んでいけるよぉ。

10. 次に読む記事

ひとことで:ベイク後のテクスチャ運用と、各DCC実機編に進みましょう。

  • CR-05 チャンネルパッキング戦略:焼いたマップを1枚にまとめて軽量化する設計
  • CR-04 ノーマルマップとタンジェント空間:ベイク前に押さえておきたいタンジェント空間とDirectX/OpenGL規約
  • CR-07 FBX/glTF/USD/Alembic:エクスポート形式選定の早見表
  • MY-B15 FBXエクスポートと座標系トラブル:Maya 側の出力周りの掘り下げ(公開準備中)
  • SP-I01 High to Low ベイクの実務:Painter 側の実機ワークフロー(公開準備中)
  • SP-B06 メッシュマップとベイクの基礎:Painter のメッシュマップ運用詳細(公開準備中)

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

この記事を書いた人

目次