Advertisement
KpoKec

Shader 2D sprite + color mask + aura mask

May 25th, 2018
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Shader "Custom/Sprite Colored mask + Aura"
  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.     _AuraMaskTex ("Aura mask texture", 2D) = "white" {}
  16.     _Aura1Color ("Aura 1 color (red)", Color) = (1,0,0,0)
  17.     _Aura1Cutoff ("Cutoff Aura 1", Range(0.0, 1.0)) = 1
  18.     _Aura2Color ("Aura 2 color (green)", Color) = (0,1,0,0)
  19.     _Aura2Cutoff ("Cutoff Aura 2", Range(0.0, 1.0)) = 1
  20.     _Aura3Color ("Aura 3 color (blue)", Color) = (0,0,1,0)
  21.     _Aura3Cutoff ("Cutoff Aura 3", Range(0.0, 1.0)) = 1
  22.     }
  23.  
  24.     SubShader
  25.     {
  26.         Tags
  27.         {
  28.             "Queue"="Transparent+1"
  29.             "IgnoreProjector"="True"
  30.             "RenderType"="Transparent"
  31.             "PreviewType"="Plane"
  32.             "CanUseSpriteAtlas"="True"
  33.         }
  34.  
  35.         Cull Off
  36.         Lighting Off
  37.         ZWrite Off
  38.         Fog { Mode Off }
  39.         Blend SrcAlpha OneMinusSrcAlpha
  40.  
  41.         Pass
  42.         {
  43.  
  44.         CGPROGRAM
  45.             #pragma vertex vert
  46.             #pragma fragment frag
  47.             #pragma multi_compile DUMMY PIXELSNAP_ON
  48.             #include "UnityCG.cginc"
  49.  
  50.             struct appdata_t
  51.             {
  52.                 float4 vertex   : POSITION;
  53.                 float4 color    : COLOR;
  54.                 float2 texcoord : TEXCOORD0;
  55.             };
  56.  
  57.             struct v2f
  58.             {
  59.                 float4 vertex   : SV_POSITION;
  60.                 fixed4 color    : COLOR;
  61.                 half2 texcoord  : TEXCOORD0;
  62.             };
  63.  
  64.             fixed4 _Color;
  65.  
  66.             v2f vert(appdata_t IN)
  67.             {
  68.                 v2f OUT;
  69.                 OUT.vertex = UnityObjectToClipPos(IN.vertex);
  70.                 OUT.texcoord = IN.texcoord;
  71.                 OUT.color = IN.color * _Color;
  72.                 #ifdef PIXELSNAP_ON
  73.                 OUT.vertex = UnityPixelSnap (OUT.vertex);
  74.                 #endif
  75.  
  76.                 return OUT;
  77.             }
  78.  
  79.             sampler2D _MainTex;
  80.  
  81.             sampler2D _ColorMaskTex;
  82.             float4 _MainColor;
  83.             float4 _AddColor;
  84.             float4 _ExtColor;
  85.  
  86.             sampler2D _AuraMaskTex;
  87.             float4 _Aura1Color;
  88.             float _Aura1Cutoff;
  89.             float4 _Aura2Color;
  90.             float _Aura2Cutoff;
  91.             float4 _Aura3Color;
  92.             float _Aura3Cutoff;
  93.  
  94.             fixed4 frag(v2f IN) : COLOR
  95.             {
  96.                 float4 MainTex = tex2D(_MainTex, IN.texcoord) * IN.color;
  97.                 float4 SkinTex = tex2D(_ColorMaskTex, IN.texcoord);
  98.                 float4 AuraTex = tex2D(_AuraMaskTex, IN.texcoord);
  99.  
  100.                 float4 a1 = _Aura1Color * AuraTex.r * _Aura1Color.a;
  101.                 a1.a = clamp(AuraTex.r * _Aura1Color.a * AuraTex.a + _Aura1Cutoff - 1, 0, 1);
  102.  
  103.                 float4 a2 = _Aura2Color * AuraTex.g * _Aura2Color.a;
  104.                 a2.a = clamp(AuraTex.g * _Aura2Color.a * AuraTex.a + _Aura2Cutoff - 1, 0, 1);
  105.  
  106.                 float4 a3 = _Aura3Color * AuraTex.b * _Aura3Color.a;
  107.                 a3.a = clamp(AuraTex.b * _Aura3Color.a * AuraTex.a + _Aura3Cutoff - 1, 0, 1);
  108.  
  109.                 float4 aura = a1 + a2 + a3;
  110.                 aura.a = a1.a + a2.a + a3.a;
  111.  
  112.                 float4 res = float4(MainTex.rgb * (1 - SkinTex.r - SkinTex.g - SkinTex.b) +
  113.                     lerp (MainTex.rgb, _MainColor.rgb, _MainColor.a * SkinTex.a) * SkinTex.r +
  114.                     lerp (MainTex.rgb, _AddColor.rgb, _AddColor.a * SkinTex.a) * SkinTex.g +
  115.                     lerp (MainTex.rgb, _ExtColor.rgb, _ExtColor.a * SkinTex.a) * SkinTex.b,
  116.                     MainTex.a);
  117.  
  118.                     res.rgb = res.rgb * MainTex.a + aura.rgb * (1 - MainTex.a);
  119.                     res.a = clamp(MainTex.a + aura.a, 0, 1);
  120.  
  121.                 return res;
  122.             }
  123.         ENDCG
  124.         }
  125.     }
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement