URPで歪みシェーダーの実装

前書き

URPで背景のバッファの取得とその使用方法をまとめました。

サンプルはGitHubに上げています。
github.com


環境

Unity2020.3.14f1
Universal RP 10.5.1 (ForwardRenderer)
Shader Graph 10.5.1


実装方法

描画されたバッファを取得する

Universal Render Pipeline AssetOpaque Textureにチェックを入れます。

ShaderGraphではSceneColorノードでOpaqueTextureを取得できます。
入力はUV、出力はColorです。

歪ませる

歪みはテクスチャをサンプリングする際のUVをずらすことで表現できます。
サンプルではGradient Noiseノードを使用してUVをずらしています。

出力結果

おまけ:ノイズテクスチャをUVに適用する

ノイズテクスチャをスクロール

タイリングやオフセットは専用のTiling And Offsetノードがあり、OffsetTimeノードのTimeを入れると時間経過でスクロールします。

ノイズをUVに加算する

ノイズテクスチャは白黒で表現されており、値としては0~1になっています。
このまま使っても良いのですが、UVが全体的にずれることになり、実物と見える位置が大きく異なります。
そこで使うのがRemapノードです。
このノードは与えられた数値を指定した数値範囲にマッピングしてくれる優れものです。
今回では0~1-0.01~0.01の範囲にリマッピングしています。

あとは出力された値をScreenPositionと足し合わせることでUVがずれ、歪みとして表現されます。


最後に

URPではGUIでチェックを入れ、ShaderGraphでテクスチャが取得ができるので非常に簡単でした。


参考文献