KpoKec

2D shader for sprite coloring by mask

May 23rd, 2018
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Shader "Custom/Sprite Colored mask"
  2. {
  3.     Properties
  4.     {
  5.         [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
  6.         [PerRendererData] _MainTexCut ("CutOff", 2D) = "white" {}
  7.         _Color ("Tint", Color) = (1,1,1,1)
  8.         [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
  9.  
  10.     _ColorMaskTex ("Color mask texture", 2D) = "white" {}
  11.     _MainColor ("Main color (red)", Color) = (1,0,0,0)
  12.     _AddColor ("Additional 1st color (green)", Color) = (0,1,0,0)
  13.     _ExtColor ("Additional 2nd color (blue)", Color) = (0,0,1,0)
  14.  
  15.     }
  16.  
  17.     SubShader
  18.     {
  19.         Tags
  20.         {
  21.             "Queue"="Transparent"
  22.             "IgnoreProjector"="True"
  23.             "RenderType"="Transparent"
  24.             "PreviewType"="Plane"
  25.             "CanUseSpriteAtlas"="True"
  26.         }
  27.  
  28.         Cull Off
  29.         Lighting Off
  30.         ZWrite Off
  31.         Fog { Mode Off }
  32.         Blend SrcAlpha OneMinusSrcAlpha
  33.  
  34.         Pass
  35.         {
  36.         CGPROGRAM
  37.             #pragma vertex vert
  38.             #pragma fragment frag
  39.             #pragma multi_compile DUMMY PIXELSNAP_ON
  40.             #include "UnityCG.cginc"
  41.  
  42.             struct appdata_t
  43.             {
  44.                 float4 vertex   : POSITION;
  45.                 float4 color    : COLOR;
  46.                 float2 texcoord : TEXCOORD0;
  47.             };
  48.  
  49.             struct v2f
  50.             {
  51.                 float4 vertex   : SV_POSITION;
  52.                 fixed4 color    : COLOR;
  53.                 half2 texcoord  : TEXCOORD0;
  54.             };
  55.  
  56.             fixed4 _Color;
  57.  
  58.             v2f vert(appdata_t IN)
  59.             {
  60.                 v2f OUT;
  61.                 OUT.vertex = UnityObjectToClipPos(IN.vertex);
  62.                 OUT.texcoord = IN.texcoord;
  63.                 OUT.color = IN.color * _Color;
  64.                 #ifdef PIXELSNAP_ON
  65.                 OUT.vertex = UnityPixelSnap (OUT.vertex);
  66.                 #endif
  67.  
  68.                 return OUT;
  69.             }
  70.  
  71.             sampler2D _MainTex;
  72.             float4 _MainTex_ST;
  73.  
  74.             sampler2D _ColorMaskTex;
  75.             float4 _MainColor;
  76.             float4 _AddColor;
  77.             float4 _ExtColor;
  78.  
  79.             fixed4 frag(v2f IN) : COLOR
  80.             {
  81.                 float4 MainTex = tex2D(_MainTex, IN.texcoord) * IN.color;
  82.                 fixed4 SkinTex = tex2D(_ColorMaskTex, IN.texcoord);
  83.                 float4 res = float4(MainTex.rgb * (1 - SkinTex.r - SkinTex.g - SkinTex.b) +
  84.                     lerp (MainTex.rgb, _MainColor.rgb, _MainColor.a * SkinTex.a) * SkinTex.r +
  85.                     lerp (MainTex.rgb, _AddColor.rgb, _AddColor.a * SkinTex.a) * SkinTex.g +
  86.                     lerp (MainTex.rgb, _ExtColor.rgb, _ExtColor.a * SkinTex.a) * SkinTex.b,
  87.                     MainTex.a);
  88.                 res.a = MainTex.a;
  89.                 return res;
  90.             }
  91.         ENDCG
  92.         }
  93.     }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment