square stargate
Log in to post a comment.
#version 300 es
precision highp float;
uniform float iTime;
uniform vec2 iResolution;
out vec4 fragColor;
uniform float _Temporal; //value=.25, min=0, max=1, step=0.01
uniform float _FrequencyY; //value=2., min=0.1, max=4, step=0.01
uniform float _SpeedZ; //value=2., min=0., max=32, step=0.01
uniform float _RandomSpeed; //value=6., min=0., max=8, step=0.01
uniform float _FrequencyZ; //value=.01, min=0.0001, max=0.1, step=0.0001
const float PI2 = 6.2831853;
vec3 hash31(float p)
{
vec3 p3 = fract(p * vec3(.1031, .1030, .0973));
p3 += dot(p3, p3.yzx+19.19);
return fract((p3.xxy+p3.yzz)*p3.zyx);
}
vec2 hash21(float p)
{
vec3 p3 = fract(vec3(p) * vec3(.1031, .1030, .0973));
p3 += dot(p3, p3.yzx + 33.33);
return fract((p3.xx+p3.yz)*p3.zy);
}
vec3 spectrum(in float d)
{
return smoothstep(0.25, 0., abs(d + vec3(0.125,0.,-0.125)));
//return smoothstep(0.25, 0., abs(d + vec3(0.125,0.,-0.125)));
//return sin((vec3(0, 1. ,2) / 3. + d) * PI2) * 0.5 + 0.5;
}
float aa(float x)
{
float dx = fwidth(x);
return smoothstep(dx, 0., x);
}
float aaa(float x)
{
float dx = fwidth(x);
return smoothstep(-dx, 0., x) * smoothstep(dx, 0., x);
}
void main() {
vec3 color = vec3(0.);
float z = iTime * _SpeedZ;
float zOffset = z * _RandomSpeed;
vec2 uv = gl_FragCoord.xy/iResolution.xy - 0.5;
uv.x *= iResolution.x / iResolution.y;
uv.x = abs(uv.x);
uv.y = abs(uv.y);
vec3 ray = normalize(vec3(uv, 1.5));
float l = length(ray.xy);
bool isX = abs(ray.x) > abs(ray.y);
vec3 dir = ray / max(abs(ray.x),abs(ray.y)) ;
float r = 0.5;
float offset = 0.;
float hue = sin(iTime) * 0.5 + 0.5;
for(int i = 0; i <4; i++){
vec3 hit = dir * r++;
vec3 p = hit;
p.z += z;
float phase = isX? hit.y : hit.x;
offset += 2.4;
phase += sin(iTime * _Temporal + offset);
phase += sin(phase * 6.) * 0.5;
phase *= _FrequencyY;
vec3 rand = hash31(floor(phase));
//z animation
p.z += rand.x * zOffset;
p.z += float(i) * 10.;
//frequency in z
p.z *= _FrequencyZ / (rand.y + 0.05);
p.z += sin( p.z * 10.);
// p.z += cos( p.z * 17.) * 0.5;
vec2 cell = fract(vec2(phase, p.z)) - 0.5;
float cellID = floor(p.z);
vec2 cellRand = hash21(cellID);
float ax = abs(cell.x);
float ay = abs(cell.y);
float fx = fwidth(ax) * 1.;
float fy = fwidth(ay) * 1.;
//float d = 0.45;
float d = 0.1 + cellRand.y * 0.3;
float outer = smoothstep(fx, 0., ax - d + fx) * smoothstep(fy, 0., ay - d + fy);
float inner = smoothstep(fx, 0., ax -d + fx * 2.) * smoothstep(fy, 0., ay - d + fy * 2.);
float outerGlow = smoothstep(0.1, 0., ax - d );
outerGlow *= smoothstep(0.5, 0., ay);
float b = outer - inner;
b += outerGlow * 0.25;
b *= smoothstep(50., 20., hit.z);
b *= 0.5 + rand.z;
color += spectrum((cellRand.x - hue) * 0.25) * b;
}
//color *= 2.;
color = sqrt(color);
color *= 1. - dot(uv, uv);
fragColor = vec4(color,1.0);
}