Alien Core by glkt
By Ayfri
https://www.shadertoy.com/view/4tcXRr
Image
precision mediump float;
uniform float uAspect;
uniform float uDeltaTime;
uniform float uFrameRate;
uniform float uTime;
uniform int uFrameCount;
uniform vec2 uResolution;
uniform vec3 uMouse;
uniform vec4 uDate;
uniform sampler2D uChannel0;
// GLKITTY 2016.
vec3 rotateY(vec3 v, float t){
float cost = cos(t); float sint = sin(t);
return vec3(v.x * cost + v.z * sint, v.y, -v.x * sint + v.z * cost);
}
float smin( float a, float b, float k )
{
float h = clamp( 0.5+0.5*(b-a)/k, 0.0, 1.0 );
return mix( b, a, h ) - k*h*(1.0-h);
}
float noise(vec3 p){
float t = uTime;
vec3 np = normalize(p);
// kind of bi-planar mapping
float a = texture2D(uChannel0,t/20.+np.xy).x;
float b = texture2D(uChannel0,t/20.+.77+np.yz).x;
a = mix(a,.5,abs(np.x));
b = mix(b,.5,abs(np.z));
float noise = a+b-.4;
noise = mix(noise,.5,abs(np.y)/2.);
return noise;
}
float map(vec3 p){
// spheres
float d = (-1.*length(p)+3.)+1.5*noise(p);
d = min(d, (length(p)-1.5)+1.5*noise(p) );
// links
float m = 1.5; float s = .03;
d = smin(d, max( abs(p.x)-s, abs(p.y+p.z*.2)-.07 ) , m);
d = smin(d, max( abs(p.z)-s, abs(p.x+p.y/2.)-.07 ), m );
d = smin(d, max( abs(p.z-p.y*.4)-s, abs(p.x-p.y*.2)-.07 ), m );
d = smin(d, max( abs(p.z*.2-p.y)-s, abs(p.x+p.z)-.07 ), m );
d = smin(d, max( abs(p.z*-.2+p.y)-s, abs(-p.x+p.z)-.07 ), m );
return d;
}
float color( vec3 p){
return 0.;
}
void main()
{
// Ray from UV
vec2 uv = gl_FragCoord.xy.xy * 2.0 / uResolution.xy - 1.0;
uv.x *= uResolution.x / uResolution.y;
vec3 ray = normalize(vec3(1.*uv.x,1.*uv.y,1.));
// Color
vec3 color = vec3(0);
const int rayCount = 1024;
// Raymarching
float t = 0.;
for (int r = 1; r <= rayCount; r++)
{
// Ray Position
vec3 p = vec3(0,0,-3.) + ray * t;
// Rotation
p = rotateY(p, vec4(uMouse.xy, uMouse.z > 0.5 ? uMouse.xy : vec2(0.0)).x/uResolution.x * 2.* 3.14);
p = rotateY(p,uTime/3.);
// Deformation
float mask = max(0.,(1.-length(p/3.)));
p = rotateY(p,mask*sin(uTime/2.)*1.2);
p.y += sin(uTime+p.x)*mask*.5;
p *= 1.1+(sin(uTime/2.)*mask*.3);
// distance
float d = map(p);
//color
if(d<0.01 || r == rayCount )
{
float iter = float(r) / float(rayCount);
float ao = (1.-iter);
ao*=ao;
ao = 1.-ao;
float mask = max(0.,(1.-length(p/2.)));
mask *= abs(sin(uTime*-1.5+length(p)+p.x)-.2);
color += 2.*vec3(.1,1.,.8) * max(0.,(noise(p)*4.-2.6)) * mask;
color += vec3(.1,.5,.6) * ao * 6.;
color += vec3(.27,.2,.4)*(t/8.);
color *= 2.;
color -= .15;
break;
}
// march along ray
t += d *.5;
}
// vignetting effect by Ippokratis
// https://www.shadertoy.com/view/lsKSWR
uv = gl_FragCoord.xy.xy / uResolution.xy;
uv *= 1.0 - uv.yx;
float vig = uv.x*uv.y * 20.0;
vig = pow(vig, 0.25);
color *= vig;
//color adjustement
color.y *= .8;
color.x *= 1.5;
gl_FragColor = vec4(color, 1);
}