【Unity】URPで２DのEmissionを実装する時の設定

#概要
Unity公式でShaderGraphの説明動画で、2Dキャラを発光させるための説明があったのですが、実際のゲーム画面に反映させるために事前設定が必要で、調べるのに結構時間がかかったのでまとめました。

Unityバージョン：2019.4.3f1(LTS)
Universal RPバージョン：7.3.1

#参考
* [Unity道場2D編 Shader Graph はじめてみよう！基礎編（6月23日号）- Unityステーション](https://www.youtube.com/watch?v=3TXHMS8xFJ0)<br>
  Unity公式の解説動画。<br>
  Shader Graphを使ってSpriteを発光させる方法の説明がされてます。同じチャンネルでシリーズ化しているのでオススメ。<br>
* [【Unity】LWRPの2D向けライト機能を試してみる](http://tsubakit1.hateblo.jp/entry/2019/07/08/223020)<br>
  みんな大好きテラシュールブログ。<br>
  URPの前身であるLWRPの設定と使い方。ライトについてはURPとそれほど違いがない気がするので、十分参考になります。
* [How to make 2D GLOW in Unity!](https://www.youtube.com/watch?v=WiDVoj5VQ4c)<br>
  UnityでURPを使って２DのEmissionを実装を説明する動画。<br>
  <font color="Red">ぶっちゃけ、英語が出来る人はこれを見ればすべて解決するから、この記事を読まなくてもいい。</font><br>
  英語が苦手で敬遠してたらどうやって設定していいかわからなくてすごい時間食ったので、そういう人のために。

# 設定
### URPのインストール
Window->Package Managerでパッケージマネージャを開いて、『Universal RP』を選択してインストールします。
（最初、URPがUnityのUだと思って探すのに時間がかかった。。。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99896/55ad66dc-44ee-46fd-bd0e-a2897845d35d.png)

### パイプラインアセットの作成と設定
Projectタブ上で、Create->Rendering->Universal Render Pipeline->Pipeline Asset(Forward Renderer)でレンダリングアセットを作成します。
ライトも使いたい場合は[【Unity】LWRPの2D向けライト機能を試してみる](http://tsubakit1.hateblo.jp/entry/2019/07/08/223020)を参考に、2D Renderer Dataを作って適応させればOK。

作成したURPアセットをInspectorで開き、Quality->HDRのチェックを入れます。
<font color="Red">この設定をしないと、Sceneタブでは発光しますがゲーム画面上では発光しません。</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99896/f361efa3-3c87-09f7-59f5-346af779d4a5.png)
Edit->Project Settings...でProject Settingsを開き、Graphicsのタブを開いて、『Scriptable Render Pipeline Settings』に先ほど作成・設定したURPアセットを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99896/b937644a-0ee1-09ef-bc2b-567981ae4184.png)

### Shader Graphを使ってシェーダーとマテリアルを作成
ProjectからCreate->Shader->2D Rendererの『Sprite Lit Graph』か『Sprite Unlit Graph』で作成できます。
ライトを使う場合は『Sprite Lit Graph』で、使わない場合は『Sprite Unlit Graph』で作成します。
ライトを使う場合は、前述した通り『2D Renderer Data』を作成してURPアセットに適応させる必要があるので、注意。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99896/2be673af-4667-6a60-f119-44bddff3c46f.png)

Spriteの発光のShader Graphの中身については、[Unity道場2D編 Shader Graph はじめてみよう！基礎編（6月23日号）- Unityステーション](https://www.youtube.com/watch?v=3TXHMS8xFJ0)の7:00辺りからしているので、詳細は省略します。
（おもしろいので、最初から全部見るのがオススメ）
<font color="Red">ここから先は動画内で説明していることとほぼ同じなので、動画で見た通りにやれば大丈夫です</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99896/c7cf6450-f88e-ba35-7124-2fab466226d0.png)
ポイントは乗算するカラーのモードがHDRになっていることと、動画内では慣習として説明していますが、画像のReferenceを『_MainTex』にすることです。
『_MainTex』にすることで、Spriteにマテリアルをアタッチした時、マテリアルがそのSpriteに設定されているTextureを判別して、それに対してシェーダーを適応します。

ShaderGraphは左上の『Save Asset』を押さないと反映されないので注意。

マテリアルはProject上でシェーダーを右クリックしてCreate->Materialで、そのシェーダーが適応されたマテリアルが作成できます。


### ポストエフェクトを作成
まず、Hierarchy上でVolume->Global Volumeでポストエフェクトのためのゲームオブジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99896/6261a0d8-cc5a-0e1b-632e-82ec4e5a377d.png)
作成したゲームオブジェクトを選択して、Inspectorから、『Volume』のProfileの横にある『New』のボタンを押します。
すると、下に『Add Override』のボタンが発生するので、ボタンを押して、『Post-processing』から『Bloom』を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99896/2c4da1a0-366d-d6fd-86ab-e052ba4e8bb0.png)
Bloomは、とりあえず発光させたいだけなら、『Threshold』と『Intensity』を設定すれば大丈夫です。
『Threshold』は光らせる色のしきい値で、0に近づくと白っぽい色を全部光らせます。1だとHDRの乗算をしてない色は発光しないみたいです。
『Intensity』は光らせる強さ。好みで決めていい気がします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99896/01f26c46-b2fc-f668-e826-0ff35355abb9.png)

### カメラにPostProcessingを適応
カメラのInspectorを開いて、『Rendering』から『Post Processing』にチェックを入れます。
<font color="Red">この設定をしないと、Sceneタブでは発光しますがゲーム画面上では発光しません。</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99896/d513b9fd-d331-40b4-ea31-623c10642b5f.png)

# 最後に
あとは、作成したマテリアルをSpriteに適応すればSpriteが発光するはずです！

公式の動画を見ながらShaderGraphを触ってみたけど、２、３個作ってみたらそれだけでも結構慣れた気がします。
光らせたり、歪ませたりがそこそこ簡単に実装できそうなので、演出をちょっと豪華にするのが簡単にできそう。（願望）

『Sprite Lit Graph』とか『2D Renderer』がExperimentalなのが若干気になるけど、そう大きな改修は来ないと信じたい。。。