この記事ではUnityのShderforgeを使って浜辺に打ち寄せる波のシェーダーの作り方を紹介します。
このような寄せては返す波の表現です。 Planeにアサインするだけで使えるものを作っていきます。
サンプル
STYLY GALLERYからサンプル空間を体験できます。
記事で紹介しているUnityプロジェクトのダウンロードはこちらからできます。 Wave_Sample
プロジェクトデータには各種プラグインは入っていませんので使用する際はご自身でインストールしてからご利用ください。 Playmaker SteamVR Plugin
Shaderforgeで新しくシェーダーを作る
シーンには波に使う1枚のPlaneと砂浜に見立てた1枚のPlaneがあるだけです。 Shaderforgeを起動してNew ShaderからLit(PBR)で新しくシェーダーを作ります。
透明度を使用するのでBlend Modeを”Alpha Blended”に変更します。
STYLYで使用するためにOpenGL ES3.0にチェックを入れます。
Heightmapを使って形状を変化させる
グレースケールのテクスチャを使って実際にポリゴンの形状を変化させます。 実際にオブジェクトの形状を変えることでより説得力のある表現が可能になります。
このテクスチャはPhotoshopの雲模様で作りました。 このテクスチャをShaderforgeで使用していきます。 テクスチャをそのままドラッグしてTexture2Dノードを作成します。
UVをスクロールさせて波のアニメーションの作ります。
PannerとUV Coordノードを作成して、テクスチャとつないでいきます。 このままでは一方方向にスクロールするだけなので行ったり来たりする動きを入れていきます。
行ったり来たりはSinを使うことで実装出来ます。 Timeで行ったり来たりの速度とRemapで範囲を設定します。 Normal Directionを使って頂点が移動する向きを取得してそれをMultiplyで合わせます。 それをVertexOffsetにつなぐことで実際にオブジェクトの形状を変化させることができます。
このままではシーンには適用されません。 新しく作ったシェーダーを割り当てたマテリアルをPlaneにアサインにしてインスペクタから使用するテクスチャを指定します。
これでPlaneの形状に変化が出ました。 テクスチャのグレースケールによって頂点が法線の方向にオフセットされています。
波の高さの調整
波全体に上下の動きをつけて動きにボリュームをつけていきます。 Waveheightというスライダーを作って調整できるようにします。
Wavewidthというスライダーも作って波が打ち寄せる幅を調整できるようにします。
Wavedirection というValueを作って波全体が動く方向を指定します。
ここではZ方向だけに移動する設定にしています。
Heightmapの追加
さらにHeightmapを追加していきます。
白い部分が盛り上がる感じになるのでこれをスクロールさせて定期的に押し寄せる波の表現に使います。
PannerとUV Coordの間にAddを挟んでVector2をつないでいます。 これはUVを少し移動させているだけですが波全体の動きに合うように動き出すポジションを変えました。 雲模様のテクスチャとAddで重ねてNormal Dirにもつないでいきます。
テクスチャを指定することでマテリアルに反映されます。
グラデーションのテクスチャの動きも追加されました。
Normalmapの追加
さらにディテールを追加するためにNormalmapを追加します。 細かいディテールの表現はNormalmapを使うととてもやりやすいです。
このテクスチャは雲模様の画像をPhotoshopで法線マップに変換したものです。 NormalmapもUVをスクロールさせて動きをつけていきます。
インスペクタからテクスチャをしてあげると表面にNormalmapの表現が追加されます。
海っぽい見た目になりました。
海の色をつけていく
海っぽい色にするために明るい色と暗い色を混ぜていきます。
Frenelを適用してカメラの向きで見た目が変わるようにします。 グラデーションのHeightmapをカラーとして使います。 白い部分をそのまま白として重ねて波しぶきっぽい雰囲気にしてみます。
ここではBlendノードを作ってScreenで重ねています。
Alphamapの使用
まだ波の先端がまっすぐのままなのでナミナミの形状にしてあげます。 ここではナミナミのテクスチャを使って透明度で表現します。
この白い部分だけが見えるように設定していきます。 テクスチャをValueをつないでOpacityにつなぎます。 Valueの値で透明度の調整ができるようになります。
planeの影は必要ないのでCast Shadowをoffにします。 これで波のシェーダーの完成です。
この記事ではUnityのShaderforgeを使って波のシェーダーの作り方を紹介しました。 Vertex offsetでオブジェクトの形状をテクスチャで変化させるといろいろな表現ができます。 モデリングする必要がなくなるので使い方次第で手間が省けると思います。 UnityからSTYLYにアセットをアップロードする方法 この記事を読む