今回は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
特定のプロパティ名から直接特定の値を取得できる
Shader GraphはBlack boardでプロパティに特定の名前と型が一致すると、それに対応した値を取得することができます。
例えば冒頭に紹介した動画内では、Black boardに「_CameraOpaqueTexture」という名前でプロパティを作成することで、カメラの描画結果を取得することができるそうです。裏仕様みたいでわかりにくいですが、そういうことができるみたい。
HDRPでは「_CameraOpaqueTexture」プロパティは使えない
_CameraOpaqueTextureプロパティはHDRP環境では利用できません。その代わりにもっと簡単で分かりやすくノード化されています。
ノード構成
LitShader Graphで作成してみました。
HD Scene Color
このノードを利用することで、描画されている画面を映し出します。今回はそれに動画で紹介されたNoiseを加えることで歪みを表現しています。
Metallic:1
Smoothness:0
完成!!
問題点
・輪郭があるのが気に入らない
・おそらくHD Scene Colorで光を受けた描画結果にさらに光を加えているため、歪み越しにみたものの色味が違う
→シェーダー を適用するオブジェクトが光を受けないようにする必要がある?
Unlit Shaderにすればいいかもしれないと試したところ
成功しました!
普通のUnlit Shader GraphではなくHDRP>Unlit
から選択したShader Graphです。
先ほどのdistortion(歪み)部分をConvert To Sub GraphでSub Graph化しました。
初めてSub Graphにしたのですが、こんなアイコンだったんですね!
そして、このSub GraphをUnlit Shader GraphのColorに突っ込んで、
Unlit ShaderのSurface TypeをTransparentに設定するだけ
輪郭も消えて、色味も同じです。
歪ませてみて気がついたのですが、結構ぼやけますね。またぼやけるのも直せたら追加しておきます。
面白い表現見つけた
Unlit ShaderのAlphaを1より低く設定すると面白い表現ができます。
Alphaを0.2にしてみました
この設定でShader越しにみたものは全てぼやけて2つに見えるというShaderの完成!
強く頭を打って倒れる瞬間とか?に使えます(適当笑)
それではまた