title: Unity sprite mask shader
body: <p>I have water and sun light on it. I want so sun's light be above one front wave. I have managed to do it, but it works only on PC, not on Android. What should I do so that worked on Android?</p>
  
  <p>top picture-PC, bottom- Android:
  <a href="https://i.stack.imgur.com/GVWAx.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/GVWAx.png" alt="top picture-PC, bottom- Android"></a></p>
  
  <p>Here is the shader's code for water:</p>
  
  <pre><code>Shader "Sprites/Stencil Mask"
  {
   Properties
   {
       [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
       _Color ("Tint", Color) = (1,1,1,1)
       [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
   }
  
   SubShader
   {
       Tags
       {
           "Queue"="Transparent"
           "IgnoreProjector"="True"
           "RenderType"="Transparent"
           "PreviewType"="Plane"
           "CanUseSpriteAtlas"="True"
       }
  
       Cull Off
       Lighting Off
       ZWrite Off
       Fog { Mode Off }
       Blend One OneMinusSrcAlpha
  
       Pass
       {
           Stencil
           {
               Ref 1
               Comp always
               Pass replace
           }
  
       CGPROGRAM
           #pragma vertex vert
           #pragma fragment frag
           #pragma multi_compile DUMMY PIXELSNAP_ON
           #include "UnityCG.cginc"
  
           struct appdata_t
           {
               float4 vertex   : POSITION;
               float4 color    : COLOR;
               float2 texcoord : TEXCOORD0;
           };
  
           struct v2f
           {
               float4 vertex   : SV_POSITION;
               fixed4 color    : COLOR;
               half2 texcoord  : TEXCOORD0;
           };
  
           fixed4 _Color;
  
           v2f vert(appdata_t IN)
           {
               v2f OUT;
               OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex);
               OUT.texcoord = IN.texcoord;
               OUT.color = IN.color * _Color;
               #ifdef PIXELSNAP_ON
               OUT.vertex = UnityPixelSnap (OUT.vertex);
               #endif
  
               return OUT;
           }
  
           sampler2D _MainTex;
  
           fixed4 frag(v2f IN) : SV_Target
           {
               fixed4 c = tex2D(_MainTex, IN.texcoord) * IN.color;
               if (c.a&lt;0.1) discard;            //Most IMPORTANT working Code
               c.rgb *= c.a;
               return c;
           }
       ENDCG
       }
   }
    }
  </code></pre>
  
  <p>And this is for the sun's light:</p>
  
  <pre><code>Shader "Sprites/Stencil Draw In Mask"
  {
  Properties
  {
      [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
      _Color ("Tint", Color) = (1,1,1,1)
      [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
  }
  
  SubShader
  {
      Tags
      {
          "Queue"="Transparent+1"              //DON'T FORGET this must be drew later to catch Stencil Ref value.
          "IgnoreProjector"="True"
          "RenderType"="Transparent"
          "PreviewType"="Plane"
          "CanUseSpriteAtlas"="True"
      }
  
      Cull Off
      Lighting Off
      ZWrite Off
      Fog { Mode Off }
      Blend One OneMinusSrcAlpha
  
      Pass
      {
          Stencil
          {
              Ref 1
              Comp Equal
          }
  
      CGPROGRAM
          #pragma vertex vert
          #pragma fragment frag
          #pragma multi_compile DUMMY PIXELSNAP_ON
          #include "UnityCG.cginc"
  
          struct appdata_t
          {
              float4 vertex   : POSITION;
              float4 color    : COLOR;
              float2 texcoord : TEXCOORD0;
          };
  
          struct v2f
          {
              float4 vertex   : SV_POSITION;
              fixed4 color    : COLOR;
              half2 texcoord  : TEXCOORD0;
          };
  
          fixed4 _Color;
  
          v2f vert(appdata_t IN)
          {
              v2f OUT;
              OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex);
              OUT.texcoord = IN.texcoord;
              OUT.color = IN.color * _Color;
              #ifdef PIXELSNAP_ON
              OUT.vertex = UnityPixelSnap (OUT.vertex);
              #endif
  
              return OUT;
          }
  
          sampler2D _MainTex;
  
          fixed4 frag(v2f IN) : SV_Target
          {
              fixed4 c = tex2D(_MainTex, IN.texcoord) * IN.color;
              c.rgb *= c.a;
              return c;
          }
      ENDCG
       }
   }
  }
  </code></pre>