Blender のバンプマップは面がザラザラしてしまうので、より滑らかに表示されるノーマルマップを使いたいのですが、私はノーマルマップを直接描くことが出来ません。そこで、バンプマップを描いた後、バンプマップからノーマルマップを変換して作りたい!と思います。
この画像は Blender 3.5.0 の Eevee でレンダリングしました。
バンプマップとノーマルマップの違い
Blender で面の表面を凸凹にするには、バンプマップ(高さを指定)とノーマルマップ(面の向きを指定)が使えます。ノーマルマップは自分では描けないので、バンプマップを描きたいのですが、バンプマップではレンダリング結果が ギザギザ してしまいます。
これはバンプマップが高さを色の(0から255の)段階で表現しているためで、マテリアルの表面の設定やバンプマップの強さの設定にもよりますが、階段状の段差が目立って見えてしまう場合があるのです。
これに対してノーマルマップは面の向いている方向を表現しているので、バンプマップと比べてより滑らかに表面の凸凹を表現してくれるということのようです。
ノーマルマップを自分で描ければいいのですが、それはちょっと難しそうです。そこで、バンプマップを描いた後、そのバンプマップを変換してノーマルマップを作りたい!と思います。
Blender のアドオン Hight2Normal で変換
ちょうどよいツールが、Blender 用のアドオンとして公開されていたので、これを使用することにしました。
Height2Normal をインストール後、Blender の画像エディタでバンプマップの画像を開いた状態で、「ツール >Height2Normal > ノーマルマップに変換」を押すと、バンプマップをノーマルマップに変換するためのウィンドウが表示されます。そのままOKを押せばノーマルマップが作られます。
そのまま「画像>保存」を押して、名前を付けて保存しすれば、ノーマルマップとしてすぐに使えます。
「シェーダーエディタでバンプマップを押してからアドオンで変換する」流れなので、私はシェーダーエディタにバンプマップを残したままにしておいて、バンプマップを描きなおしたときにバンプマップに繋ぎ変えて(ギザギザでいいので)様子を確認したり、もう一度すぐに変換なおしたりしたりできるようにしています。
ツールはバンプマップの画像を解析して自動変換してくれているので、絵柄によってまだ少しザラザラする感じになる場合があります。より滑らかにするために、変換後のノーマルマップを他の画像ツールで開いて、ぼかしをかけると良いかもしれません。
色空間は非カラーに設定
他に気を付ける点として、テクスチャ画像の「色空間」は「非カラー」にしないと、想定通りのレンダリングにならないようです。
書籍「Blender 2.8 3DCG スーパーテクニック」によると、カラーの画像をテクスチャとして使用する通常の使い方の場合、色合いを調整する機能がデフォルトで働いているようです。画像をバンプマップやノーマルマップのような(見た目ではない)データとして使用する場合には、この調整をしないように色空間を非カラーに設定するということです。今まで自分が使っている感じだと、自動的に「非カラー」になってくれる時とそうならない時とあるようなので、気を付けておきます。
ハイポリゴンのモデルからノーマルマップをベイクする
Blender でバンプマップからノーマルマップへの変換する方法を調べていると、ほとんど情報が出てこないようで。どうやら、一般的な方法は、バンプマップを描いてノーマルマップに変換するのではなく、ほとんど同じ形で面の数が多く凸凹を面でちゃんと表現した別のハイポリのモデルを作って、そのモデルからノーマルマップをベイクするというのが、よいとされているようです。
確かに、これならバンプマップを描くよりよりリアルな凸凹を作れそうです。いや、どうだろう。服の布の表面を全部モデリングできる?それともシワだけベイクして、生地表面の凸凹と使い分ける(合成する)?
まだベイクする方法試していないですが、いつかこれもやれるようになりたいです。(そして、ノーマルマップを直接描けるようにもなりたい・・・)