本日は昨日に引き続きUnityでクリスタルなシェーダーを書いていきます。
昨日はクリスタルの表現において最もコア的なTransmissionとIOR(屈折)を実装しました。
これはViewDirectionノードによってカメラの角度を取得、hlsl で提供されているRefract関数を使用して屈折ベクトルを取得、それをUnityのRefractionProbeの反映させ、疑似的に屈折表現を行っています。
これだけでは当然ですがまだ美しいクリスタルとは呼べません。そのため今回は表層の質を作成していきます。
〇色の接続
昨日の状態ではただ単にRefrectionProbeの色を返すのみの処理になっています。 今回はここに独自のパラメータを定義してinspectorウィンドウからマテリアルのパラメータとして変更できるようにしていきます。
①ShaerGraphのBackBoardに新規のColor型のパラメータを作成します。
②作成したColorをRefrectionProbeの出力をMultiplayノードで接続します。
これによって自由な色を混ぜ合わせることができるようになります。
〇メタリックマップの指定
ShaderGraphのマスターノードにはMetallicのパラメータがあります。
デフォルトで0~1が指定でき、金属表現に使用されますが、ほかのパラメータ同様メタリックマップを使用することでUVに対してオブジェクトの金属感を不均一にすることができます。
今回は天然の鉱物のイメージのためこのような不均一さはリアリティを挙げるうえで非常に有用です。
①BackboradにTexture2D型、Float型のパラメータを追加します。
②下画像のようにSample Texture2Dノードを作成し、パラメータを接続します。
③マテリアルのMetallicMapとして次のような画像をアタッチします。
これによって鉱物特有の質眼が生まれます。
〇ノーマルマップの指定
次にノーマルマップを実装します。
実装は次のようになります。
行っていることはBackboardに定義したNormalMapをサンプリングしてFloat型のNormalの強さでNormalStrengthにつなぎノーマルマップの強さを変更しています。
ここまで出来たらSmoothnessの値を1に変更します。
これによって一気に宝石感が生まれます。
〇リムライト
最後にリムライトを実装してアクセントをつけていきます。
ここではBackboardにFloat型PowerとColorのEmissionColorを作成し、Fresnel EffectのPower、最終的な色としてMultiplayを出力に嚙ませています。
以上でクリスタルなシェーダーが完成しました。
Powerの強さによっては次のような魔術具のような内部発光の表現もできます。