67 lines
1.6 KiB
Plaintext
67 lines
1.6 KiB
Plaintext
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
|
|
|
|
// Rainbow shader with lots of adjustable properties!
|
|
|
|
Shader "_Shaders/Rainbow" {
|
|
Properties{
|
|
_Saturation("Saturation", Range(0.0, 1.0)) = 0.8
|
|
_Luminosity("Luminosity", Range(0.0, 1.0)) = 0.5
|
|
_Spread("Spread", Range(0.5, 10.0)) = 3.8
|
|
_Speed("Speed", Range(-10.0, 10.0)) = 2.4
|
|
_TimeOffset("TimeOffset", Range(0.0, 6.28318531)) = 0.0
|
|
}
|
|
SubShader{
|
|
Pass{
|
|
CGPROGRAM
|
|
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
#include "UnityCG.cginc"
|
|
#include "Shared/ShaderTools.cginc"
|
|
|
|
fixed _Saturation;
|
|
fixed _Luminosity;
|
|
half _Spread;
|
|
half _Speed;
|
|
half _TimeOffset;
|
|
|
|
struct vertexInput {
|
|
float4 vertex : POSITION;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
};
|
|
|
|
struct fragmentInput {
|
|
float4 position : SV_POSITION;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
fixed3 localPosition : TEXCOORD1;
|
|
};
|
|
|
|
fragmentInput vert(vertexInput i) {
|
|
fragmentInput o;
|
|
o.position = UnityObjectToClipPos(i.vertex);
|
|
o.texcoord0 = i.texcoord0;
|
|
o.localPosition = i.vertex.xyz; +fixed3(0.5, 0.5, 0.5);
|
|
return o;
|
|
}
|
|
|
|
fixed4 frag(fragmentInput i) : SV_TARGET{
|
|
fixed2 lPos = i.localPosition / _Spread;
|
|
half time = _Time.y * _Speed / _Spread;
|
|
half timeWithOffset = time + _TimeOffset;
|
|
fixed sine = sin(timeWithOffset);
|
|
fixed cosine = cos(timeWithOffset);
|
|
//fixed hue = (lPos.x * sine + lPos.y * cosine) / 2.0;
|
|
//fixed hue = (lPos.x * 0 - lPos.y) / 2.0;
|
|
fixed hue = (-lPos.y) / 2.0;
|
|
hue += time;
|
|
while (hue < 0.0) hue += 1.0;
|
|
while (hue > 1.0) hue -= 1.0;
|
|
fixed4 hsl = fixed4(hue, _Saturation, _Luminosity, 1.0);
|
|
return HSLtoRGB(hsl);
|
|
}
|
|
|
|
ENDCG
|
|
}
|
|
}
|
|
FallBack "Diffuse"
|
|
} |