ShaderGraphでUGUIのマテリアルを作成しScreen Space - Overlayで表示したい(LWRP/HDRP)

はじめに

UnityのShaderGraph便利ですよね。 これをUGUIの要素にも使いたいのですが、 現時点では「Screen Space - Overlay」のCanvasとともに使うと 不具合が生じています。 この不具合を回避する方法をHDRPとLWRPの両方で見つけたのでメモします。

  • Unity: 2019.2.6f1

LWRP

  • Lightweight RP: 6.9.1
  • Shader Graph: 6.9.1

「Screen Space - Overlay」なCanvasを用意します。

2019 09 19 21 58 24

次のようなUnilitのノードを作成し、UGUIのImageのMaterialとしてアタッチします。

2019 09 19 21 59 17

2019 09 19 21 59 47

残念ながらうまく表示されず、真っ黒になってしまいます。

2019 09 19 21 56 07

本来表示されて欲しい絵は次のとおり。

2019 09 19 21 55 36

Canvasを「Screen Space - Camera」にすると、表示の不具合は解消されます。

2019 09 19 22 00 31

2019 09 19 21 55 36

しかし、「Screen Space - Camera」ではポストプロセスがUIにかかってしまいます。

2019 09 19 22 01 27

UI要素にはポストプロセスをかけたくない場合は「Screen Space - Overlay」を使いたくなります。

そこで、「Creatte > Shader > 2D Renderer > Sprite Unlit Graph (Experimental)」というノードを代わりに使います。

2019 09 19 22 02 34

2019 09 19 22 04 05

このMasterノードを使うと「Screen Space - Overlay」でも黒くならずに正しく表示されます。

2019 09 19 22 04 34

2019 09 19 22 05 06

ポストプロセスがかからず画面の上にOverlayで表示されるようになりました。

HDRP

  • HDRP: 6.9.1
  • Shader Graph: 6.9.1

「Screen Space - Overlay」なCanvasを用意します。

2019 09 20 08 23 02

次のようなUnlitのノードを作成し、UGUIのImageのMaterialとしてアタッチします。

2019 09 20 08 24 16

2019 09 20 08 24 31

すると画面いっぱいに拡大されて表示されてしまいます。

2019 09 20 08 24 56

本来欲しい絵はこちら。

2019 09 20 08 25 32

Canvasを「Screen Space - Camera」にすると、表示の不具合は解消されます。

2019 09 20 08 25 44

2019 09 20 08 25 32

しかし、「Screen Space - Camera」ではポストプロセスがUIにかかってしまいます。

2019 09 20 08 27 30

ポストプロセスをかけずにUIを描画するには 「Screen Space - Camera」のままで HDRPのUnlitのAfter Post-processを使うとよいです。

2019 09 20 08 28 46

2019 09 20 08 37 52

これでポストプロセスの後からUIを描画できました。

2019 09 20 08 37 15

マテリアルをアタッチした際に表示が乱れるかもしれません。

2019 09 20 08 36 49

マテリアルのプロパティを触ると直ります。

2019 09 20 08 37 12

おわりに

上記の方法で、とりあえずのところUIにShaderGraphを使えるようになりました。 今後のUnityのアップデートでShaderGraphにUI用のMasterノードが追加されてほしいですね。

新しい投稿
靴 2