💧

水面シェーダー【Unity】【ShaderGraph】【2D】【URP】

2023/06/16に公開

はじめに

はじめまして、株式会社キッズスターで2Dアニメーションデザイナーをしています。Yamtakです。
水の中を表現するため、ShaderGraphで揺らぎのシェーダーを作成してみましたので紹介させていただきます。

本記事は Unlit 設定にしており、2Dのテクスチャ表示(uGUI の Image,SpriteRenderer)を想定しています。

参考

https://r-ngtm.hatenablog.com/entry/2019/07/31/084849

動作環境

Unity 2021.3.xx
ShaderGraph 12.1.xx
ユニバーサル レンダーパイプライン

完成イメージ

水の中を泳ぐゲームを作成するために、水中の表現をよりリッチにし、プレイヤーに没入感を与えることを目指しました。実際は重くなってしまったため、シンプルにして軽量化させていますが、この記事では面白さ重視でリッチなシェーダーの内容をご紹介いたします。

水面の表現ではVoronoiを使われる方が多いようなので、見習ってVoronoiで進めます。

実現したい内容は下記となります。

  1. ゲームは左から右へ進んでいくので、このシェーダーは右から左へスクロールさせたい
  2. 軽い揺らぎがあると水面らしくなりそう
  3. 画面全体を覆うとうるさいので、光の差し込む上部にだけ表示されるようにしたい

ノード全体

Noiseと移動をVoronoiに与えて、白黒のグラデーションを被せています。

ノード解説

ここからの解説はデザイナー目線で解説をしていきます。理解の深い方には説明不足感があるかもしれませんが、入門的な記事と理解してください。(「ふりがなプログラミング」みたいな表現を目指しました)

まず基本設定

背景やキャラクターの上に表示していきますので、Additiveが効率がいいだろうと判断しました。明るい箇所だけ見えるようになります。

右から左へのスクロール

シンプルな移動の構成です。

水面の表現(Voronoi)

Voronoiを使用してみたのですが、あまりにもツブツブが目立ったので、調整していきます。

Remapはたまに使用するのですが、一番シックリきた解説が下記でしたので、引用させていただきます。

こちらも使うノードは1つで、Remapノードというものです。これは、入力と出力にそれぞれの下限、上限を設定することで、入力された値を変化させます。この状態は-1から1の値を受け取り、出力時に0から1の範囲に置き換える設定になっています。

https://logmi.jp/tech/articles/326184#s12

揺らぎの表現(Noise)

Simple Noiseを足して歪みを表現しましたが、負荷が重くなってしまいましたので本番ではカットしました。

別のノードでも出来そうなので、興味のある方はチャレンジしてみてください。

画面上部に表示したい

UVから白黒のグラデーションを生成して、ここまでに作成したVoronoiに重ねています。

ただただ、上から下に掛かるだけのグラデーション表現なのですが、画面が見やすくなるよう、グラデ幅や濃度調整を行っています。こだわった分だけ増えてしまったノードですが、好みで削って良い物たちです。

プロパティの設定

いくつかはゲーム上から設定変更ができるよう、ブラックボードでプロパティの割り当てを行います。実際には英語で作成していましたが、本記事では伝わりやすいように日本語で記入してあります。

Materialの項目から各種数値を変更できるようになりました。もうちょっとネーミングセンスを磨きたいものですね。

うごっこランド紹介

今回紹介したシェーダーは下記コンテンツで確認する事ができます。興味のある方は是非プレイしてみてください。

『動いて遊んで学べるAR運動ゲーム うごっこランド』

ダイバーごっこ
KidsStar Inc.

https://youtu.be/ouaJ-yVGhm8

https://play.google.com/store/apps/details?id=jp.co.kidsstar.app.ugokkoland&hl=en_US

https://apps.apple.com/jp/app/動いて遊んで学べるar運動ゲーム-うごっこランド/id1640221377

KidsStar Inc.

Discussion