From this module, a GLSL implementation of Worley Noise written by Stefan Gustavson can be imported.
A demo can be found here
This module provides four functions, and they can be exported as
#pragma glslify: worley3D = require(glsl-worley/worley3D.glsl)
#pragma glslify: worley2x2x2 = require(glsl-worley/worley2x2x2.glsl)
#pragma glslify: worley2D = require(glsl-worley/worley2D.glsl)
#pragma glslify: worley2x2 = require(glsl-worley/worley2x2.glsl)
And then they can easily be used to generate a texture in a shader by doing something like:
vec2 F = worley3D(vPosition, 1.0, false);
float F1 = F.x;
float F2 = F.y;
gl_FragColor = vec4(vec3(F2-F1), 1.0);
worley3D
is defined as vec2 worley3D(vec3 P, float jitter, bool manhattanDistance)
. It returns a vec2
where x
is F1
and y
is F2
(it is assumed that the reader knows the meaning of these two).
P
is the input point, jitter
is the amount of jitter in the pattern, and if manhattanDistance
is true,
then a manhattan distance is used to generate the pattern, instead of the usual Euclidean distance(this basically makes
the noise appear more "jagged").
The remaining three functions take the same arguments, except that in the case of worley2D
and worley2x2
, P
is a
vec2
.
worley2x2x2
is basically a faster version of worley3D
. But be aware that it has some artifacts. In the same manner,
worley2x2
is basically a faster version of worley2D
, but with some potential artifacts.