読者です 読者をやめる 読者になる 読者になる

妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

水のマテリアル研究⑨ ノーマルマップの色が場面によって違う理由

UE4.13 マテリアル

「ノーマルマップの画像っていうのは、青みがかった灰色が初期値、つまり法線をいじってない状態になるんだけど、これがUE4で読み込むともっと濃い青の画像になる。その理由を図にするとこんなかんじになる」

f:id:una_unagi:20161214221128p:plain

「要するに画像にマイナスの色というのがなくて、でも法線では左なのか右なのか、前なのか後ろなのかっていう、プラスとマイナスの区別が必要。だから、RGBそれぞれの中間の値を0と考えて色をつけるようになってる」

妹「それはわかる」

「でも普通のテクスチャ、0~1の範囲で色を表してる。だから読み込むモードによって色が違ってくる」

f:id:una_unagi:20161214222611p:plain

「ノーマルマップを読み込むと、普通はこういう感じの表示が出てくるんだけど、これはその色の扱い方についての話」

妹「自動判別してくれるんだ。でもどうやって見分けてるの? 名前?」

「名前は色々変えても一緒だった。たぶん色の感じを見分けてるんじゃないかな。青っぽい感じで、いかにもノーマルマップって感じの画像かどうか」

妹「でもノーマルマップっぽいけど色塗り用のテクスチャだった……ってこともあるのでは?」

「さっきの画面でリバートを押せばいい。でも間違えて押しちゃうこともあるから、そういう場合はこの画面で変更出来る」

f:id:una_unagi:20161214222910p:plain

「後からでもテクスチャアセットの詳細画面で変更できるから。違ってたら正しい設定に変えておく」

f:id:una_unagi:20161214223057p:plain

「マテリアルのノードで、並んでるのは同じ画像なんだけど、設定が違うとこういう違う見た目になる。ノーマルマップの場合、元々の灰色が黒に、プラスの部分だけ色がついて、マイナスの部分は黒のままになる。結果として、かなり青い感じになる」

妹「このノードにもなんか設定するとこあるみたいだけど……」

「そこも正しく設定しないと駄目だけど、使うテクスチャに合わせて自動で変わるから。手動で変えなければ問題ない」

妹「でもマイナス部分が見えないって困るんじゃないの? 確認の時とかに」

「そういう場合はちょっと加工して表示するという手がある。要するに数字と色の関係の問題なんで、計算していけば割りとなんとかなる。例えばこんな感じ」

(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) それをベースカラーにつなぐ

f:id:una_unagi:20161214225022p:plain

「これでノーマルマップを元々の画像の色で表示出来る。色として考えたらRGB1,1,1もRGB2,2,2も同じ白なんだけど、ここでは数字として扱ってるから、表示されてる色は無視していい。数字も色も同じデータ型になってるのがややこしいとこでもあるし、便利なとこでもある」