HDRPのシェーダーグラフを使って、簡単に流れる水面を作ってみました。
シェーダーグラフを作る
まず、Projectウィンドウで右クリックから新しいLitシェーダーグラフを作りました。
このシェーダーグラフアセットをダブルクリックするか、選択中にインスペクタの「Open Shader Editor」をクリックすると、シェーダーグラフウィンドウが開きます。
シェーダーグラフでは、UVに時間を足すことで、ノーマルマップをスクロールさせています。流れを複雑にするために、2つの「Sample Texture 2D」ノードに、別々の値のUVを入れて足し合わせます。
その前に、Graph Settingsでマテリアルタイプを「Translucent」、Surfaceタイプを「Transparent」にしました。これで、屈折のある水面を作れます。
シェーダーグラフを編集する
まず、UVノードの値を「Swizzle」ノードを使って、xyxyの値のVector4にし、これを時間と足し合わせます。その前に、時間に波の速さを表すVector4のプロパティをかけています。
インスペクタでは、x、yに1つ目のUV、z、wに2つ目のUVに対応する値を設定します。これはタイリングも同じです。
UVと時間を足し合わせたものを、Splitノードを使って2つのVector2に分けて、2つの「Tiling And Offset」ノードのUVに接続します。
同様にタイリングも2つに分けてTilingに接続しています。
この出力を「Sample Texture 2D」ノードに接続しています。テクスチャは同じものを使っています。
さらにそれらを「Lerp」ノードでブレンドしています。Tに入力するプロパティの値を0や1にすると、片方の値が使われます。
中間の値にすると速さの違う2つの波が現れます。
この値をノーマルマップの値に変換して、FragmentコンテキストのNormalブロックに接続しました。同じ値を伸縮したものをThicknessブロックにも接続してみました。
他にも、色や不透明度、Smoothnessなどをインスペクタ等で変えられるようにしています。
マテリアルを作る
できたシェーダーグラフアセットを右クリックして、マテリアルを作ります。
これで、このシェーダーグラフが設定されたマテリアルができるので、Surfaceタイプを「Transparent」にし、Refraction Modelを「Sphere」にして、ハイとマップをアタッチします。ディフュージョンプロファイルは、適当に葉っぱのものを使いました。
このマテリアルをシーンにあるPlaneオブジェクトに設定しました。
Refraction Modelを「Sphere」以外にすると、ノーマルマップの凹凸に合わせて奥にあるメッシュが歪んで見えないようです。
マテリアルをカスタマイズする
まず、ベースカラー用のプロパティのカラーピッカーで、不透明度を0にしました。
ノーマルマップの強さを0にすると、波は見えません。
この値を上げると、流れが現れます。