-
-
Save KHN190/8707ccb92a36ae1ba3406fdbeb02b26c 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
#ifdef GL_ES | |
precision mediump float; | |
#endif | |
uniform vec2 u_resolution; | |
uniform vec2 u_mouse; | |
uniform float u_time; | |
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); } | |
float random (in vec2 st) { | |
return fract(sin(dot(st.xy, vec2(12.9898, 78.233))) * 43758.5453123); | |
} | |
float noise (in vec2 st) { | |
vec2 i = floor(st); | |
vec2 f = fract(st); | |
// Four corners in 2D of a tile | |
float a = random(i); | |
float b = random(i + vec2(1.0, 0.0)); | |
float c = random(i + vec2(0.0, 1.0)); | |
float d = random(i + vec2(1.0, 1.0)); | |
vec2 u = f * f * (3.0 - 2.0 * f); | |
return mix(a, b, u.x) + | |
(c - a)* u.y * (1.0 - u.x) + | |
(d - b) * u.x * u.y; | |
} | |
float snoise(vec2 v) { | |
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 | |
vec2 i = floor(v + dot(v, C.yy) ); // skewing, project to simplex | |
vec2 x0 = v - i + dot(i, C.xx); // unskewing, get simplex's vertex | |
// helper vector to find other 2 triangle verteces | |
vec2 i1; | |
i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0); | |
vec4 x12 = x0.xyxy + C.xxzz; | |
x12.xy -= i1; | |
// avoid truncation effects in permutation | |
i = mod289(i); | |
// random numbers for gradient generation | |
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.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0); | |
m = m*m ; | |
m = m*m ; | |
// generate irrational number fraction | |
vec3 x = 2.0 * fract(p * C.www) - 1.0; | |
vec3 h = abs(x) - 0.5; | |
m *= 1.2; // it is scaled by smoothstep anyway | |
// gradient contribution from 3 verteces | |
vec3 g; | |
g.x = h.x * x0.x + x.x * x0.y; | |
g.yz = h.yz * x12.xz + x.yz * x12.yw; | |
return 80.0 * dot(m, g); | |
} | |
#define OCTAVES 6 | |
float fbm (in vec2 st) { | |
// Initial values | |
float value = 0.0; | |
float amplitude = .8; | |
float frequency = 0.; | |
// Loop of octaves | |
for (int i = 0; i < OCTAVES; i++) { | |
value += amplitude * snoise(st); | |
st *= 2.; | |
amplitude *= .5; | |
} | |
return value; | |
} | |
void main() { | |
vec2 st = gl_FragCoord.xy/u_resolution.xy; | |
st.x *= u_resolution.x/u_resolution.y; | |
vec3 c1 = vec3(137.0, 71.0, 115.0) / 255.0; | |
vec3 c2 = vec3(227.0, 162.0, 71.0) / 255.0; | |
float a = 0.0; | |
// patterns | |
a += fbm(st * 3.0); | |
// move along time | |
a += snoise(st + vec2(0.0, u_time * -0.3)); | |
gl_FragColor = vec4(mix(c1, c2, sin(a) * 1.0), 1.0); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment