[Unity]DISSOLVEエフェクトをShader Graphでやってみる

# こんな感じのものを作ります
<blockquote class="twitter-tweet"><p lang="und" dir="ltr"><a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://twitter.com/hashtag/ShaderGraph?src=hash&amp;ref_src=twsrc%5Etfw">#ShaderGraph</a> <a href="https://twitter.com/hashtag/URP?src=hash&amp;ref_src=twsrc%5Etfw">#URP</a> <a href="https://twitter.com/hashtag/Qiita?src=hash&amp;ref_src=twsrc%5Etfw">#Qiita</a> <a href="https://t.co/NrAiyzNbA9">pic.twitter.com/NrAiyzNbA9</a></p>&mdash; kazuma (@kazuma_f) <a href="https://twitter.com/kazuma_f/status/1346036468075044864?ref_src=twsrc%5Etfw">January 4, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 概要
ShaderGraphの練習でDISSOLVEエフェクトを作ってみました。
ShaderGraphはまだまだ新しい技術でどんどん更新されて行ってます。現時点での最新の操作手順を共有する為に投稿しました。

なお、この記事は海外YouTuber Brackeysさんの動画をベースにしています。
https://www.youtube.com/watch?v=taMp1g1pBeE&t=115s

# 前準備
Unityのバージョンは2019以降なら大丈夫だと思います。今回は最新の2020.2.1f1で新規作成しました。
![スクリーンショット (1540).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/5bf71ac2-7635-cc3b-bed6-1ec8464ff7ba.png)

テンプレートはHDRPもしくはURPを選択すると今回のテーマであるShaderGraphがすぐ使える状態になります。今回はシンプルで軽量なつくりのURPを選択しました。

![スクリーンショット (1541).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/c3fe9383-ec93-545e-429e-1ffcdb0c6140.png)

Unityが起動したらProjectからCreate > Shader > Universal Render Pipeline > Lit Shader Graphを選びます。
(最新バージョンならCreate > Shader Graph > URP > Lit Shader Graph)

![スクリーンショット (1542).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/28d3bfa8-f3cd-9e2d-08dd-3f9c17bb971f.png)

生成されたShaderGraphには適当な名前を付けてください。
次に、これから作るShaderGraphを適用させるマテリアルを作ります。
生成されたShaderGraphにマウスポインタを重ねた状態で右クリック。Create > MaterialでShaderGraphが適用されたマテリアルが作成されます（ShaderGraphの上で右クリックするのがポイントです）


![スクリーンショット (1543).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/0cfe6580-d6ec-65ef-15db-c621997fff85.png)

# ShaderGraphを編集する（準備１）
ShaderGraphをダブルクリックしてください
![スクリーンショット (1544).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/4a8c627a-f90e-13fc-4053-425a3b2c873c.png)
ShaderGraphを編集する画面が表示されます。画面が小さい時は編集エリア上にマウスカーソルを置いた状態でShiftキー + スペースキーで全体表示に切り替わります（もう一度押すと元に戻ります）

![スクリーンショット (1546).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/ff784257-a3d6-d282-4b2d-0f2d788fa246.png)

# ShaderGraphを編集する（準備２）
VertexとFragmentがShaderGraphを通して画面に表示される最終出力です。
今回のDissolveエフェクトの肝になる透明度(Alpha)が表示されていないと思います。画面右側Graph Inspector（タブはGraph Settings）のAlphaClipにチェックを入れるとFlagmentにAlphaが2つ表示されます。
![スクリーンショット (1547).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/fb27d37b-3de1-a169-4909-aae47024f5b1.png)
ついでにTwo Sidedにもチェックを入れておいてください

# ShaderGraphを編集する（いきなり最終形）
一つ一つのノードを解説すると冗長な記事になると思うので、最終的な完成図を載せます。
ですが、ShaderGraphは操作のコツをつかんだら後はただのパズルのようなものです（ノードごとの役割を理解する必要があります。個々で気になった箇所をその度ググるのが一番頭に入ると思います）
以降でノードを構築する時に必要なコツを挙げていきます。
![スクリーンショット (1550).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/3b1814d7-f90a-125f-ff72-1d8fd9559d79.png)
# ShaderGraphを編集するコツ（ノードを作成する）
まずノード（枠で囲まれた１つ１つのパーツがいわゆるノードです）を作成する方法は2つあります「右クリックで表示されるメニューからCreateNode」もしくは「何もノードを選択していない状態でスペースキーを押す」

![スクリーンショット (1552).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/1e6236a5-aa90-90ad-68bf-fc64c7f7b3f5.png)

作成したいノードの名前を検索欄に入力すると対象のノードを作成できます。
今回のサンプルは
Time
Remap
Simple Noise
Add
Step
Multiply

Color
Float
で構成されています。それぞれ検索欄に入力して完成図のようにつないでいきます。
※Colorだけ種類がたくさんありますがInput > Basic > Colorを選んでください

![スクリーンショット (1553).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/872687bf-57fa-992d-4f83-18a9c5f6a999.png)

# ShaderGraphを編集するコツ（その他）
ノード同士を線でつなぐのは感覚で出来ると思います。端末同士をドラッグでつなぐだけです。
線を消したい時は、その線をクリックして選択状態にした後、Deleteキー(macはCommand + back)で消せます。

Floatノードは数値を設定するためのものです。左の数字の枠内に数を入力すると設定数を変更できます。（Colorノードも同様に色を変更できます）

![スクリーンショット (1554).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/2b40c3ea-0850-5954-d1fd-1aafcabbf0f5.png)

# ShaderGraphを編集するコツ（適用）
ShaderGraphはノードを構築しただけでは画面に反映されません。変更を確認する時はその度、左上のSaveAssetを押してください。
![スクリーンショット (1555).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/80548d2c-0111-3842-ceae-4ccce926ab84.png)

# 結果を確認する
Unityの最初の画面に戻り冒頭で作成した（ShaderGraphを適用した）Materialを効果を付与したいオブジェクトにドラッグアンドドロップなどで適用させます。
実行させるとDISSOLVEエフェクトのアニメーションが見られます。
![スクリーンショット (1559).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/1e6094b0-3986-81c1-54ee-7e4ad6f6107a.png)


# 最後に
事細かに説明するとすごく長くなるので、つまづきそうな部分を中心に記事にしました。後は最初にリンクを張ったYouTube動画も参考にしながらやってみると大丈夫だと思います。
Floatの数字を変えたり、色を変えたり、Noiseの種類を変えたり、FloatをPropertiesに変えてみたり。応用できる場所はたくさんあります。楽しんでみてください:grinning:

# 追記
エフェクトが光らない方は以下の項目を確認してみてください
ShaderGraph上の光らせたい色のColorノードをMode: HDRにして
![スクリーンショット 2022-12-18 15.37.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/7c28a874-0c7c-9067-9f53-cf200cfed5f4.png)
色設定のIntensityを引き上げると光の強さが決められます
![スクリーンショット 2022-12-18 15.37.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/c585d22c-8523-81c0-d784-cf540093ea7f.png)
CameraオブジェクトのPostProcessingをONにしてください。
![スクリーンショット 2022-12-18 15.38.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/badd90e7-b50b-5623-fdbb-c05f96ae1396.png)
これでも光らない方はGlobal VolumeのBloomの設定も確認してみてください。

:::note info
光らせたいからとThresholdの数値をたくさん上げると逆に全く光らなくなります。少なめな数値で様子を見ながら調整してみると光ります！
:::