Blender ベイキング~テクスチャーペイントの覚書

勉強したBlenderのベイキングのやり方をすぐ忘れてしまうので、ここにメモとして残しておこうと思う。

準備


まずは、アドオン「Node Wrangler」をインストール
使い方はこちらを参照
vook.vc

ノーマルマップはノード上で白黒データに変更する
ノーマルマップを有効にするには、オブジェクトがシェーディング・スムーズの状態である必要がある

キャビティマップもノード上で白黒データに変更する

キャビティマップとカラーのノードをPrincipled BSDFのBase Colorに接続しようにも、同時に二つは接続できないので、Color / MixRGBを間に挟む必要がある。挟んだあと、Overlayモードに変更する。キャビティマップとカラーの割合を調整することもできる。

さらにキャビティマップとMixRGBの間に、Convertor / ColorRampを挟むことで、キャビティマップのレベル補正をすることができる。

ノーマルマップのベイキング

全てのオブジェクトのUV展開が済み、一つのマップにすべてが収まった状態からスタート。



メインのボディのハイポリとローポリを一緒に選択し(目や角、衣服などはこの時は選択しない)、「テンキーの/」で分離モードにする。
両方とも選択した状態でシェード・スムーズにする(オブジェクトモードでないとシェード・スムーズはできないので注意)。



ノーマルマップ用のイメージを作成する。まずはUVエディターウィンドウの赤で記したボタンを押して、黄色の線の箇所をこのように設定する。(このキャラクターの名前は決まってないが、後々狼のような動きをするかつ、顔が蝙蝠っぽいので仮としてこの名前にしてある)。



Shader Editor上でShift + A / Texture / ImageTexture を作成したら、読み込むイメージを、先ほど作成したものにする。



さらに、Color Space を Non-Color に変更する。



レイヤーでローポリのオブジェクトを選択した状態で、Shader Editor上で名前を変更する。



さらに、ハイポリのオブジェクトを選択した状態で、Shader Editor上で新規作成→名前を変更し、batwolf normsは不要なので、消去する。



ローポリのオブジェクトを選択した状態で、Shader Editor上のbatwolf normsを選択して、白枠で囲われた状態にする。Render Propertiesを選択して、Render EngineをCyclesに変更する。



Bake typeをNormalに変更。Selected to Activeにチェックを入れ、Max Ray Distanceの値を調整するのだが、参考にする値は、図のようにローポリからハイポリが飛び出ている距離だ。正直ここは何度やっても適切な値がわからないので、何回かやり直すことになると思う。今回は講師と同じ0.02mでやってみる。



まず、ハイポリを選択して、そのあとでCtrlを押しながらローポリを選択する。※上記までの画像とオブジェクト名を変更してあります。Shader Editor上のbatwolf normsが選択されているか再度確認して、Bakeボタンを押す。



ベイクが完了したら、Image / Save as でファイルを保存する。



ローポリだけを選択して、Edit Modeにすると、Bakeされた画像の上にメッシュを重ねてみることができる。メッシュの内部にまで紫以外の色が入り込んでいる場合は、Max Ray Distanceの値が間違っていることになるので、数値を調整して、できるだけこうならないようにBakeを何度かやって調整する。再度Bakeしてこれだと思う結果がでたら、Image / Save で保存することを忘れずに。なお、保存されていない場合はImageの横に※印がでる。



batwolf normsとPrincipled BSDFの間にShift+A / Vector / Normal Mapを追加。



ハイポリの目を閉じて、ローポリだけを表示し、表示を画像の黄色枠のやつにすると、ローポリにノーマルマップが乗った状態を確認できる。

キャビティマップのベイキング

UVエディター上でキャビティマップ用のイメージを作成する。
ノーマルマップの時と同様、大きさは2048px ×2048pxで、Alphaのチェックを外す。名前はbatwolf cavとした。
さらにShader Editor上にImageTextureを作成して、batwolf cavを読み込み、Color SpaceをNon-Colorに変更する。



ハイポリを選択した状態で、Shader Editor上でジオメトリーを追加する。



さらにColorRampを追加する。



全てをつなぐ。



表示をRender Previewモードに変更し、ColorRampのスライダーを動かして、白黒の明暗を強く表現するようにする。




ハイポリ→Ctr+ローポリの順番で選択。
batwolf cavを選択
Bake TypeをDiffuseに変更。
ContributionsをColorのみにチェックが入るようにする。
Selected to Activeにチェックが入るようにする。
Max Ray Dixtanceはノーマルマップの時と同じで良い。
Bakeボタンを押す。


Max Ray Dixtanceをノーマルマップの時と同じ0.02mでやったが、穴あきが多く、いろいろやってみた結果、10mまでのばしてもこれ以上は埋まらなかったので、あきらめた。
Imageを保存するのを忘れずに。



3D Viewportの表示をMaterial Previewに変更し、ハイポリを非表示にし、batwolf cavのColorからPrincipled BSDFのBase Colorにつなぐ。



キャヴァティマップが無い状態と比べると差がわかる。

ボディ以外のパーツのベイキング

キャラクターに装飾を追加する場合


なにかものたりないなと思い、背中に角を追加した。
角をまずスカルピング(horn hp)して、それを元にローポリメッシュを作成(horn lp)。
ローポリメッシュにシームを追加して、UV展開。
すでに、ボディに関しては、ノーマルマップも、キャビティマップも作成済だったので、隙間にどうにか角のローポリを展開したメッシュを並べるのに苦労した。
今後は、キャラにバリエーションを作るためにも、ボディだけでイメージの全体が埋まらないように作成するのがポイントかなと思った。

なお、角の色が黒いのは、まだキャビティマップをベイクしていないから。

注意:ローポリをShade Smooth にするのを忘れない



同じく、目もUV展開。目に関しては、ベイクする元のハイポリが無いので、そのままこれをローポリとして使おうと思う。

ボディ以外のパーツのノーマルマップのベイク


上の画像の①~⑥を設定した状態で、BAKEボタンを押す。


書き出されたノーマルマップのイメージ
ローポリをエディットモードにすると、ノーマルマップのイメージにメッシュを重ねてみることができる。
メッシュが重なっているところの色が明らかに他の紫色と違っていたら、再度、Max Ray Distance の値を調整してベイクする。
自分場合は、どこまでMax Ray Distance の値をいじっても完全には変な色の箇所が消えなかったので、、UV Editor のImage / Save をしたあとで、画像編集ソフト(Clip Studio PaintPhotoshopなど)で直接変な色を消したり馴染ませて上書き保存した。


修正前のノーマルマップ


修正後のノーマルマップ。なんか色が濃くなっているけど、気にしないでおこう。できる限り、黄色や赤色の部分を消したり、紫に近づけるよう修正した。

ボディ以外のパーツのキャビティマップのベイク


上の画像の①~⑥を設定した状態で、BAKEボタンを押す。(この画像は既にBAKEをした後にキャビティマップのイメージを画像編集ソフトで修正したあと)

書き出されたキャビティマップのイメージに、ノーマルマップの時同様、ローポリのメッシュを重ねて、メッシュと重なっている部分に穴が開いてないか(真っ黒なままになっていないか)確認。穴が多ければ、Max Ray Dixtanceの値をいじって、再度ベイクする。
限界まで消えない箇所については、UV Editor のImage / Save をしたあとで、ノーマルマップの時同様、画像編集ソフトで修正する。