uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; varying float vDistance; float random(in float x) { return fract(sin(x) * 1e4); } // Based on Morgan McGuire @morgan3d // https://www.shadertoy.com/view/4dS3Wd float noise(in vec3 p) { const vec3 step = vec3(110.0, 241.0, 171.0); vec3 i = floor(p); vec3 f = fract(p); // For performance, compute the base input to a // 1D random from the integer part of the // argument and the incremental change to the // 1D based on the 3D -> 1D wrapping float n = dot(i, step); vec3 u = f * f * (3.0 - 2.0 * f); return mix(mix(mix(random(n + dot(step, vec3(0, 0, 0))), random(n + dot(step, vec3(1, 0, 0))), u.x), mix(random(n + dot(step, vec3(0, 1, 0))), random(n + dot(step, vec3(1, 1, 0))), u.x), u.y), mix(mix(random(n + dot(step, vec3(0, 0, 1))), random(n + dot(step, vec3(1, 0, 1))), u.x), mix(random(n + dot(step, vec3(0, 1, 1))), random(n + dot(step, vec3(1, 1, 1))), u.x), u.y), u.z); }