- Sign In
- Sign Up
2D Game Shaders
The visuals of a 2d game called TriangleGame which I made a few years ago and never finished, reimagined with shaders cause why not
Created by jupahe64 on Thu, 01 Dec 2022 23:22:45 GMT.
#version 300 es precision highp float; uniform vec2 resolution; uniform float time; out vec4 fragColor; float TAU = 6.283185307179586; float rand(vec2 co){ return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453); } float aaStep(float edge, float value) { return smoothstep(edge, edge-fwidth(value), value); } vec2 clampUnderLine(vec2 p, vec2 nrm, vec2 origin) { float dist = dot(p-origin, nrm); return (dist<0.0)?p:p-nrm*dist; } void main() { fragColor = vec4(0.0,0.0,0.2,1.0); // Normalized pixel coordinates (from -1 to 1) vec2 uv = (gl_FragCoord.xy-resolution.xy/2.0)/min(resolution.x,resolution.y)*2.0; uv*=6.0; { vec4 objFragColor = vec4(0.0); vec3 col = vec3( 0.1 + 0.2 * cos(time+uv.y+1.0), 0.0, 0.6 + 0.3 * cos(time+uv.x)); objFragColor += vec4(col,1.0)*aaStep(0.3,length(uv)); float d = length(uv)+time*0.3; float a = min(floor(d/0.2)-time*0.3/0.2, 3.1415); objFragColor += vec4(0.5,0.6,1.0,1.0)*pow(abs(sin(a)),2.0)*aaStep(0.05,abs(mod(d,0.2)-0.1)); for(int i=0; i<12;i++) { float offsetTime = time*4.0-float(i)*0.4; float t = fract(offsetTime); float angle = TAU*rand(vec2(float(i),floor(offsetTime))); d = 0.8-t*0.7; objFragColor += aaStep(0.04,distance(vec2(sin(angle),cos(angle))*d, normalize(uv)*pow(length(uv),0.8))); } fragColor = mix(fragColor, objFragColor, objFragColor.a); } vec2 cell = floor(uv+.5); bool isRedSphere = (max(abs(cell.x), abs(cell.y))==5.0); uv = mod(uv+.5, 1.0)-0.5; { vec3 col = vec3( 0.8 + 0.2 * cos(time+uv.x), 0.1 * cos(time+uv.y+1.0), 0.1 * cos(time+uv.y+1.0) ); vec4 objFragColor = vec4(0.0); objFragColor += vec4(col+pow(length(uv)/0.4,5.0),1.0)*aaStep(0.35, length(uv)); float d = length(uv)-time*0.3; float a = min(floor(d/0.15)+time*0.3/0.15, 3.1415); float alpha = pow(abs(sin(a)),2.0); objFragColor += vec4(alpha)*aaStep(0.05,abs(mod(d,0.2)-0.1))*0.5; fragColor = mix(fragColor, objFragColor, float(isRedSphere)*objFragColor.a); } }
xxxxxxxxxx
precision highp float;
uniform vec2 resolution;
uniform float time;
out vec4 fragColor;
float TAU = 6.283185307179586;
float rand(vec2 co){
return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453);
}
float aaStep(float edge, float value) {
return smoothstep(edge, edge-fwidth(value), value);
}
vec2 clampUnderLine(vec2 p, vec2 nrm, vec2 origin) {
float dist = dot(p-origin, nrm);
return (dist<0.0)?p:p-nrm*dist;
}
void main()
{
fragColor = vec4(0.0,0.0,0.2,1.0);
// Normalized pixel coordinates (from -1 to 1)
vec2 uv = (gl_FragCoord.xy-resolution.xy/2.0)/min(resolution.x,resolution.y)*2.0;
uv*=6.0;
{
vec4 objFragColor = vec4(0.0);
vec3 col = vec3(
0.1 + 0.2 * cos(time+uv.y+1.0),
0.0,
0.6 + 0.3 * cos(time+uv.x));
objFragColor += vec4(col,1.0)*aaStep(0.3,length(uv));
float d = length(uv)+time*0.3;
float a = min(floor(d/0.2)-time*0.3/0.2, 3.1415);
objFragColor += vec4(0.5,0.6,1.0,1.0)*pow(abs(sin(a)),2.0)*aaStep(0.05,abs(mod(d,0.2)-0.1));
for(int i=0; i<12;i++) {
float offsetTime = time*4.0-float(i)*0.4;
float t = fract(offsetTime);
float angle = TAU*rand(vec2(float(i),floor(offsetTime)));
d = 0.8-t*0.7;
objFragColor += aaStep(0.04,distance(vec2(sin(angle),cos(angle))*d, normalize(uv)*pow(length(uv),0.8)));
}
fragColor = mix(fragColor, objFragColor, objFragColor.a);
}
vec2 cell = floor(uv+.5);
bool isRedSphere = (max(abs(cell.x), abs(cell.y))==5.0);
uv = mod(uv+.5, 1.0)-0.5;
{
vec3 col = vec3(
0.8 + 0.2 * cos(time+uv.x),
0.1 * cos(time+uv.y+1.0),
0.1 * cos(time+uv.y+1.0)
);
vec4 objFragColor = vec4(0.0);
objFragColor += vec4(col+pow(length(uv)/0.4,5.0),1.0)*aaStep(0.35, length(uv));
float d = length(uv)-time*0.3;
float a = min(floor(d/0.15)+time*0.3/0.15, 3.1415);
float alpha = pow(abs(sin(a)),2.0);
objFragColor += vec4(alpha)*aaStep(0.05,abs(mod(d,0.2)-0.1))*0.5;
fragColor = mix(fragColor, objFragColor, float(isRedSphere)*objFragColor.a);
}
}
96 fps 16ms
00:00:00.33
0.00