Shader "Custom/Outlight" { Properties { _MainTex("Texture", 2D) = "white" {} _LightColor("Light Color", Color) = (1.0, 1.0, 1.0, 1.0) _Size("Size", Float) = 1 } SubShader{ Blend SrcAlpha OneMinusSrcAlpha CGINCLUDE #include "UnityCG.cginc" struct v2f { float4 pos : SV_POSITION; float2 uv: TEXCOORD0; }; sampler2D _MainTex; float4 _MainTex_ST; half4 _MainTex_TexelSize; float4 _LightColor; float _Size; ENDCG Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" v2f vert(appdata_img IN) { v2f OUT; OUT.pos = UnityObjectToClipPos(IN.vertex); OUT.uv = TRANSFORM_TEX(IN.texcoord, _MainTex); return OUT; } fixed4 frag(v2f IN) : SV_Target { fixed4 color = tex2D(_MainTex, IN.uv); fixed4 c = _LightColor; float sum = tex2D(_MainTex, IN.uv).a; for (float i = 1.0; i <= _Size; i += 1.0) { sum += tex2D(_MainTex, IN.uv + _MainTex_TexelSize.xy * half2(i, 0)).a; sum += tex2D(_MainTex, IN.uv + _MainTex_TexelSize.xy * half2(-1.0 * i, 0)).a; sum += tex2D(_MainTex, IN.uv + _MainTex_TexelSize.xy * half2(0, 1.0 * i)).a; sum += tex2D(_MainTex, IN.uv + _MainTex_TexelSize.xy * half2(0, -1.0 * i)).a; } c.a = sum / (4.0 * _Size + 1.0); return step(0.1, color.a) * color + step(0.1, 1.0 - color.a) * c; } ENDCG } } }