您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
168 行
4.7 KiB
168 行
4.7 KiB
Shader "HDRenderPipeline/GraphicTests/2004_AnimatedCookie_AnimMat2"
|
|
{
|
|
Properties
|
|
{
|
|
_Nyan("Nyan",2D) = "white"{}
|
|
_Speed("Speed", float) = 5.0
|
|
|
|
_rainbowValues("Rainbow: speed, frequency, amplitude, scale", vector) = (10, 5, 0.05, 0.8)
|
|
|
|
_StarSize ("Star Size", float) = 0.2
|
|
}
|
|
|
|
SubShader
|
|
{
|
|
Lighting Off
|
|
Blend One Zero
|
|
|
|
Pass
|
|
{
|
|
CGPROGRAM
|
|
#include "UnityCustomRenderTexture.cginc"
|
|
#pragma vertex CustomRenderTextureVertexShader
|
|
#pragma fragment frag
|
|
#pragma target 3.0
|
|
|
|
#define STAR_ROW 7
|
|
#define STAR_COL 7
|
|
#define STAR_FRAME 4
|
|
#define STAR_ARRSIZE STAR_FRAME*STAR_COL*STAR_ROW
|
|
|
|
float4 _Color;
|
|
sampler2D _Nyan;
|
|
float4 _Nyan_ST;
|
|
float _Speed;
|
|
|
|
float4 _rainbowValues;
|
|
|
|
float _StarSize;
|
|
|
|
static const int _StarsAnim[STAR_ARRSIZE] = {
|
|
0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 1, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0,
|
|
|
|
0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 1, 0, 0, 0,
|
|
0, 0, 1, 0, 1, 0, 0,
|
|
0, 0, 0, 1, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0,
|
|
|
|
0, 0, 0, 1, 0, 0, 0,
|
|
0, 0, 0, 1, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0,
|
|
1, 1, 0, 1, 0, 1, 1,
|
|
0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 1, 0, 0, 0,
|
|
0, 0, 0, 1, 0, 0, 0,
|
|
|
|
0, 0, 0, 1, 0, 0, 0,
|
|
0, 1, 0, 0, 0, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 0,
|
|
1, 0, 0, 0, 0, 0, 1,
|
|
0, 0, 0, 0, 0, 0, 0,
|
|
0, 1, 0, 0, 0, 1, 0,
|
|
0, 0, 0, 1, 0, 0, 0
|
|
};
|
|
|
|
// single nyan pixel size : 36, 21
|
|
#define _NyanSize float2(36, 21)
|
|
|
|
void DrawNyan(float2 uv, inout float3 c)
|
|
{
|
|
uv.y *= 36.0 / 21.0;
|
|
|
|
if (uv.x > 1 || uv.x < 0 || uv.y < 0 || uv.y > 1) return;
|
|
|
|
uv.x /= 6.0;
|
|
|
|
uv.x += floor(-(-_Time.y * _Speed ) % 6) / 6.0;
|
|
|
|
float4 nyan = tex2D(_Nyan, uv);
|
|
|
|
if (nyan.a > 0) c.rgb = nyan.rgb;
|
|
}
|
|
|
|
void DrawRainbow(float2 uv, inout float3 c)
|
|
{
|
|
uv.y *= 36.0 / 21.0;
|
|
|
|
uv.y += sin(_Time.y * _rainbowValues.x + uv.x * _rainbowValues.y) * _rainbowValues.z;
|
|
|
|
uv.y = uv.y / _rainbowValues.w - ( 1 - _rainbowValues.w );
|
|
|
|
if (uv.x > 0.3 || uv.y < 0 || uv.y > 1) return;
|
|
|
|
uv.y *= 6;
|
|
uv.y = floor(uv.y);
|
|
|
|
switch (uv.y)
|
|
{
|
|
case 0: c.rgb = float3(0.5, 0, 1); break;
|
|
case 1: c.rgb = float3(0, 0, 1); break;
|
|
case 2: c.rgb = float3(0, 1, 0); break;
|
|
case 3: c.rgb = float3(1, 1, 0); break;
|
|
case 4: c.rgb = float3(1, 0.5, 0); break;
|
|
case 5: c.rgb = float3(1, 0, 0); break;
|
|
}
|
|
}
|
|
|
|
void DrawStar(float2 uv, float t, inout float3 c)
|
|
{
|
|
if (uv.x < 0 || uv.x>1 || uv.y < 0 || uv.y>1) return;
|
|
|
|
uv *= 7;
|
|
uv = floor(uv);
|
|
|
|
float frame = floor(t % 4);
|
|
|
|
if (_StarsAnim[frame*STAR_COL*STAR_ROW + uv.y*STAR_ROW +uv.x]) c = 1;
|
|
}
|
|
|
|
float4 frag(v2f_customrendertexture IN) : COLOR
|
|
{
|
|
float4 c = float4(12.0/255.0, 65.0/255.0, 121.0/255.0, 1); // background color
|
|
|
|
float2 uv = IN.localTexcoord.xy;
|
|
|
|
float2 nyanUV = (uv - _Nyan_ST.zw / _NyanSize) / _Nyan_ST.x;
|
|
|
|
|
|
float2 starUV = uv;
|
|
for (int l = 0; l < 2; ++l)
|
|
{
|
|
for (int s = 0; s < 7; ++s)
|
|
{
|
|
starUV = uv;
|
|
|
|
starUV /= _StarSize;
|
|
|
|
starUV.x += ((s*91548.92548*(l+1)) % 7.0);
|
|
|
|
starUV.y -= ((s*36598.214563*(l+1)) % 7.0);
|
|
|
|
starUV.x += _Time.y * (1+(l*0.5)) * 3;
|
|
starUV.x = starUV.x % 5;
|
|
|
|
starUV *= 1 - l * 0.1;
|
|
|
|
DrawStar(starUV, (_Time.y+s/7.0+l/6.0) * 5, c.rgb);
|
|
}
|
|
}
|
|
|
|
DrawRainbow(nyanUV, c.rgb);
|
|
|
|
DrawNyan(nyanUV, c.rgb);
|
|
|
|
return c;
|
|
}
|
|
ENDCG
|
|
}
|
|
}
|
|
}
|