Unity UniversalRP 2D Renderer の機能依存性を調べる

Unity UniversalRP の 2D Renderer は[とても表現力が高く](https://kan-kikuchi.hatenablog.com/entry/Light2D)、是非使ってみたい！という気にさせます。

![スクリーンショット 2020-05-09 19.23.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/d419bc36-12a6-57d0-32e0-4a723b44b7b5.png)

とはいえまだExperimentalであり、今後どうなっていくかわからないところでもあります。

![スクリーンショット 2020-05-09 19.30.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/e736208f-0c24-9ad5-8428-85bd5e5c30b4.png)

ただ、それをもってしてもなおあまりある表現力なので、現時点(2019.3.12f)で他の機能との共存がどの程度できるのかを調べてみました。

##### Tilemapとの共存

これは問題ありませんでした。

![スクリーンショット 2020-05-09 20.52.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/8427c8d5-fd2d-2e61-bf95-6eae2c50dbb8.png)
normal付きTilemapに
URP/2D/Sprite-Lit-Default
を使用し、法線の向き、ライトの範囲などもちゃんと反映することを確認しました。

![スクリーンショット 2020-05-09 19.39.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/4a094781-0945-c2fb-ff04-1756d632bb90.png)

##### Shader Graph

Sprite Lit Graph
Sprite Unlit Graph
が用意されているので問題なく扱えます。

![スクリーンショット 2020-05-10 6.14.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/1088a275-85fa-e5ee-234b-f7e8a25dd26f.png)

##### Volume (PostProcess) デフォルトエフェクト

これも問題ありませんでした。用意されているPostProcessはそのまま使えるようです。

![スクリーンショット 2020-05-09 19.44.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/fee124be-8756-9d1f-7c69-b50c5f7665fc.png)

![スクリーンショット 2020-05-09 19.33.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/2874f778-c9d0-23dc-16c7-2f0faef485bb.png)

##### Volume (PostProcess) カスタム（追加）エフェクト

[こちら](https://qiita.com/t-matsunaga/items/09343ae7c683269374c4)で紹介されている方法でカスタムエフェクトの導入を試みたのですが、UniversalRP 2D Renderer で使用されているRender Pipeline ではカスタムエフェクトが反映されませんでした。この辺りはもう少し深く調べれば解決方法はありそうですが、今のところ不明です。

![スクリーンショット 2020-05-09 19.55.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/7bf3bea9-8dab-9c2e-7c93-d5877a091b65.png)

##### Particle System

こちらも問題なく使えました。2D Lightの範囲のみ明るく表示されています。

![スクリーンショット 2020-05-09 20.21.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/f330107c-adae-a5de-9ae9-3f18f8848bb3.png)

##### カメラのスタック（複数カメラの重ね合わせ）

UniversalRP 2D Renderer で使用されているRender Pipeline ではカメラのスタックはできないようです。

![スクリーンショット 2020-05-09 20.02.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/655a612d-0da7-c864-c4de-e393fec1408d.png)

2D表現カメラ(Orthographic)を使う際、雨や雪などのエフェクトのみ3Dカメラで写して立体感を出す、等を想定して試してみたのですが、そもそも重ね合わせができません。
カメラを3Dにして１つのカメラで表示する分には問題なく表示できます。

![スクリーンショット 2020-05-09 20.17.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/93bc5782-2742-665b-4da3-3d60fbb8643c.png)

##### 3Dオブジェクト

３Dオブジェクトの表示そのものはできるのですが、2Dライトの影響を受けないので画面上で浮いてしまいます。

![スクリーンショット 2020-05-09 20.40.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/ae92a302-3cfa-e4f9-f950-47e9c43011c2.png)

マテリアルにあてるシェーダーを
URP/2D/Sprite-Lit-Default
にすることでライトの影響を反映することはできるのですが、モデルの表裏表示がおかしくなっています。

![スクリーンショット 2020-05-09 20.43.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/f02aa02b-c1fe-3191-9d18-e72bbdd1538f.png)

→こちらは修正するシェーダーを[用意しました](https://qiita.com/ELIXIR/items/be46a3ed8968856af4f0)

##### まとめ

エフェクトも含め全て２D、カメラも１つのみで行う場合は問題なく2D Rendererを使用できると思いますが、３D表現を共存させたり、やや複雑なことをやろうと思うといろいろなところで破綻が出てきます。
これらの破綻はもっと深く突き詰めていけばどれも解決可能な気もしますが、現状だと情報も少なく、なかなか難しいのではないでしょうか。