Blenderでノーマルマップをベイク

Blenderでノーマルマップをベイクする手順とベイクに関係する設定についてまとめてみた。

ノーマルマップのベイクの手順

ハイポリモデルとローポリモデルを用意する。

ローポリモデルのUV展開を行い、ベイク用のマテリアルとノーマルマップ用のイメージを準備する。ローポリモデルにマテリアルを適用し、ノードエディタでマテリアルにImageTextureを他のノードの接続しない状態で追加し、ノーマルマップ用のテクスチャを指定して、ImageTextureノードを選択状態にする。

ハイポリモデルを選択状態にしてからローポリモデルを選択する。

PropatiesのRenderパネル内にあるBakeの設定でBake TypeをNormalに、Selected to ActiveとCageにチェックを入れ、Bakeボタンを押してノーマルマップをベイクする。ベイクが完了したらノーマルマップの画像を忘れずに保存する。

ノードエディタでノーマルマップのテクスチャをシェーダーのNormalに接続するとローポリモデルにハイポリモデルの凹凸が適用される。

ローポリモデルにノーマルマップを適用すると下の画像のようになる。

ベイクに関係する設定

ノーマルマップをベイクするときにローポリモデルのShadingはSmoothに設定しておく。Flatだと面のエッジ部分が滑らかにならない。

ベイクの設定項目はそれほど多くないが、ベイクするモデル形状によっては細かい調整が必要になる場合がある。

Selected to Activeを有効にしたベイクにおいては、ローポリモデルの内側に位置するハイポリモデルの凹凸が投影される。また、Cageのチェックの有無でベイク時の投影方法が変わる。

MonkeyをCubeにベイクした例で示すと、Cageを使わない場合はCubeの面の法線と平行に投影が行われる。

Cageを使うとアクティブなオブジェクトを包むように投影が行われる。Cageに別のオブジェクトを使用する場合、Cageに使用するオブジェクトとベイクで使うローポリモデルはトポロジーが同一でなければならない。

ローポリモデルの面がハイポリモデルよりも内側に入り込んでいる場合、Extrusionの値がデフォルトの0のままだとローポリモデルの面より外側にある部分はベイクされない。

Extrusionの値はBlenderユニットに対応しており、大きくするとベイクされる範囲が外側に広がる。ただ、入り組んだ形状をしていて、ローポリモデルの面に対して複数の面が設定した距離内に存在すると、両方とも同じ面にベイクされてしまうので、モデルの形状によって数値を調節する必要がある。Tポーズの人型キャラクターの場合、Extrusionの値が大きすぎると顔の一部に腕がベイクされたり、足の内側に反対の足がベイクされてしまったりする。

Extrusionの値の調整だけでは問題が解決しない場合はテクスチャをパーツで分けてベイクする必要がある。ベイクで上書きをする必要が無い部分用のマテリアルとテクスチャイメージを用意し、Editモードでそれぞれのマテリアルを該当する部分に適用する。部分的にベイクを上書きする場合、Clearのチェックを外しておく。

ベイクの上書きは面単位で行えるが、シームで分割した塊単位で行わないとエッジ部分が滑らかにならない。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です