You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
3.0 KiB
Plaintext

4 years ago
Shader "Hidden/Fur-spinner"
{
Properties {
_MainTex ("Texture", Any) = "white" {}
}
CGINCLUDE
#pragma vertex vert
#pragma fragment frag
#pragma target 2.0
#include "UnityCG.cginc"
#define PI 3.1415926
struct appdata_t {
float4 vertex : POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct v2f {
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
float2 clipUV : TEXCOORD1;
UNITY_VERTEX_OUTPUT_STEREO
};
sampler2D _MainTex;
sampler2D _GUIClipTexture;
uniform bool _ManualTex2SRGB;
uniform float expand;
uniform float4 _MainTex_ST;
uniform fixed4 _Color;
uniform float4x4 unity_GUIClipTextureMatrix;
uniform float _EditorTime;
v2f vert (appdata_t v)
{
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.vertex = UnityObjectToClipPos(v.vertex);
float3 eyePos = UnityObjectToViewPos(v.vertex);
o.clipUV = mul(unity_GUIClipTextureMatrix, float4(eyePos.xy, 0, 1.0));
o.color = v.color;
o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
return o;
}
static float easeQuadInOut (float t) {
t /= 1.0/2.0;
if (t < 1.0) return 1.0/2.0*t*t*t*t ;
t -= 2.0;
return -1.0 / 2.0 * (t * t * t * t - 2.0) ;
};
float4 getTwirl(float4 color,float i,float2 uv)
{
float endCap = easeQuadInOut(saturate(distance(uv.x - 1.4, 0) / 1.5)) * easeQuadInOut(saturate( distance(uv.x + 1.4, 0) / 1.5));
uv.y += sin((float) i * 200 + _EditorTime * 2 + uv.x * 1.5) * endCap * 0.9 * expand;
color.a= saturate(abs(0.06 / uv.y));
if(color.a < 0.5) {
color.a = 0;
}
return color;
}
fixed4 frag (v2f i) : SV_Target
{
const float2 uv = 2 * i.texcoord.xy - 1;
const float4 pink = getTwirl(float4(207.0/255.0, 115.0/255.0, 229.0/255.0, 1.0),0, uv);
const float4 orange = getTwirl(float4(1.0, 133.0/255.0, 45.0/255.0, 1.0),1.0, uv);
const float4 green = getTwirl( float4(153.0/255.0, 220.0/255.0, 81.0/255.0,1.0),2, uv);
const float4 cyan = getTwirl(float4(90.0/255.0, 211.0/255.0, 172.0/255.0, 1.0),3, uv);
const float4 blue = getTwirl( float4(55.0/255.0, 210.0/255.0, 232.0/255.0, 1.0),4, uv);
float4 col = lerp(orange, pink, pink.a);
col = lerp(col, green, green.a);
col = lerp(col, cyan, cyan.a);
col = lerp(col, blue, blue.a);
return col;
}
ENDCG
SubShader {
Lighting Off
Blend SrcAlpha OneMinusSrcAlpha, One One
Cull Off
ZWrite Off
ZTest Always
Pass {
CGPROGRAM
ENDCG
}
}
SubShader {
Lighting Off
Blend SrcAlpha OneMinusSrcAlpha
Cull Off
ZWrite Off
ZTest Always
Pass {
CGPROGRAM
ENDCG
}
}
}