Skip to content

Instantly share code, notes, and snippets.

@forestrf
Forked from mattatz/SobelFilter.shader
Created January 27, 2017 21:53
Show Gist options
  • Save forestrf/4dccf221750f5097365a237fbb9fbab5 to your computer and use it in GitHub Desktop.
Save forestrf/4dccf221750f5097365a237fbb9fbab5 to your computer and use it in GitHub Desktop.
Sobel filter shader for Unity.
Shader "Mattatz/SobelFilter" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_DeltaX ("Delta X", Float) = 0.01
_DeltaY ("Delta Y", Float) = 0.01
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGINCLUDE
#include "UnityCG.cginc"
sampler2D _MainTex;
float _DeltaX;
float _DeltaY;
float sobel (sampler2D tex, float2 uv) {
float2 delta = float2(_DeltaX, _DeltaY);
float4 hr = float4(0, 0, 0, 0);
float4 vt = float4(0, 0, 0, 0);
hr += tex2D(tex, (uv + float2(-1.0, -1.0) * delta)) * 1.0;
hr += tex2D(tex, (uv + float2( 0.0, -1.0) * delta)) * 0.0;
hr += tex2D(tex, (uv + float2( 1.0, -1.0) * delta)) * -1.0;
hr += tex2D(tex, (uv + float2(-1.0, 0.0) * delta)) * 2.0;
hr += tex2D(tex, (uv + float2( 0.0, 0.0) * delta)) * 0.0;
hr += tex2D(tex, (uv + float2( 1.0, 0.0) * delta)) * -2.0;
hr += tex2D(tex, (uv + float2(-1.0, 1.0) * delta)) * 1.0;
hr += tex2D(tex, (uv + float2( 0.0, 1.0) * delta)) * 0.0;
hr += tex2D(tex, (uv + float2( 1.0, 1.0) * delta)) * -1.0;
vt += tex2D(tex, (uv + float2(-1.0, -1.0) * delta)) * 1.0;
vt += tex2D(tex, (uv + float2( 0.0, -1.0) * delta)) * 2.0;
vt += tex2D(tex, (uv + float2( 1.0, -1.0) * delta)) * 1.0;
vt += tex2D(tex, (uv + float2(-1.0, 0.0) * delta)) * 0.0;
vt += tex2D(tex, (uv + float2( 0.0, 0.0) * delta)) * 0.0;
vt += tex2D(tex, (uv + float2( 1.0, 0.0) * delta)) * 0.0;
vt += tex2D(tex, (uv + float2(-1.0, 1.0) * delta)) * -1.0;
vt += tex2D(tex, (uv + float2( 0.0, 1.0) * delta)) * -2.0;
vt += tex2D(tex, (uv + float2( 1.0, 1.0) * delta)) * -1.0;
return sqrt(hr * hr + vt * vt);
}
float4 frag (v2f_img IN) : COLOR {
float s = sobel(_MainTex, IN.uv);
return float4(s, s, s, 1);
}
ENDCG
Pass {
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag
ENDCG
}
}
FallBack "Diffuse"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment