Core from Armando Rodriguez on Vimeo.
Made with Processing + GLSL
Visual by José Armando Rodríguez
«Core» is a generative video coded with Processing and GLSL, this element system is based on Inigo Quilez´s shaders works (iquilezles.org/www/index.htm).
Music: T-Mass – Up In Flumes (soundcloud.com/t-mass)
//Shader reference iquilezles.org/www/index.htm
//.glsl FILE add to data folder (processing).
uniform vec2 iResolution;
uniform float iGlobalTime;
uniform float mouseX;
uniform float mouseY;
const mat2 m = mat2( 0.80, 0.60, -0.60, 0.80 );
float noise( in vec2 x )
{
return sin(1.5*x.x)*sin(1.5*x.y);
}
float fbm4( vec2 p )
{
float f = 0.0;
f += 0.5000*noise( p ); p = m*p*mouseX;
f += 0.2500*noise( p ); p = m*p*mouseX;
f += 0.1250*noise( p ); p = m*p*mouseX;
f += 0.0625*noise( p );
return f/0.9375;
}
float fbm6( vec2 p )
{
float f = 0.0;
f += 0.500000*(0.5+0.5*noise( p )); p = m*p*2.32;
f += 0.250000*(0.5+0.5*noise( p )); p = m*p*2.33;
f += 0.125000*(0.5+0.5*noise( p )); p = m*p*2.31;
f += 0.062500*(0.5+0.5*noise( p )); p = m*p*2.34;
f += 0.031250*(0.5+0.5*noise( p )); p = m*p*2.31;
f += 0.015625*(0.5+0.5*noise( p ));
return f/0.96875;
}
float fbm8( vec2 p )
{
float f = 0.0;
f += 0.700000*(0.5+0.5*noise( p )); p = m*p*1.32;
f += 0.556540*(0.5+0.5*noise( p )); p = m*p*1.33;
f += 0.434000*(0.5+0.5*noise( p )); p = m*p*1.31;
f += 0.252500*(0.5+0.5*noise( p )); p = m*p*1.34;
f += 0.134500*(0.5+0.5*noise( p )); p = m*p*1.30;
f += 0.062450*(0.5+0.5*noise( p )); p = m*p*1.33;
f += 0.027550*(0.5+0.5*noise( p )); p = m*p*1.31;
f += 0.016565*(0.5+0.5*noise( p ));
return f/0.98853;
}
float func( vec2 q, out vec4 ron )
{
float ql = length( q );
q.x += 0.05*sin(0.27*iGlobalTime+ql*4.1);
q.y += 0.05*sin(0.23*iGlobalTime+ql*4.3);
q *= 0.5;
vec2 o = vec2(0.0);
o.x = 0.5 + 0.5*fbm4( vec2(15.0*q +vec2(3.2) ) );
o.y = 0.5 + 0.5*fbm4( vec2(15*q+vec2(5.2)) );
float ol = length( o );
o.x += 0.4*sin((0.12*iGlobalTime+ol))/ol;
o.y += 0.4*cos((0.14*iGlobalTime*2+ol))/ol;
vec2 n;
n.x = fbm6( vec2(4.0*o+vec2(9.2)) );
n.y = fbm6( vec2(4.0*o+vec2(5.7)) );
/////NEW/////////////////////////////////////////////////
float oli = length( n );
n.x += 0.4*sin((0.12*iGlobalTime+oli))/oli;
n.y += 0.4*cos((0.14*iGlobalTime*2+oli))/oli;
vec2 m;
m.x = fbm6( vec2(4.0*n+vec2(3.2)) );
m.y = fbm6( vec2(4.0*n+vec2(6.7)) );
//illuminacion
vec2 p = 8.0*q + 8.0*m + 8.0*n;
float f = 0.5 + 0.5*fbm4( p );
f = mix( f, f*f*f*1.5, f*abs(n.y) );
float g = 0.5 + 0.5*sin(sin(4.0*p.x))*sin(cos(4.0*p.y));
f *= 1.0-0.5*pow( g, 28.0 );
ron = vec4( o, n );
return f;
}
vec3 doMagic(vec2 p)
{
vec2 q = p*0.0005;
vec4 on = vec4(0.0);
float f = func(q, on);
vec3 col = vec3(0.0);
col = mix( vec3(mouseY,0.4,0.6), vec3(0.1,0.1,0.3), f );
col = mix( col, vec3(0.62,0.42,0.29), dot(on.zx,on.zz) );
col = mix( col, vec3(0.2,0.9,0.9), 0.2*on.y*on.y );
//fondo
col = mix( col, vec3(0.1,0.7,0.1), 0.9*smoothstep(1.2,1.3,abs(on.z)+abs(on.w)) );
col = clamp( col*f*2.0, 0.0, 1.0 );
vec3 nor = normalize( vec3( dFdx(f)*iResolution.x, 6.0, dFdy(f)*iResolution.y ) );
vec3 lig = normalize( vec3( 0.9, -0.2, -0.4 ) );
float dif = clamp( 0.3+0.7*dot( nor, lig ), 0.0, 1.0 );
vec3 bdrf;
bdrf = vec3(0.70,0.7,0.95)*(nor.y*0.5+0.5);
bdrf += vec3(0.15,0.10,0.5)*dif;
col *= 1.0*bdrf;
col = 1.0-col;
//1.3 brillo
return 1.3*col*col;
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 q = fragCoord.xy / iResolution.xy;
vec2 p = -1.0 + 2.0 * q;
p.x *= iResolution.x/(iResolution.y);
p.y *= iResolution.x/(iResolution.y);
fragColor = vec4( doMagic( p ), 1.0 );
}
void main() {
mainImage(gl_FragColor,gl_FragCoord.xy);
}
//Processing File .pde
PShader Shrtoy;
float t= 0;
void setup() {
size(1980, 1080, P3D);
noStroke();
Shrtoy = loadShader(«warping2.glsl»);
Shrtoy.set(«iResolution», float(1), float(1));
}
void draw() {
Shrtoy.set(«iGlobalTime», t / 1000.0);
float dato = map(mouseX, width, height, 2, 2.2);
float dato2 = map(mouseY, width, height, 0, 1);
Shrtoy.set(«mouseX», dato);
Shrtoy.set(«mouseY», dato2);
filter(Shrtoy);
t=frameCount*40;
if (key == ‘s’ || key == ‘S’) {
saveFrame(«shader-######.png»);
}
}