[blender]バンプマップ、ノーマルマップ、ディスプレイスの違いについてとノーマルマップのベイク方法[初心者向け]

blender2.82a使用
バンプマップ、ノーマルマップ、ディスプレイスはどれも画像から形状に影響を与えるもので、昨今の3DCGではよく使われる技術です。
似ているところもあるのですが、この3つの違いを知ってクオリティアップをしましょう。




バンプマップとディスプレイスの違い
この二つはグレースケール画像の明暗情報を使うところが似ています。
黒いところが凹み、白いところが出っ張ります。

まずバンプマッピングですが、こんな画像を平面に貼ってみます。

平面を追加します。
シェーダーエディターに切り替えて新規マテリアルを作ります。
画像テクスチャノードを追加しバンプの画像を選択します。
マテリアル出力のディスプレイスにカラーを繋ぎます。
3Dビューに戻ってレンダープレビューで確認してみましょう。

平面にも関わらず立体的な凹凸が見えます。
ライトを移動するとちゃんと陰影も反映されます。
しかし横から見ると凹凸のない平面だということが分かります。

立体として変形しているわけではないので落ち影は発生しません。
あくまで陰影のみです。

バンプマップはモデリングする程ではない細かい凹凸や、遠くにあるオブジェクトなどのモデリングを簡略化するのに適しています。逆に蟻の視点で見る様にオブジェクトにアップすようなシーンには向いていません。



続いてディスプレイスですがこちらは、実際にオブジェクトを変形させます。つまりポリゴンを分割するので必然的に重くなります。

やってみましょう。
平面にディスプレイスモディファイアを追加します。
テクスチャの新規を押して作成します。
テクスチャタブに移動します。
上部にDisplaceとなっているのを確認してテクスチャに画像を指定します。
しかしこれだけだと何も起こりません。平面なので変形するポリゴンが少なすぎるからです。
モディファイアタブに戻ってサブディビジョンサーフェスを追加します。
これだとディスプレイスの結果にサブディビジョンをかけることになるので、サブディビジョンの順番を変えてディスプレイスの上に来る様にします。
カトマルクラークからシンプルに変えて分割数をあげると画像を反映する様に変形します。
仕上げにもう一回サブディビジョンを追加してディスプレイスの結果を更に滑らかにします。


こちらはちゃんと立体になりますし、落ち影も発生します。
今回は画像が簡単なのでモデリングした方が早いですが、複雑な画像では有効です。
しかし画像の再現度を上げるには相応のポリゴンが必要です。

ディスプレイスについては[blender]ディスプレイスで平面から海や湖の波を作る方法(おまけ有り)[3DCG]もご覧ください。

バンプマップとノーマルマップの違い
バンプマップとノーマルマップは形状を変化させず法線を変化させて陰影をつけるものです。
違いは、バンプは画像の明暗情報を使うのに対してノーマル(法線)マップは各面の向きをRGBで表現します。
ノーマルマップはバンプマップをより進化させたものです。

しかしノーマルマップを手描きで作るの厳しいです。
ノーマルマップはハイポリゴンの形状の凹凸情報をローポリゴンに焼き付けることで作成します。
こんな画像がノーマル(法線)マップ


ノーマルマップはリアルな3DCGには必須とも言える技術です。
ゲームなどで性能が上がったとはいえ大量のポリゴンをリアルタイムに操作する事はできません。
ゲームではハイポリゴンのリアルな凹凸をローポリゴンに使う事で軽くてリアルなキャラクターなどを実現しています。

ノーマルマップをハイポリゴンモデルからベイクする
もちろんblenderでも作成できます。
今回は簡単なモデルになりますがノーマルマップを作ってみましょう。

まずUV球を作成します。
スカルプトモードにしてDynatopoをオンにして適当に模様を描きます。
その後オブジェクトモードに戻ってスムーズシェーディングをかけ、更にサブディビジョンサーフェスをかけて滑らかにし適用します。
これがハイポリゴンのモデルになります。
そして再びUV球を追加してスムーズシェーディングをかけます。
これがベイク用のローポリゴンモデルです。
追記
ハイポリからローポリへベイクするには両方のオブジェクトが重なっている(同位置にある)必要があります。





次にローポリのUV球のベイク準備をします。
シェーダーエディターで新規マテリアルを作成し、画像テクスチャノードを追加します。
そして新規を押しノーマルマップ用の画像を作成します。
この画像ノードはどこにも繋がなくても大丈夫ですが、ベイクするにはマテリアル内に存在する必要があります。




ノーマルをベイクするにはレンダープロパティタブにあるベイクでベイクタイプをノーマルにします。
そして選択→アクティブにチェックを入れます。
ハイポリ→ローポリの順にShiftを押しながら選択してベイクを押すとノーマルがテクスチャとしてベイクされます。
しかしベイク結果が変です。
こういう時は、選択→アクティブを展開してケージにチェックを入れ押し出しを1mにします。
そして再度ベイクします。
今度は上手くいきました。
ベイクした画像は忘れずに保存して下さい。
 



ノーマルマップの設定をします。
シェーダーエディターでノーマルマップの画像の色空間をNon-Colorにします。
そしてベクトル→ノーマルマップノードを追加します。
画像のカラーとノーマルマップノードのカラーを繋いで、UVマップを指定し、ノーマルをプリンシプルBSDFノードなどのシェーダーのノーマルに繋ぎます。
これで完成です。
レンダープレビューで結果を確認しましょう。

バンプマップと同じく実際には形状としては変化していませんが、少ないポリゴンでも細かいディテールを再現できます。

追記
ベイクのためにはUVマップが必要ですが手描きする訳ではないのでスマートUV投影などの簡単な方法で充分です。