- Код: Выделить всё
Shader "Hidden/Edge Color" {
Properties {
_MainTex ("Base (RGB)", RECT) = "white" {}
}
SubShader {
Pass {
ZTest Always Cull Off ZWrite Off
Fog { Mode off }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"
uniform samplerRECT _MainTex;
uniform float4 _MainTex_TexelSize;
uniform float _Treshold;
struct v2f {
float4 pos : POSITION;
float2 uv[5] : TEXCOORD0;
float z ;
};
v2f vert( appdata_img v )
{
v2f o;
o.pos = mul (glstate.matrix.mvp, v.vertex);
float2 uv = MultiplyUV( glstate.matrix.texture[0], v.texcoord );
o.uv[0] = uv;
o.uv[1] = uv + float2(-_MainTex_TexelSize.x, 0);
o.uv[2] = uv + float2(+_MainTex_TexelSize.x, 0);
o.uv[3] = uv + float2(0, -_MainTex_TexelSize.y);
o.uv[4] = uv + float2(0, +_MainTex_TexelSize.y);
return o;
}
half4 frag (v2f i) : COLOR
{
half4 original = texRECT(_MainTex, i.uv[0]);
// a very simple cross gradient filter
half3 p1 = original.rgb;
half3 p2 = texRECT( _MainTex, i.uv[1] ).rgb;
half3 p3 = texRECT( _MainTex, i.uv[2] ).rgb;
half3 p4 = texRECT( _MainTex, i.uv[3] ).rgb;
half3 p5 = texRECT( _MainTex, i.uv[4] ).rgb;
half3 p6 = (p2+p3+p4+p5)*0.25;
half3 diff1 = abs(p1-p2);
half3 diff2 = abs(p1-p3);
half3 diff3 = abs(p1-p4);
half3 diff4 = abs(p1-p5);
half3 diff=diff1;
if (diff2>diff) diff=diff2;
if (diff3>diff) diff=diff3;
if (diff4>diff) diff=diff4;
diff=diff*2-diff*diff;
diff=diff*2-diff*diff;
original.rgb = diff;
return original;
}
ENDCG
}
}
Fallback off
}