3DCGテクスチャリング

メッシュに凹凸を加えるノーマル、バンプ、ディスプレイスメントのマップとは?

岩やレンガ、古めの建物などを表現する際に表面のでこぼことした感じを出すことで、リアルな感じを表現できるのですが、凹凸を加えるために多くの頂点やポリゴンを使うとなるとレンダリング時間に影響を与えるので、リアルさを取るか、パフォーマンスを取るのか悩んでしまいますよね。

しかし、3DCG制作ではメッシュ本体に凹凸を作成せずとも、立体的な表面を表現できるノーマルマップ(Normal Map)、バンプマップ(Bump Map)、ディスプレイスメントマップ(Displacement Map)の3つが用意されており、プロジェクトの規模やシーンによって使い分けることが出来ます。

ノーマル、バンプ、ディスプレイスメントはどれも凹凸を表現できるマッピングではあるものの、使用するマップによって凹凸の効果が異なります。こちらの記事では似ているようで、それぞれ違う役割を持つ3つのマップについて紹介していきます。

ノーマル、バンプ、ディスプレイスメントマップを使用するケース

ノーマル、バンプ、ディスプレイスメントは作成したメッシュから各種マップに変換したり、PBRテクスチャを配布しているサイトやサービスで入手することが出来ます。

上のPoly Havenで入手したレンガのテクスチャのファイルを確認してみると、ベースカラー(Diffuse)の「diff」に加えて、ノーマルマップ(Normal)の「nor」、ディスプレイスメント(Displacement)の「disp」のファイルが用意されています。こちらではバンプマップは含まれていませんが、素材配布サービスによってはバンプマップも用意している場合があります。

PBRテクスチャを使用する際にノーマルマップやディスプレイスメントも合わせて反映したいところですが、オブジェクトがカメラから遠くの位置にあったり、凹凸を表現する必要が無い場合などはベースカラーのテクスチャのみで十分だったりするので、必要に応じて反映させるのがベストです。

ノーマルマップやディスプレイスメントマップは光の影響を受けるマップなので、カメラに映らないオブジェクトまでに反映させてしまうと、レンダリング時間がかなり掛る可能性があります。カメラより近いエリアにはマッピングを反映し、遠くにあるものにはマップを反映しないような感じでテクスチャリングをするようにしましょう。

バンプマップ(Bump map)

凹凸を表現するマッピングで一番古いものがバンプマップで、白黒のテクスチャが特徴です。

1978年に発表されたマッピングであり、現在では後述するノーマルマップが一般的になっているので、テクスチャ配布サイトなどではバンプマップを見かけることが少なくなったものの、同じ白黒テクスチャのデイスプレイスメントマップでも代用可能です。

マップにある白黒の情報はバンプマップとして変換することで高低を出力します。黒が低い凹の部分で、白が高い凸の部分になります。上の画像は平面にベースカラーのテクスチャを反映したもので、凹凸がまだ見えない状態。しかし、バンプマップを反映することで、より立体的になりました。

使用する3DCGソフトウェアによってマップの反映方法が若干異なる場合がありますが、多くの場合はバンプまたはデイスプレイスメントのテクスチャを「バンプ(Bump)」ノードに接続し、バンプノードをマテリアルの「ノーマル」に接続します。

上の画像はBlenderのシェーダーエディターのもの。バンプマップの画像テクスチャの「色空間」を「非RGB」にし、バンプノードの「高さ」に接続して、さらにプリンシプルBSDFの「ノーマル」に接続しています。凹凸の強度は「距離」で調整するのですが、デフォルトの「1」だと強すぎるので、「0.45」などの低い数値にすることをおすすめします。

ノーマルマップ(Normal map)

別名「法線マップ」とも呼ばれるノーマルマップは面の向きである法線(ノーマル)を基準に出力するマップです。一見すると、紫色のマッピングですが、メッシュの法線のXYZ軸の向きをRGB(赤緑青)として変換しているので、3色で出来たマッピングです。

高低のみを表現するバンプマップに比べて、より多くの情報を持っており、光を当てる時により自然な感じを出すことが出来るため、2000年代以降から現在に至るまで一般的に使われるようになりました。

上がノーマルマップを反映させたもの。影の部分をよく見てみると、バンプマップに比べてよりリアルに近づいている感じです。

ノーマルマップを反映させるにはバンプマップと同様にノーマルマップのテクスチャを「ノーマルマップ」のノードに接続し、ノーマルマップのノードをマテリアルの「ノーマル」に接続することで反映可能です。Blenderの場合は「強さ」の項目から凹凸の強度を変更できます。

なお、ノーマルマップにはOpenGLDirectXの2種類があり、3DCGソフトウェアによって利用できるノーマルマップが異なります。このOpenGLとDirect Xの違いはY軸(G)の方向となっており、DirectXのノーマルマップをOpenGLに対応したBlenderに読み込む場合はY軸(G)を反転させることで対応可能です。

バンプマップとノーマルマップはマテリアルで凹凸を表現するため、ローポリゴンのメッシュなどにおすすめです。しかし、あくまでも「立体的に見える」だけで、実際に立体的になっているわけではありません。カメラの位置に近い被写体だと表面が滑らかに見えてしまう可能性があるので、その際は後述するディスプレイスメントマップがおすすめです。

ディスプレイスメントマップ(Displacement map)

ディスプレイスメントマップはバンプマップと同じ白黒のテクスチャで、白黒の情報を使って高低を表現しますが、ジオメトリに影響を与えるという点でバンプマップとの大きな違いがあります。

ディスプレイスメントマップの効果を最大限に活かすには、メッシュの分割数を増やす必要があります。前述したバンプマップとノーマルマップの場合、頂点が4つのみの平面でも凹凸を表現できましたが、ディスプレイスメントマップだと上手く行かないので、細分化して529の頂点にしたものを今回使用します。

ディスプレイスメントマップは多くの場合、ディスプレイスメントのノードに接続し、そのノードをマテリアル出力の「ディスプレイスメント」に接続します。Blenderの場合は、必要に応じて「中間レベル」を「0」などにし、「スケール」の項目から凹凸の強度を変更します。加えてマテリアルプロパティにある「設定」、「サーフェス」の「ディスプレイスメント」で「ディスプレイスメントとバンプ」を選択します。

ディスプレイスメントマップを反映したものがこちら。ディスプレイスメントの白黒の情報を元にメッシュの頂点などを持ち上げることで、立体的になります。

実際にメッシュを調整せずに凹凸を表現できるという点ではすごく良いのですが、ローポリゴンのメッシュには使えず、ノーマルマップに比べてレンダリングの時間も掛るので注意が必要です。

メッシュに凹凸を加える時にどれを使うか悩む場合は、とりあえずPBRテクスチャの場合はノーマルマップを使用し、カメラに近い位置にあるオブジェクトの場合はディスプレイスメントを使うと良いでしょう。

また、ノイズテクスチャを使って凹凸を表現する場合はノーマルマップとして出力するか、ノイズをバンプマップに接続することもできるので、必要に応じて使い分けてみてください。

(MIKIO)

mikio

コマーシャルを中心に企画から撮影、編集などの映像制作に10年携わる。最近3DCG制作にも興味を持ち始め、学んだことを備忘録として残したり、独学で3DCGを学びたい初心者にもわかるようにbe CG Artist!では3DCG制作で役に立つチュートリアルを紹介していきます。

関連記事

Back to top button