【Unity】シェーダーグラフでSobel、Scharr、Prewittフィルタを作る

投稿者: | 2024-03-28

HDRPのカスタムパスとシェーダーグラフで、Sobelフィルタ、Scharrフィルタ、Prewittフィルタを作ってみました。

共通のシェーダーグラフを使い、インスペクタでフィルタ係数を設定します。

Custom Pass Volume

Custom Pass Volumeコンポーネントに、フルスクリーンカスタムパスを追加します。Fullscreenシェーダーグラフの設定されたマテリアルがアタッチされています。

シェーダーグラフ

8個のオフセットを定義しています。

オフセットにプロパティをかけて、フィルタの影響範囲を調節します。

1
3

スクリーンサイズで割って正規化します。

スクリーン位置を足して「HD Scene Color」ノードの「UV」に接続します。

サンプリングの結果にフィルタ係数をかけます。水平方向と垂直方向の2つのカーネルを使います。

フィルタ係数はインスペクタで設定します。

Sobelフィルタ

水平方向と垂直方向で別々に合計します。結果を2乗します。

2つの値を足して平方根を求めます。

この値をマスタースタックのBase Colorに入力します。Skyでエフェクトを無効化しています。また白黒にしています。

これでエッジ検出ができました。

Sobelフィルタ
Prewittフィルタ
Scharrフィルタ

コメントを残す

メールアドレスが公開されることはありません。