夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

UnityのShaderGraphでのノーマルマップの扱いについてまとめる

本日はShader枠です。

筆者は基本的にコードを使用してShaderを構築することの方が多いですが、開発環境や状況によってShaderGraphを使用して構築する機会もあります。

ShaderGraphを使用する際にいつもノーマルマップの扱いを忘れてしまっていたので今回まとめていきます。

〇ノーマルマップのテクスチャがある場合

ノーマルマップのテクスチャがある場合については次のように実装します。

〇Litテンプレートを使用している場合

ShaderGraphでLitのテンプレートを使用している場合はSample Texture 2Dノードを使用して直接Normalのマスタースタック(シェーダーのエンドポイント)につなぎます。

これだけでノーマルマップとして扱われます。

ノーマルマップの強度を制御したい場合はNormal StrengthノードにSampleTexture 2Dノードの出力を接続します。

〇Unlitテンプレートを使用している場合

Unlitのテンプレートを使用する場合は自身でライトなどを実装する必要があります。

redhologerbera.hatenablog.com

次に法線情報を取得して、ライトと掛け合わせるLitシェーダーでのマスタースタックのNormalで行われている処理を自作する必要があります。

こちらは別途記事にしたいと思います。(結構複雑だと思っていますので)

〇ノイズなどをノーマルマップとして使用する場合

次にノーマルマップとして用意されていないものをノーマルマップのように使用する方法になります。

例えばノイズをノーマルマップとして使用することなどが想定されます。

こちらの場合はNormal From Heightノードを使用します。

こちらの方法ではプロシージャルなノーマルマップを構築できます。

最後に通常のテクスチャをノーマルマップとして使用する方法です。

こちらはNormal From Textureノードを使用します。

〇ブレンド

ShaderGraphではノーマルマップを混ぜ合わせることができます。

これにはNormal blendノードを使用します。

デフォルトで加算され2種のノーマルマップが合成された見た目を生み出します。

とりあえずUnlitノードで自作する以外の場合では上記の手法を覚えておけば大丈夫だと思います。

本日は以上です。