NormalMapを含む形状のベイクについて

Category : CGTips · by 9月 18th, 2019

今回はNormalmapを含むメッシュを、UVを変更したメッシュにベイクして再利用する手段について記事を書きます。

ごく稀にですが、テクスチャ付きローポリモデルを編集して、別のモデルを作成するという作業が発生します。ゲーム制作では、雑魚モンスターのモデルを編集して別のモンスターにするといった作業がこれまでも多くありました。

かつては比較的単純だった仕事ですが、NormalMapを使用した場合、少しややこしい仕事になります。というのも、使いまわすときにテクスチャの向きなども変更したくなるものなのですが、BaseColorやRoughtnessはベイクすれば問題ないのですが、Normalmapに関してはそうはいきません。UVを回転させるとTangentとBinormalも同時に回転するため、回転に合わせた異なるNormalmapが必要になるからです。

Normlamapを回転させて使うにはいくつか方法があるのでご紹介します。

1.Photoshopを使う

一番単純な方法はPhotoshopを使用して赤成分(Tanget)と緑成分(Binormal)を入れ替る、もしくはそれぞれの値を反転するなどの編集を行う方法です。ただし90度よりも小さな単位で回転した場合にはお手上げです。

2.SubstanceDesignerのRotateTangetを使う

SubstanceDesignerのNormal Vector Rotationを使用すると、90度以外の角度にも回転できます。回転であればほぼ対応できます。

3.XNormalでBaseTextureをベイクする

上記2つの方法でも対応できるケースは多いのですが、UVを自在に回転させつつUVアイランドの結合をおこなってしまったようなケースでは、フェイスごとにタンジェントが代わってしまっているため対応できません。

そこでXNormalを使ってテクスチャをベイクする方法が使えます。

このようにUVを大幅に変更してみました。

変更前のモデルにタイヤ跡のような模様をつけました。こちらはHeightで作成したため、UVが切り離され異なった方向に回転している場合でも、ちゃんとつながってみえます。UVの向きが異なるので、Normalmapをみた場合には色がつながって見えません。

Mayaのマップの転写などの方法でNormalmapの値をそのままベイクした場合には、このように違う角度からライティングされたような結果になり、つながらないです。

そこで、XNormalを使用してベイクします。XNormalにはBase Texture to Bakeという機能があります。これはハイポリメッシュ(ベイクのソース)にテクスチャを割り当て、ローポリメッシュ(ベイクされるメッシュ)がそのテクスチャを拾うというものです。Mayaでいうマップの転写で拡散をベイクしたような状態で、ローポリメッシュはハイポリメッシュのカラーなどの情報を素直に拾ってくれます。

このBase Texture to Bakeという機能には、さらにBase Texture is a tangent-space normal mapというオプションのチェックボックスがあります。こちらを有効にすると、ハイポリに使用したテクスチャはTangentスペースのNormalmapとみなし、なおかつtangetの変化(UVの変化)に伴ってnormlamapを補正してベイクしてくれます!

Base Texture is a tangent-space normal map を有効にしてみました。
UVを大幅に変更してもNormalも正しくベイクできます。

同じくBase Texture is a tangent-space normal mapを有効にしたもの(右)、無効にしたもの(左)の比較です。
有効にした場合、モデルのUV(タンジェント)に合わせてNormalを再計算し、つながるようになっているのがわかります。

情報提供者はいたうさん(@t_itau)、MINOさん(@MINO_8601)でした。
ありがとうございますー!!

SHARE :