うにty生活

UnityChanを生活させたい

【Shader Graphに入門してみた】HDRPで歪み表現 3日目

f:id:tubakihimeLoveHate:20200930065240p:plain

今回はHDRPでの歪み表現についてです。

 

URPから実装されたShader Graphですが、LWRPとHDRPで少し歪みShader表現の方法が違うみたいなので、対応策をまとめました。

 

 

歪みShader作成

以下の動画のシールドで紹介されたものを、HDRP用にカスタマイズしていきます

 

※当記事で扱うのは歪み表現だけです。シールド自体の作成は別の記事に書いたので、そちらを参考にしてください。

【Shader Graphに入門しました】衝突検知とフレネル 2日目 - うにty生活

 

環境

Unity 2019.4.10f1

HDRP 7.4.1

Shader Graph 7.4.1

 

特定のプロパティ名から直接特定の値を取得できる

f:id:tubakihimeLoveHate:20200930053455p:plain

Shader GraphはBlack boardでプロパティに特定の名前と型が一致すると、それに対応した値を取得することができます。

例えば冒頭に紹介した動画内では、Black boardに「_CameraOpaqueTexture」という名前でプロパティを作成することで、カメラの描画結果を取得することができるそうです。裏仕様みたいでわかりにくいですが、そういうことができるみたい。

 

HDRPでは「_CameraOpaqueTexture」プロパティは使えない

_CameraOpaqueTextureプロパティはHDRP環境では利用できません。その代わりにもっと簡単で分かりやすくノード化されています。

 

ノード構成

LitShader Graphで作成してみました。

f:id:tubakihimeLoveHate:20200930054105p:plain



HD Scene Color

f:id:tubakihimeLoveHate:20200930054546p:plain

このノードを利用することで、描画されている画面を映し出します。今回はそれに動画で紹介されたNoiseを加えることで歪みを表現しています。

 

Metallic:1

Smoothness:0

 

 

完成!!

f:id:tubakihimeLoveHate:20200930055040p:plain


 

問題点

・輪郭があるのが気に入らない

・おそらくHD Scene Colorで光を受けた描画結果にさらに光を加えているため、歪み越しにみたものの色味が違う

→シェーダー を適用するオブジェクトが光を受けないようにする必要がある?

 

Unlit Shaderにすればいいかもしれないと試したところ

成功しました!

普通のUnlit Shader GraphではなくHDRP>Unlitから選択したShader Graphです。

 

先ほどのdistortion(歪み)部分をConvert To Sub GraphでSub Graph化しました。

初めてSub Graphにしたのですが、こんなアイコンだったんですね!

f:id:tubakihimeLoveHate:20200930055702p:plain

f:id:tubakihimeLoveHate:20200930055541p:plain

 

そして、このSub GraphをUnlit Shader GraphのColorに突っ込んで、

Unlit ShaderのSurface TypeをTransparentに設定するだけ

f:id:tubakihimeLoveHate:20200930055830p:plain



 

f:id:tubakihimeLoveHate:20200930060522g:plain

 

輪郭も消えて、色味も同じです。

歪ませてみて気がついたのですが、結構ぼやけますね。またぼやけるのも直せたら追加しておきます。

 

面白い表現見つけた

Unlit ShaderのAlphaを1より低く設定すると面白い表現ができます。

f:id:tubakihimeLoveHate:20200930061841p:plain


Alphaを0.2にしてみました 

この設定でShader越しにみたものは全てぼやけて2つに見えるというShaderの完成!

強く頭を打って倒れる瞬間とか?に使えます(適当笑)

 

それではまた