Outlight.shader 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. Shader "Custom/Outlight"
  2. {
  3. Properties
  4. {
  5. _MainTex("Texture", 2D) = "white" {}
  6. _LightColor("Light Color", Color) = (1.0, 1.0, 1.0, 1.0)
  7. _Size("Size", Float) = 1
  8. }
  9. SubShader{
  10. Blend SrcAlpha OneMinusSrcAlpha
  11. CGINCLUDE
  12. #include "UnityCG.cginc"
  13. struct v2f {
  14. float4 pos : SV_POSITION;
  15. float2 uv: TEXCOORD0;
  16. };
  17. sampler2D _MainTex;
  18. float4 _MainTex_ST;
  19. half4 _MainTex_TexelSize;
  20. float4 _LightColor;
  21. float _Size;
  22. ENDCG
  23. Pass {
  24. CGPROGRAM
  25. #pragma vertex vert
  26. #pragma fragment frag
  27. #include "UnityCG.cginc"
  28. v2f vert(appdata_img IN)
  29. {
  30. v2f OUT;
  31. OUT.pos = UnityObjectToClipPos(IN.vertex);
  32. OUT.uv = TRANSFORM_TEX(IN.texcoord, _MainTex);
  33. return OUT;
  34. }
  35. fixed4 frag(v2f IN) : SV_Target
  36. {
  37. fixed4 color = tex2D(_MainTex, IN.uv);
  38. fixed4 c = _LightColor;
  39. float sum = tex2D(_MainTex, IN.uv).a;
  40. for (float i = 1.0; i <= _Size; i += 1.0) {
  41. sum += tex2D(_MainTex, IN.uv + _MainTex_TexelSize.xy * half2(i, 0)).a;
  42. sum += tex2D(_MainTex, IN.uv + _MainTex_TexelSize.xy * half2(-1.0 * i, 0)).a;
  43. sum += tex2D(_MainTex, IN.uv + _MainTex_TexelSize.xy * half2(0, 1.0 * i)).a;
  44. sum += tex2D(_MainTex, IN.uv + _MainTex_TexelSize.xy * half2(0, -1.0 * i)).a;
  45. }
  46. c.a = sum / (4.0 * _Size + 1.0);
  47. return step(0.1, color.a) * color + step(0.1, 1.0 - color.a) * c;
  48. }
  49. ENDCG
  50. }
  51. }
  52. }