ノーマルマップを綺麗にベイクするためには、「レイ」がどこからどこに向かって飛ぶかが重要ですが、通常のベイクでは、レイの方向が正確でないことがあり、結果としてノイズやエラーが出やすいです。(複雑な形でうまくいかないことが多い)
それを解決するのが Cage(ケージ)ベイクです。レイをもっと狙い通りの場所に飛ばし、正確なノーマルマップを焼いて綺麗な仕上がりが期待できます。
本記事ではその メリット・使い方・設定方法 を紹介します。
この記事は、Blenderの「Cageを使ったベイク」について解説した中級者向けの記事です。
難易度
ベイクの基礎的なことは理解している前提の記事です。
初心者向けには以下の記事があります。
初心者向け:ベイクがうまくいかない方へ。まず色を焼いてみましょう↓
初心者向け②:ノーマルマップの焼き方↓
Cageを使ったベイクとは?なぜ必要?

例として、このような装飾の凹凸が入った壺を焼いてみようと思います
これをまずCageを使わず普通にベイクしてみます。

ベイクの設定は押し出し(Extrusion)0.15mで焼きます。
結果は右の画像のようになります。わかりにくいので拡大した下の画像も見てください。


壺の口の下の凹んだところと、中央部分の鳥の彫刻の部分がベイクに失敗しています。
押し出し(Extrusion)0.15mで焼いたとき、ローポリのポリゴンを0.15m外側に押し出して、仮のケージ(Cage)のようなものを作っています。
この仮のCageは押し出しは各所一定にしか押し出せません。(ローポリの頂点を法線方向に一律で押し出すだけ)

なので、これをハイポリと重ねて見ると、右の画像のようになってしまいます。
ハイポリの凹凸が、一部凸が高いところがあったり、口の下の細くなっている部分が、重なってしまったりしていて、仮に押し出したCageが良い形ではないことがわかります。
これ以上押し出すと細い部分がもっとおかしくなるし、押し出し距離を短くすると、装飾が飛び出した部分を包むことができなくなってしまいます。

ノーマルがおかしくなる原因は押し出しただけの良くない形のCage
ローポリを押し出しただけで作ったCageではノーマルベイクが失敗してしまうのです。作ったノーマルマップを貼って見ましたが、以下のように失敗している箇所がでてきてしまいます。
ハイポリ

ノーマルを貼り付けたローポリ

上の凸部分を下のレイが拾ってしまい、逆に凹んだような変な形があります。

押し出して作ったCageから出ているレイを緑色で可視化(イメージ)してみました。上の凸部分を拾ってしまっているレイがあります。
ハイポリ

ノーマルを貼り付けたローポリ

鳥の頭と翼の一部が、押し出しが足りなかったために膨らみが足りず平らになってしまっています。

その箇所のレイを可視化(イメージ)してみると凸が大きすぎてCageに入りきっておらずレイが飛ばせていません。
この失敗を解決するには、適切な形のCageを自分で作り、そこから凹凸を見るレイを飛ばす必要があります。
Cageを使ったベイクは自分でCageの形を編集できるのでそれが可能になります。
どんなときにCageを使えばいい?
上の例のように、押し出しのCageの形が交差する・適切な形にすることが不可能な場合です。
- Extrusionの値をどんなに調整してもベイクが失敗するとき(押し出しのCageが適切な形になっていない可能性が高い)
- 凹凸が多く、複雑な形をしている(押し出しCageが交差したり正常に押し出せない可能性が高い)
- 角が急な角度なとき
- 一部だけ凸が大きかったり凹みすぎたり、極端な形があるとき
Cageを作ってBakeをする方法
手順としては簡単で、Cage用のメッシュを作成し、ベイクの設定のときにそれをCageに設定するだけです。
- Cageメッシュを作る
- ベイク設定をする
- ベイクする
①Cageメッシュを作る
Cageメッシュはローポリを複製して編集して作っていきます。
Cageメッシュを作るポイント
- ローポリとCage用メッシュが同じトポロジーであること
- 法線方向を意識して形を広げる
①Cageメッシュを自作する場合ローポリ(アクティブオブジェクト)と完全に同じトポロジーでないといけません。
- 同じ頂点数
- 同じエッジ・フェイス数
ハイポリの凹凸を包むために勝手にCageメッシュだけに辺や頂点を増やすと、エラーが出てベイクが出来なくなります。頂点数や辺を増やすなら焼き付けるローポリも同様に割る必要があります。
②法線方向を意識して形を広げる
同じ頂点数や辺、面の数でも、法線方向がちぐはぐになるとベイクでできる形がおかしくなります。
失敗例:例えば自分でCageを自作しようとしてこのような形に編集したとします。

わかりづらいので細くなっている部分を拡大します。

ハイポリの凹凸を覆いきれなかったため、赤線→黄色線 まで広げています。このようにしてベイクしたノーマルマップが以下になります。

青線で囲んだ部分が、引き延ばされてしまいました。これはCageで広げた部分の法線の流れがおかしくなっているから起こっています。
このポイントに気を付けて、なるべく頂点や辺の追加を最小限にし(ローポリも割ることになる)、法線方向の流れが自然になるよう広げるようにしてCageメッシュを作っていきます。
Cageを修正しながら作成していく

複雑な凹凸、Cageの形が崩れそうなところ、極端に凹凸が大きいところにループカットで辺を追加していきます。(元のローポリにも同様にループカットなどしてトポロジーを合わせます)


なるべく法線方向が乱れないよう、Cageを広げるときは広げる向きの流れが自然になるよう調整します。(段階的に変化するようにする)
ケージから凹凸を見るレイの流れ(緑色の線)を意識するように作ります。
この流れがバラバラになるとノーマルマップが引き延ばされたり押しつぶされたように乱れます。
②ベイク設定をする

ベイク設定は簡単で、
Bake TypeはNormal
Selected to Activeにチェックしたあと
- Cageにチェックする
- Cage Objectに作成したCageメッシュを設定
するだけです。
Max Ray Distanceは0にしておくと、レイがぶつかったところで止まるので放置で大丈夫です。
③ベイクする
あとはBakeを押してベイクするだけです。(UV展開・イメージテクスチャノードの準備などはやってください。基礎的なことについては触れません。)

左画像が修正したCageでベイクしたノーマルマップです。
引き延ばしなども少なく、途中で失敗している箇所もなく焼けていると思います。
このように凹凸が激しく、元のオブジェクトの形状が複雑な場合はCageを作成してベイクしないとなかなかうまく焼けません。
作ったノーマルマップを貼って見ました。


まとめ
Cageを使ってのベイクは、Cageを作成しなければならないので面倒だけど、最も確実にキレイにベイクできる方法です。
法線の方向やレイの方向、どう焼けばどこに凹凸が焼けるかをある程度イメージできることが重要になります。
ベイクがうまくいかないときはぜひCageを使ってベイクすることを考えてみてください。