40 lines
1.0 KiB
Plaintext
40 lines
1.0 KiB
Plaintext
prop :: properties {
|
|
time : float @time;
|
|
resolution : float2 @resolution;
|
|
}
|
|
|
|
vertex main :: (pos : float3 @position) -> float4 @position {
|
|
return float4(pos, 1.0);
|
|
}
|
|
|
|
pixel main :: (pos : float4 @outposition) -> float4 @target {
|
|
p := float2(2.0 * pos.x - prop.resolution.x, 2.0 * pos.y - prop.resolution.y) / prop.resolution.y;
|
|
tau := 3.1415926535 * 2.0;
|
|
a := atan(p.x, p.y);
|
|
r := length(p) * 0.75;
|
|
|
|
uv := float2(a / tau, r);
|
|
|
|
x_col := (uv.x - (p.time / 3.0)) * 3.0;
|
|
x_col = mod(x_col, 3.0);
|
|
hor_colour := float3(0.25, 0.25, 0.25);
|
|
|
|
if x_col < 1.0 {
|
|
horColour.r += 1.0 - xCol;
|
|
horColour.g += xCol;
|
|
} else if x_col < 2.0 {
|
|
xCol -= 1.0;
|
|
horColour.g += 1.0 - xCol;
|
|
horColour.b += xCol;
|
|
} else {
|
|
x_col -= 2.0;
|
|
hor_colour.b += 1.0 - x_col;
|
|
hor_colour.r += x_col;
|
|
}
|
|
|
|
uv = (2.0 * uv) - 1.0;
|
|
beam_width = (0.7+0.5*cos(uv.x*10.0*tau*0.15*clamp(floor(5.0 + 10.0*cos(iTime)), 0.0, 10.0))) * abs(1.0 / (30.0 * uv.y));
|
|
hor_beam = float3(beam_width);
|
|
result := float4(((hor_beam) * hor_colour), 1.0);
|
|
}
|