Created
October 6, 2019 15:28
-
-
Save karlosgliberal/ada425c790821c8a3d011e3abcb81d47 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Author:karlos g liberal | |
// Title: lineas | |
#ifdef GL_ES | |
precision mediump float; | |
#endif | |
uniform vec2 u_resolution; | |
uniform vec2 u_mouse; | |
uniform float u_time; | |
// Some useful functions | |
vec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; } | |
vec2 mod289(vec2 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; } | |
vec3 permute(vec3 x) { return mod289(((x*34.0)+1.0)*x); } | |
// | |
// Description : GLSL 2D simplex noise function | |
// Author : Ian McEwan, Ashima Arts | |
// Maintainer : ijm | |
// Lastmod : 20110822 (ijm) | |
// License : | |
// Copyright (C) 2011 Ashima Arts. All rights reserved. | |
// Distributed under the MIT License. See LICENSE file. | |
// https://github.com/ashima/webgl-noise | |
// | |
float snoise(vec2 v) { | |
// Precompute values for skewed triangular grid | |
const vec4 C = vec4(0.211324865405187, | |
// (3.0-sqrt(3.0))/6.0 | |
0.366025403784439, | |
// 0.5*(sqrt(3.0)-1.0) | |
-0.577350269189626, | |
// -1.0 + 2.0 * C.x | |
0.024390243902439); | |
// 1.0 / 41.0 | |
// First corner (x0) | |
vec2 i = floor(v + dot(v, C.yy)); | |
vec2 x0 = v - i + dot(i, C.xx); | |
// Other two corners (x1, x2) | |
vec2 i1 = vec2(0.0); | |
i1 = (x0.x > x0.y)? vec2(1.0, 0.0):vec2(0.0, 1.0); | |
vec2 x1 = x0.xy + C.xx - i1; | |
vec2 x2 = x0.xy + C.zz; | |
// Do some permutations to avoid | |
// truncation effects in permutation | |
i = mod289(i); | |
vec3 p = permute( | |
permute( i.y + vec3(0.0, i1.y, 1.0)) | |
+ i.x + vec3(0.0, i1.x, 1.0 )); | |
vec3 m = max(0.572 - vec3( | |
dot(x0,x0), | |
dot(x1,x1), | |
dot(x2,x2) | |
), 0.0); | |
m = m*m ; | |
m = m*m ; | |
// Gradients: | |
// 41 pts uniformly over a line, mapped onto a diamond | |
// The ring size 17*17 = 289 is close to a multiple | |
// of 41 (41*7 = 287) | |
vec3 x = 1.904 * fract(p * C.www) - 1.208; | |
vec3 h = abs(x) - 0.5; | |
vec3 ox = floor(x + 0.5); | |
vec3 a0 = x - ox; | |
// Normalise gradients implicitly by scaling m | |
// Approximation of: m *= inversesqrt(a0*a0 + h*h); | |
m *= 1.521 - 0.85373472095314 * (a0*a0+h*h); | |
// Compute final noise value at P | |
vec3 g = vec3(0.0); | |
g.x = a0.x * x0.x + h.x * x0.y; | |
g.yz = a0.yz * vec2(x1.x,x2.x) + h.yz * vec2(x1.y,x2.y); | |
return 130.0 * dot(m, g); | |
} | |
float random (in float x) { | |
return fract(tan(x+3.0)*1e4); | |
} | |
float random (in vec2 st) { | |
return fract(sin(dot(st.xy, vec2(12.9898,78.233)))* 43758.5453123); | |
} | |
// Function from Iñigo Quiles | |
// https://www.shadertoy.com/view/MsS3Wc | |
vec3 hsb2rgb( in vec3 c ){ | |
vec3 rgb = clamp(abs(mod(c.x*6.0+vec3(0.0,4.0,2.0), | |
6.0)-3.0)-1.0, | |
0.0, | |
1.0 ); | |
rgb = rgb*rgb*(3.0-2.0*rgb); | |
return c.z * mix(vec3(1.0), rgb, c.y); | |
} | |
void main() { | |
vec2 st = gl_FragCoord.xy/u_resolution.xy; | |
vec3 color = vec3(1.); | |
st *= 1.764; | |
st.y += u_time*0.07; | |
st.x *= 10.; | |
float grid = 4.; | |
st.y *= grid; | |
float y = fract(st.y); | |
float idx = floor(st.y); | |
float mid = mix(0.15,0.5,random(idx*10.)); | |
float range = 0.3; | |
float n = mix(0.1, 0.3, snoise(vec2(u_time*-0.68 + random(idx)*1000., st.x))) ; | |
mid += n; | |
float c = smoothstep(mid-1.0,mid, y) - smoothstep(mid,mid+0.15, y); | |
color = hsb2rgb(vec3(0.520,0.664,mix(0.5,0.6,1.-c))); | |
// color = vec3(1.-c); | |
gl_FragColor = vec4(color,1.0); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment