Skip to content

Instantly share code, notes, and snippets.

@rkandas
Last active April 16, 2022 19:29
Show Gist options
  • Save rkandas/8b940b7c443391b8e2b07a0d3c5d02df to your computer and use it in GitHub Desktop.
Save rkandas/8b940b7c443391b8e2b07a0d3c5d02df to your computer and use it in GitHub Desktop.
using System.Reflection;
using UnityEditor.ShaderGraph;
using UnityEngine;
[Title("Custom", "Image", "Sobel Edge Detection")]
public class SobelNode : CodeFunctionNode
{
public SobelNode()
{
name = "Sobel Edge Detection";
}
protected override MethodInfo GetFunctionToConvert()
{
return GetType().GetMethod("SobelFunction",
BindingFlags.Static | BindingFlags.NonPublic);
}
static string SobelFunction(
[Slot(1, Binding.MeshUV0)] Vector2 uv,
[Slot(2, Binding.None)] SamplerState SS,
[Slot(3, Binding.None)] out Vector4 RGB
)
{
RGB = Vector4.zero;
return @"
{
float2 delta = float2(0.002, 0.002);
float4 hr = float4(0, 0, 0, 0);
float4 vt = float4(0, 0, 0, 0);
hr += _MainTex.Sample(SS, (uv + float2(-1.0, -1.0) * delta)) * 1.0;
hr += _MainTex.Sample(SS, (uv + float2( 0.0, -1.0) * delta)) * 0.0;
hr += _MainTex.Sample(SS, (uv + float2( 1.0, -1.0) * delta)) * -1.0;
hr += _MainTex.Sample(SS, (uv + float2(-1.0, 0.0) * delta)) * 2.0;
hr += _MainTex.Sample(SS, (uv + float2( 0.0, 0.0) * delta)) * 0.0;
hr += _MainTex.Sample(SS, (uv + float2( 1.0, 0.0) * delta)) * -2.0;
hr += _MainTex.Sample(SS, (uv + float2(-1.0, 1.0) * delta)) * 1.0;
hr += _MainTex.Sample(SS, (uv + float2( 0.0, 1.0) * delta)) * 0.0;
hr += _MainTex.Sample(SS, (uv + float2( 1.0, 1.0) * delta)) * -1.0;
vt += _MainTex.Sample(SS, (uv + float2(-1.0, -1.0) * delta)) * 1.0;
vt += _MainTex.Sample(SS, (uv + float2( 0.0, -1.0) * delta)) * 2.0;
vt += _MainTex.Sample(SS, (uv + float2( 1.0, -1.0) * delta)) * 1.0;
vt += _MainTex.Sample(SS, (uv + float2(-1.0, 0.0) * delta)) * 0.0;
vt += _MainTex.Sample(SS, (uv + float2( 0.0, 0.0) * delta)) * 0.0;
vt += _MainTex.Sample(SS, (uv + float2( 1.0, 0.0) * delta)) * 0.0;
vt += _MainTex.Sample(SS, (uv + float2(-1.0, 1.0) * delta)) * -1.0;
vt += _MainTex.Sample(SS, (uv + float2( 0.0, 1.0) * delta)) * -2.0;
vt += _MainTex.Sample(SS, (uv + float2( 1.0, 1.0) * delta)) * -1.0;
hr = sqrt((hr.r * hr.r) + (hr.g * hr.g) + (hr.b * hr.b));
vt = sqrt((vt.r * vt.r) + (vt.g * vt.g) + (vt.b * vt.b));
RGB = sqrt(hr * hr + vt * vt);
}
";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment