
UE日記 ノーマルマップの色
みなさんこんにちは。
今日もチビチビUEを触っております。
さて今回はノーマルマップについて復習しようとおもいます。
「疑似的な高さ」を描写してくるマップなんですが、
どんな仕組みなんでしょうか。
ノーマル(法線)マップとコンピューターの関係
ノーマルマップは日本語訳で「法線マップ」と言います。
Nomarl: 「(線が)垂直の」 って調べたら載ってるんですよね。ビックリ
コンピューターは人間が認識できる
例えば「四角」や「球体」「三角」という言葉の意味は理解できません。
色情報も「赤」や「ピンク」「茶色」なんて言っても通じません。
なので
コンピューターが理解できるようにコンパイル(変換)してあげる必要があるんですね。
そこで使うのが3次元のベクトルになります。
X,Y,Zの数値で「モノの形」や「色の情報」を認識するわけですね。
(書きながら思ったんですが、コンピューター言語のコンパイルって
そういう意味なのかと)
ノーマルマップと色情報
ノーマルマップは法線の向きをもとにコンピューターが
色情報をベクトルで認識するんでしたね。
次の↓下の画像を見てください。


これはマテリアルノードの「PixelNormalWS」を使って表したものです。
このノードはノーマル(法線)の向き情報(ベクトル情報)を
取得できるものです。
現行の形式だと
X(右)=R、Y(手前)=G、Z(上)=B を表します。
それぞれが3次元ベクトルの+方向を向いていれば
手前の立方体のようにRGB値1をつけるわけです。
他の丸みを帯びた面を持つ立体は
例えば黄色は、XYの間の45度を向いているため
(1,1,0)となるわけです。
また三角錐は底面以外の全ての面が
上を向くため、必ずBの値を持ちます。
逆に立体が 3次元ベクトルのー(マイナス)方向を向いていると
↓下の画像のようになります。

全ての立体の底面は
Z軸に対して 完全にマイナスなので (0,0,0)なわけです。
X軸とY軸に マイナス向きをとる面(0,0,0)も 黒になります。
※※
黒=0と書きましたが、正確にはマイナスは0~-1までをとります。
0以下からは同じなので間違っていました。
もちろんですが、
アクタを回転させてもワールド座標は決まっているので
色の変化はありません。
まとめ
今までなんとなく使ってきたノーマルマップの意味が分かってきました。
・ノーマル(法線)マップは向きの情報をコンピューターが認識できるように、RGB値をベクター変数で格納する
・X,Y,Zのプラス軸はそれぞれ R,G,Bと相関している
・それぞれの軸との角度が0度ならRGB値の1をとる。逆にマイナス方向だと
値の0をとり黒になる
・おまけに全方向を向く面は存在しないので白はない
とのことでした。
前回のLinearinterpolateと続いてスッキリする内容でした。
色情報をベクター変数として扱うのはUEからなので
中々難しいことも多いですが、1つずつ覚えていきたいですね。
では、また。