Created
October 30, 2018 19:35
-
-
Save mandarinx/157b6ddaf8c6e929543c6fc8efef340e to your computer and use it in GitHub Desktop.
Distort aura shader
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Shader "Sprite/Distort Aura" { | |
Properties{ | |
[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} | |
_Distort("Distort Texture", 2D) = "grey" {} | |
_Color("Color", Color) = (1, 0, 1, 1) | |
_Offset("Offset", Range(-4,10)) = 0 | |
_Multiplier("Sprite Multiplier", Range(-2,2)) = 1 | |
_Scale("Distort Scale", Range(0,10)) = 3.2 | |
_SpeedX("Speed X", Range(-10,10)) = 2 | |
_SpeedY("Speed Y", Range(-10,10)) = -3.2 | |
_EffectSize("Effect Size", Range(-0.1,0.1)) = -0.03 | |
_EffectOffset("Effect Offset", Range(-0.1,0.1)) = 0 | |
_Brightness("Brightness", Range(-10,10)) = 1.5 | |
_Opacity("Opacity", Range(-5,10)) =1.2 | |
[Toggle(ORDER)] _ORDER("Aura Behind", Float) = 1 | |
[Toggle(ONLY)] _ONLY("Only Aura", Float) = 0 | |
[Toggle(GRADIENT)] _GRADIENT("Fade To Bottom", Float) = 1 | |
} | |
SubShader{ | |
Tags | |
{ | |
"Queue" = "Transparent" | |
"IgnoreProjector" = "True" | |
"RenderType" = "Transparent" | |
"PreviewType" = "Plane" | |
"CanUseSpriteAtlas" = "True" | |
} | |
// stencil for (UI) Masking | |
Stencil | |
{ | |
Ref[_Stencil] | |
Comp[_StencilComp] | |
Pass[_StencilOp] | |
ReadMask[_StencilReadMask] | |
WriteMask[_StencilWriteMask] | |
} | |
Cull Off | |
Lighting Off | |
ZWrite Off | |
Blend One OneMinusSrcAlpha | |
Pass { | |
CGPROGRAM | |
#pragma vertex vert | |
#pragma fragment frag | |
#pragma shader_feature ORDER | |
#pragma shader_feature GRADIENT | |
#pragma shader_feature ONLY | |
#include "UnityCG.cginc" | |
sampler2D _MainTex, _Distort; | |
struct v2f { | |
float4 pos : SV_POSITION; | |
half2 uv : TEXCOORD0; | |
}; | |
v2f vert(appdata_base v) { | |
v2f o; | |
o.pos = UnityObjectToClipPos(v.vertex); | |
o.uv = v.texcoord; | |
return o; | |
} | |
float4 _Color; | |
float _Offset; | |
float _Brightness; | |
float _EffectSize; | |
float _EffectOffset; | |
float _Scale; | |
float _SpeedY, _SpeedX; | |
float _Opacity; | |
float _Multiplier; | |
fixed4 frag(v2f i) : COLOR | |
{ | |
half4 c = tex2D(_MainTex, i.uv); | |
c *= c.a; | |
// scale UV | |
float2 scaledUV = (i.uv * (1 +_EffectSize)) - _EffectOffset; | |
// UV movement | |
float timeX = _Time.x * _SpeedX; | |
float timeY = _Time.x * _SpeedY; | |
//move the distort textures uv and scale them | |
float d = tex2D(_Distort, float2(i.uv.x * _Scale + timeX, i.uv.y * _Scale + timeY)) * 0.1; | |
// set the texture over distorted uvs | |
float4 r = tex2D(_MainTex, float2(scaledUV.x +d , scaledUV.y +d)); | |
// multiply by alpha for cutoff | |
r *= r.a; | |
#if GRADIENT | |
// gradient over UV vertically | |
r *= lerp(0, 1, (i.uv.y + _Offset)); | |
#endif | |
#if ORDER | |
// delete original sprite's alpha to only have the outline | |
r *= (1 - c.a); | |
#endif | |
// extra color tinting with multiplier to original sprite | |
float4 tinting = _Color + (c * _Multiplier); | |
// add brightness | |
r += (_Brightness * r.a) * tinting; | |
// set effect opacity | |
r = saturate(r *_Opacity); | |
#if ONLY | |
return r; | |
#endif | |
return r + c; | |
} | |
ENDCG | |
} | |
} | |
FallBack "Diffuse" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment