add LICENSE, shaders, Cargo.lock, and AUR package
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
//pastel psx/dreamcast thingy
|
||||
// @samloeschen
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
#endif
|
||||
|
||||
#define M_PI 3.1415926535897932384626433832795
|
||||
|
||||
uniform float time;
|
||||
uniform vec2 resolution;
|
||||
|
||||
|
||||
// 2D Random
|
||||
float random (in vec2 st) {
|
||||
return fract(sin(dot(st.xy, vec2(12.9898,78.233)))* 43758.5453123);
|
||||
}
|
||||
|
||||
// 2D Noise based on Morgan McGuire @morgan3d
|
||||
// https://www.shadertoy.com/view/4dS3Wd
|
||||
float noise (in vec2 st) {
|
||||
vec2 i = floor(st);
|
||||
vec2 f = fract(st);
|
||||
|
||||
// Four corners in 2D of a tile
|
||||
float a = random(i);
|
||||
float b = random(i + vec2(1.0, 0.0));
|
||||
float c = random(i + vec2(0.0, 1.0));
|
||||
float d = random(i + vec2(1.0, 1.0));
|
||||
|
||||
// Smooth Interpolation
|
||||
|
||||
// Cubic Hermine Curve. Same as SmoothStep()
|
||||
vec2 u = f*f*(3.0-2.0*f);
|
||||
// u = smoothstep(0.,1.,f);
|
||||
|
||||
// Mix 4 coorners porcentages
|
||||
return mix(a, b, u.x) +
|
||||
(c - a)* u.y * (1.0 - u.x) +
|
||||
(d - b) * u.x * u.y;
|
||||
}
|
||||
|
||||
bool boxtest (in vec2 p, in vec2 circle, in float w) {
|
||||
return p.x - w < circle.x && p.x + w > circle.x && p.y - w < circle.y && p.y + w > circle.y;
|
||||
}
|
||||
|
||||
vec3 palette (in float t) {
|
||||
vec3 a = vec3(0.93,0.43,0.76);
|
||||
vec3 b = vec3(0.90,0.31,0.24);
|
||||
vec3 c = vec3(0.41,0.93,1.0);
|
||||
vec3 d = vec3(0,0.44,0.32);
|
||||
return a + b*cos( 2.0*M_PI*(c*t+d) );
|
||||
}
|
||||
|
||||
vec3 drawCircle (in vec2 p, in vec2 circle, in vec3 setting) {
|
||||
if(boxtest(p, circle, setting.x) && !(boxtest(p, circle, setting.x - setting.y)))
|
||||
return palette(setting.z / 70.0 + time * 0.1);
|
||||
|
||||
return vec3(0.0);
|
||||
}
|
||||
|
||||
void main (void) {
|
||||
vec2 uv = (gl_FragCoord.xy / resolution.xy);
|
||||
vec2 aspect = resolution.xy / min(resolution.x, resolution.y);
|
||||
vec2 center = vec2(0.5);
|
||||
vec2 pos = uv - center;
|
||||
float horizon = 0.03*cos(time); //lil motion here
|
||||
float fov = -0.5; //if we negate fov the box has a better palette relationship with the planes
|
||||
|
||||
vec3 p = vec3(pos.x, fov, pos.y - horizon);
|
||||
float scroll = (time * -sign(p.z));
|
||||
float bump = noise((vec2(p.x + 100., p.y) * 20.)) * 0.1;
|
||||
vec2 s = vec2(p.x/p.z, p.y/p.z + bump + scroll) * 0.1; //actual plane position
|
||||
|
||||
bool grid = (fract(s.y / 0.02) > 0.95) || (fract(s.x / 0.02) > 0.95);
|
||||
vec3 gridColor = (mix(palette(s.y + bump * 0.5), vec3(1.0), float(grid)));
|
||||
gridColor = mix(gridColor, vec3(1.0), 0.3); //slight desaturate and boost
|
||||
float fog = pow(sin(uv.y * M_PI), 5.);
|
||||
vec3 color = mix(gridColor, vec3(1.0), fog);
|
||||
|
||||
float a = sin(time) * 0.6; //box angle
|
||||
mat2 rot = mat2(cos(a), -sin(a), sin(a), cos(a));
|
||||
pos = uv * aspect * rot;
|
||||
center *= aspect * rot;
|
||||
|
||||
for(int i = 0; i < 50; i++) {
|
||||
vec3 d = drawCircle(pos, center + vec2(sin(float(i) / 10.0 + time) / 4.0, 0.0), vec3(0.0 + sin(float(i) / 200.0), 0.01 , float(i)));
|
||||
if(d.x > 0.) color = mix(d, vec3(1.0), 0.3); //slight desaturate and boost
|
||||
}
|
||||
gl_FragColor = vec4(color, 1.0);
|
||||
}
|
||||
Reference in New Issue
Block a user