ノーマルマップで表現できない凹凸

ノーマルマップって?

簡単に説明すると、メッシュの形状を変えることなく凹凸を表現する手法で用いるテクスチャの一つです。

凹凸を表現する場合には大量のメッシュが必要になるため、ゲームなどリアルタイム性を重視する場合は処理能力の面で問題になることがあります。

そのため、比較的計算の軽いノーマルマップを使用することにより疑似的に凹凸を表現することがあります。


SubstancePainterでの作成方法

Bakeする際に、ハイポリを設定するだけで自動でやってくれます。

ノーマルマップで凹凸を表現できない場合

ノーマルマップでは表現できない凹凸というものがあります。

あくまで疑似的な凹凸なので、仕組み上避けられない場合は別の手法を使用することになります。

面に垂直な突起のある物体

f:id:hildsoft:20170424032213p:plain

このような物体は、ノーマルマップが上手く働きません。

試しにベイクしてみると、このようになります。

f:id:hildsoft:20170424032221p:plain

AOなどは作成されているのですが、どう見ても凹凸があるようには見えないですね。

ノーマルマップの仕組みをざっくり解説

ノーマルマップは、メッシュが反射する光をずらして疑似的に凹凸があるように見せるために、ローポリとハイポリで凹凸の差を記録したテクスチャです。

f:id:hildsoft:20170424032252p:plain

1.入射光は、ローポリでもハイポリでも同じです。

2.光は面に対して入射角と反射角が一致します。

3.本来は平面に光が当たっているだけですが、ノーマルマップの情報を使って反射光の向きを変えることで凹凸を表現します。

つまり、ローポリとハイポリで、反射光の差がないことには、ノーマルマップは機能しないのです。

べベルを付けて実験

f:id:hildsoft:20170424032227p:plain

出っ張りにべベルをつけてみました。

この図で緑の部分は、ローポリとハイポリで反射光が異なるため、凹凸を表現できます。

しかし、青色の部分は、反射光が一致するか、そもそも光が当たらない部分になるため、凹凸を表現できないのです。

f:id:hildsoft:20170424032232p:plain

ベイクするとこのようになります。


f:id:hildsoft:20170424034555p:plain

ちなみに、ノーマルマップのもう一つの弱点として、角度がつきすぎると凹凸があるように見えなくなります。

違和感があるようなら、メッシュを増やして実際に凹凸を作った方が良いかもしれません。

問題が発生するシチュエーション

有機物などはローポリとハイポリで反射光が一致することはほとんど無いためそれほど気にする必要はないと思います。

背景オブジェクトやハードサーフェスのキャラや装備など、無機物ではきっちりとした面を構成することがあるので注意が必要です。