79 lines
2.1 KiB
GLSL
79 lines
2.1 KiB
GLSL
const mat2 m = mat2(0.80, 0.60, -0.60, 0.80);
|
|
|
|
float noise(in vec2 p)
|
|
{
|
|
return sin(p.x) * sin(p.y);
|
|
}
|
|
|
|
float fbm4(vec2 p)
|
|
{
|
|
float f = 0.0;
|
|
f += 0.5000 * noise(p); p = m * p * 2.02;
|
|
f += 0.2500 * noise(p); p = m * p * 2.03;
|
|
f += 0.1250 * noise(p); p = m * p * 2.01;
|
|
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.02;
|
|
f += 0.250000 * (0.5 + 0.5 * noise(p)); p = m * p * 2.03;
|
|
f += 0.125000 * (0.5 + 0.5 * noise(p)); p = m * p * 2.01;
|
|
f += 0.062500 * (0.5 + 0.5 * noise(p)); p = m * p * 2.04;
|
|
f += 0.031250 * (0.5 + 0.5 * noise(p)); p = m * p * 2.01;
|
|
f += 0.015625 * (0.5 + 0.5 * noise(p));
|
|
return f / 0.96875;
|
|
}
|
|
|
|
vec2 fbm4_2(vec2 p)
|
|
{
|
|
return vec2(fbm4(p), fbm4(p + vec2(7.8)));
|
|
}
|
|
|
|
vec2 fbm6_2(vec2 p)
|
|
{
|
|
return vec2(fbm6(p + vec2(16.8)), fbm6(p + vec2(11.5)));
|
|
}
|
|
|
|
float func(vec2 q, out vec4 ron)
|
|
{
|
|
q += 0.03 * sin(vec2(0.27, 0.23) * iTime + length(q) * vec2(4.1, 4.3));
|
|
vec2 o = fbm4_2(0.9 * q);
|
|
o += 0.04 * sin(vec2(0.12, 0.14) * iTime + length(o));
|
|
vec2 n = fbm6_2(3.0 * o);
|
|
ron = vec4(o, n);
|
|
float f = 0.5 + 0.5 * fbm4(1.8 * q + 6.0 * n);
|
|
|
|
return mix(f, f * f * f * 3.5, f * abs(n.x));
|
|
}
|
|
|
|
void mainImage(out vec4 fragColor, in vec2 fragCoord)
|
|
{
|
|
vec2 p = (2.0 * fragCoord - iResolution.xy) / iResolution.y;
|
|
float e = 2.0 / iResolution.y;
|
|
|
|
vec4 on = vec4(0.0);
|
|
float f = func(p, on);
|
|
|
|
vec3 col = vec3(0.0);
|
|
col = mix( vec3(0.9,0.7,0.1), vec3(0.1,0.5,0.05), f );
|
|
col = mix( col, vec3(0.3,0.3,0.1), dot(on.zw,on.zw) );
|
|
col = mix( col, vec3(0.4,0.3,0.3), 0.2 + 0.5*on.y*on.y );
|
|
col = mix( col, vec3(0.7,0.2,0.1), 0.5*smoothstep(1.2,1.3,abs(on.z)+abs(on.w)) );
|
|
col = clamp( col*f*2.0, 0.0, 1.0 );
|
|
|
|
// gpu derivatives - bad quality, butfast
|
|
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 lin = vec3(0.70, 0.90, 0.95) * (nor.y * 0.5 + 0.5) + vec3(0.15, 0.10, 0.05) * dif;
|
|
col *= 1.2*lin;
|
|
col = 1.0 - col;
|
|
col = 1.1*col*col;
|
|
|
|
fragColor = vec4( col, 1.0 );
|
|
}
|