水のマテリアル研究⑨ ノーマルマップの色が場面によって違う理由
「ノーマルマップの画像っていうのは、青みがかった灰色が初期値、つまり法線をいじってない状態になるんだけど、これがUE4で読み込むともっと濃い青の画像になる。その理由を図にするとこんなかんじになる」
「要するに画像にマイナスの色というのがなくて、でも法線では左なのか右なのか、前なのか後ろなのかっていう、プラスとマイナスの区別が必要。だから、RGBそれぞれの中間の値を0と考えて色をつけるようになってる」
妹「それはわかる」
「でも普通のテクスチャ、0~1の範囲で色を表してる。だから読み込むモードによって色が違ってくる」
「ノーマルマップを読み込むと、普通はこういう感じの表示が出てくるんだけど、これはその色の扱い方についての話」
妹「自動判別してくれるんだ。でもどうやって見分けてるの? 名前?」
「名前は色々変えても一緒だった。たぶん色の感じを見分けてるんじゃないかな。青っぽい感じで、いかにもノーマルマップって感じの画像かどうか」
妹「でもノーマルマップっぽいけど色塗り用のテクスチャだった……ってこともあるのでは?」
「さっきの画面でリバートを押せばいい。でも間違えて押しちゃうこともあるから、そういう場合はこの画面で変更出来る」
「後からでもテクスチャアセットの詳細画面で変更できるから。違ってたら正しい設定に変えておく」
「マテリアルのノードで、並んでるのは同じ画像なんだけど、設定が違うとこういう違う見た目になる。ノーマルマップの場合、元々の灰色が黒に、プラスの部分だけ色がついて、マイナスの部分は黒のままになる。結果として、かなり青い感じになる」
妹「このノードにもなんか設定するとこあるみたいだけど……」
「そこも正しく設定しないと駄目だけど、使うテクスチャに合わせて自動で変わるから。手動で変えなければ問題ない」
妹「でもマイナス部分が見えないって困るんじゃないの? 確認の時とかに」
「そういう場合はちょっと加工して表示するという手がある。要するに数字と色の関係の問題なんで、計算していけば割りとなんとかなる。例えばこんな感じ」
(1) テクスチャからピクセルを持ってくる
(2) RGBの数字は-1から1の間のどれかなので、1を足すと0から2の範囲になる(1,1,1のVectorをAdd)
(3) 0から2の範囲の数字を2で割ると、0なら0のまま、2なら1になって、0から1の範囲になる(2,2,2のVectorでDivide)
(4) それをベースカラーにつなぐ
「これでノーマルマップを元々の画像の色で表示出来る。色として考えたらRGB1,1,1もRGB2,2,2も同じ白なんだけど、ここでは数字として扱ってるから、表示されてる色は無視していい。数字も色も同じデータ型になってるのがややこしいとこでもあるし、便利なとこでもある」