【Unity】シェーダーグラフでRoberts Crossエッジ検出を実装する

投稿者: | 2024-04-28

Roberts Crossエッジ検出を行うフルスクリーンシェーダーをシェーダーグラフで作成してみました。

概要

注目ピクセルの対角に位置するピクセル値の差を計算し、その勾配の大きさからエッジの強さを決定します。

シェーダーグラフ

まずピクセル単位のオフセットを定義します。エッジの太さを表すfloatプロパティをかけます。

OffsetScale: 1
OffsetScale: 3

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

Screen Positionを足します。UVとしてシーンカラーをサンプリングします。

対角に位置するピクセル値の差を計算します。

内積で差の大きさの2乗を求め、足して平方根を計算します。ピクセル間の強度差の大きさによって、明るさの変化が求められます。

HD Sample Bufferノードを使ってエフェクトの範囲からスカイを除外します。

しきい値を表すFloat型プロパティの値を引いて、Saturateノードに入力します。エッジ強度がしきい値以下の場合は0に固定されます。

Threshold: 0
Threshold: 0.2
Threshold: 0.3

最後にエッジの色をかけてマスタースタックのBase Colorに入力します。

Graph InspectorでBlend Modeを「Additive」にすると、エッジがシーンカラーに加算されます。

コメントを残す

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