Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Shader "Sprites/Filters"
- {
- Properties
- {
- [NoScaleOffset]_MainTex ("Main texture", 2D) = "white" {}
- [KeywordEnum(Edges_Transparency, Edges)] _Mode("Mode", Float) = 0
- _Intensity ("", Range(1,20)) = 0
- }
- SubShader
- {
- Pass
- {
- Blend One OneMinusSrcAlpha
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #include "UnityCG.cginc"
- #pragma multi_compile _MODE_EDGES_TRANSPARENCY _MODE_EDGES
- #define MAX_INTENSITY 20
- #define PIXELATED_MULTIPLIER 20
- struct appdata
- {
- float4 vertex : POSITION;
- float2 uv : TEXCOORD0;
- float4 color : COLOR;
- };
- struct v2f
- {
- float2 uv : TEXCOORD0;
- float4 vertex : SV_POSITION;
- float4 color : COLOR;
- };
- sampler2D _MainTex;
- float4 _MainTex_TexelSize;
- float _Intensity;
- v2f vert (appdata v)
- {
- v2f o;
- o.vertex = UnityObjectToClipPos(v.vertex);
- o.uv = v.uv;
- o.color = v.color;
- return o;
- }
- //filters
- float4 edgeDetectionTransparent(v2f i)
- {
- float4 col = tex2D(_MainTex, i.uv);
- float4 col2 = tex2D(_MainTex, float2(i.uv.x - _MainTex_TexelSize.x,i.uv.y - _MainTex_TexelSize.y));
- float4 finalCol = float4((col - col2).rgb * _Intensity, col.a);
- finalCol.a = (finalCol.r + finalCol.g + finalCol.b)/3.0f * col.a;
- return finalCol;
- }
- float4 edgeDetection(v2f i)
- {
- float4 col = tex2D(_MainTex, i.uv);
- float4 col2 = tex2D(_MainTex, float2(i.uv.x - _MainTex_TexelSize.x,i.uv.y - _MainTex_TexelSize.y));
- float4 finalCol = float4((col - col2).rgb * _Intensity, col.a);
- return finalCol;
- }
- float4 inverseEdgeDetection(v2f i)
- {
- float4 col = tex2D(_MainTex, i.uv);
- float4 col2 = tex2D(_MainTex, float2(i.uv.x - _MainTex_TexelSize.x,i.uv.y - _MainTex_TexelSize.y));
- float4 finalCol = float4((col - col2).rgb * _Intensity, col.a);
- float par = 1 - finalCol.r;
- col.rgb *= par;
- //finalCol = float4(col.rgb - finalCol.rgb, col.a);
- //finalCol.a = (finalCol.r + finalCol.g + finalCol.b)/3.0f * col.a;
- return col;
- }
- float4 emboss(v2f i)
- {
- float4 col = tex2D(_MainTex, i.uv);
- float4 finalCol = tex2D(_MainTex, i.uv) + tex2D(_MainTex, float2(i.uv.x + _MainTex_TexelSize.x, i.uv.y + _MainTex_TexelSize.y)) +
- tex2D(_MainTex, float2(i.uv.x + _MainTex_TexelSize.x, i.uv.y)) + tex2D(_MainTex, float2(i.uv.x, i.uv.y + _MainTex_TexelSize.y))
- - tex2D(_MainTex, float2(i.uv.x - _MainTex_TexelSize.x, i.uv.y)) - tex2D(_MainTex, float2(i.uv.x, i.uv.y - _MainTex_TexelSize.y))
- - tex2D(_MainTex, float2(i.uv.x - _MainTex_TexelSize.x, i.uv.y - _MainTex_TexelSize.y));
- finalCol = float4(finalCol.rgb * _Intensity, col.a);
- return finalCol;
- }
- /*
- fixed4 laplacianFilter(v2f i)
- {
- fixed4 col = tex2D(_MainTex, i.uv) * 8;
- fixed4 substract = -(tex2D(_MainTex, float2(i.uv.x + _MainTex_TexelSize.x, i.uv.y)) + tex2D(_MainTex, float2(i.uv.x - _MainTex_TexelSize.x, i.uv.y))
- + tex2D(_MainTex, float2(i.uv.x + _MainTex_TexelSize.x, i.uv.y - _MainTex_TexelSize.y)) + tex2D(_MainTex, float2(i.uv.x - _MainTex_TexelSize.x, i.uv.y - _MainTex_TexelSize.y))
- + tex2D(_MainTex, float2(i.uv.x + _MainTex_TexelSize.x, i.uv.y + _MainTex_TexelSize.y)) + tex2D(_MainTex, float2(i.uv.x - _MainTex_TexelSize.x, i.uv.y + _MainTex_TexelSize.y))
- + tex2D(_MainTex, float2(i.uv.x, i.uv.y + _MainTex_TexelSize.y)) + tex2D(_MainTex, float2(i.uv.x, i.uv.y - _MainTex_TexelSize.y)));
- col = col + substract;
- col *= _Intensity;
- col.a = 1;
- return col;
- }*/
- float4 blur(v2f i)
- {
- return float4(0,0,0,0);
- }
- float4 luminance(float4 color)
- {
- float lum = 0.299*color.r + 0.587*color.g + 0.114*color.b;
- return float4(lum,lum,lum, color.a);
- }
- // filters
- // additional
- float4 colorLerp(float4 col1, float4 col2, float val)
- {
- return col1 * (1 - val) + col2 * val;
- }
- float lerp(float min, float max, float cur) // cur = [0,1]
- {
- return min + (max-min) * cur;
- }
- // additional
- float4 frag (v2f i) : SV_Target
- {
- // sample the texture
- float4 spriteColor = tex2D(_MainTex, i.uv);
- float4 col = spriteColor;
- #if EDGES_TRANSPARENCY
- col = edgeDetectionTransparent(i);
- float maxChannel = max(col.r, max(col.g, col.b));
- col.rgb = float3(maxChannel,maxChannel, maxChannel);
- #endif
- #if EDGES
- col = edgeDetection(i);
- float maxChannel = max(col.r, max(col.g, col.b));
- col.rgb = float3(maxChannel,maxChannel, maxChannel);
- #endif
- /*else if(_Filter == 2) // EDGES
- {
- }
- else if(_Filter == 3)
- {
- col = emboss(i);
- //col.rgb *= spriteColor.a;
- }
- else if(_Filter == 4)
- {
- col = inverseEdgeDetection(i);
- //col.rgb *= spriteColor.a;
- }
- else if(_Filter == 5) // BLACK_WHITE
- {
- col = colorLerp(col, luminance(col), _Intensity/ MAX_INTENSITY);
- }
- else if(_Filter == 6) // PIXELATED
- {
- float pixelU = lerp(_MainTex_TexelSize.x,_MainTex_TexelSize.x * PIXELATED_MULTIPLIER,
- _Intensity/MAX_INTENSITY);
- float pixelV = lerp(_MainTex_TexelSize.y,_MainTex_TexelSize.y * PIXELATED_MULTIPLIER,
- _Intensity/MAX_INTENSITY);
- float2 uv = float2((int)(i.uv.x / pixelU) * pixelU,
- (int)(i.uv.y / pixelV) * pixelV);
- col = tex2D(_MainTex, uv);
- }
- else if(_Filter == 7)
- {
- }
- */
- col *= i.color;
- col.rgb *= col.a;
- return col;
- }
- ENDCG
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement