はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】MaterialにNormalMapを設定することで見た目をクオリティーアップさせる

はじめに

今回はNormalMapについて取り上げたいと思います。

f:id:hanaaaaaachiru:20210619010926p:plain
左: NormalMapあり,右: NormalMapなし

NormalMapを使うことでモデルの表面の法線を設定することができ、光の反射の仕方などに影響を及ぼすことができます。

また実際にメッシュに凹凸をつけたりすればいいのではないかと思われるかもしれませんが、公式ドキュメントには以下のように書かれています。

このような場合に、そんな小さなディティールを “実際の” ジオメトリで作成するのは、通常、よい方法ではありません。右側に、ディティールのネジ一個を作成するのに必要なポリゴン数が表示されています。実際にモデル表面にディティールを沢山作り込んだ大きなモデルは、描画するためにとても多くのポリゴンを必要とします。このような状況は避けるべきなので、実際のディティールを作り込む代わりに法線マップを使い、大きなモデルのポリゴン数をできるだけ抑えます。

法線マップ(Normal Map)(Bump mapping) - Unity マニュアル

今回は左図にあるようなただの円柱を、NormalMapを用いてリアルな床っぽく見せることを目的にやっていきたいと思います。

早速みていきましょう。

NormalMapとは

少し知っている方には青紫のテクスチャの奴で伝わるかもしれませんが、例えば以下の画像みたいなものです。

f:id:hanaaaaaachiru:20210619011427p:plain
NormalMap

Normal Mapピクセル単位で法線ベクトルを表しています

各ピクセルの色はRGB(赤・緑・青)の0 ~ 1の3つの値で表現することができますが,それぞれをXYZ軸の-1.0 ~ 1.0として見立てます。
(Zが上方向になります)

f:id:hanaaaaaachiru:20210824231924p:plain
RGBとXYZベクトルの対応

テクスチャからNormalMapを自動生成する

最初に貼ったサンプルはNormal Mapをテクスチャから自動で生成してくれるサイトを利用しました。

cpetry.github.io

UnityでNormalMapを設定する

作成したNormal MapUnityに持ってきて適応してみましょう。

Texture typeNormal Mapにすることで、Normal Mapとして利用することができます。

f:id:hanaaaaaachiru:20210825000807p:plain
NormalMapの設定

次にMaterialを作成し、テクスチャ・NormalMapを適応してあげれば準備は完了です。

f:id:hanaaaaaachiru:20210825001211p:plain
マテリアルの作成

あとは任意の3Dオブジェクト(今回はCylinder)に先程作成したマテリアルを適応してあげればサンプルの完成になります。

f:id:hanaaaaaachiru:20210825001313p:plain
3DObjectにマテリアル適応
f:id:hanaaaaaachiru:20210619010926p:plain
完成品

さいごに

Normal Mapをつけるだけで見た目がグッと上がって、ただのCubeとかでもそれなりの見た目にすることができると思います。

またアセットを購入したりした場合でも、よくNormal Mapが同梱されていても適応してないとかもあるので、気にしてみると良いかもしれません。

ではまた。