Worley Noise

Fig. 1: 2D Worley noise

Worley noise (also called Voronoi noise) is a noise function first proposed by Steven Worley in 1996. Worley noise is an extension of the Voronoi diagram that, for each coordinate, returns a real value corresponding to the distance of the $n$th nearest site.

Processing is a Java-based IDE that requires minimal setup to get images onto the screen. Processing is free to download at processing.org.

Setup

worley.pde
void setup(){
    size(500,500);
    background(100);
}
 
void draw(){
    loadPixels();
    updatePixels();
}

The setup() function is called once. In it, the canvas size is set to 500 by 500 pixels on the $x$ and $y$ axes, respectively. The background() function sets the background colour of the canvas. In this case, the background colour has been set to $(100,100,100)$, just grey.

The draw() function has been created for later. It is called repeatedly, and for now, it loadPixels() to get data from the canvas into the pixels[] array, and it updatePixels() to update the canvas with data from the pixels[] array. The result of this code should be a static grey canvas.

Creating a grid (optional)

A naive approach to Worley noise would be to iterate over each site for each canvas pixel. Each canvas pixel must be processed; that is inevitable. However, we can use optimizations to minimize the number of sites we must process per-pixel.

The optimization involves a grid-based approach where each grid cell has a fixed number of sites. In the code below, a 6×6 grid is used to plot 36 sites (1 site/cell).

worley.pde
PVector[] sites;
 
void setup(){
    size(500,500);
    background(100);
 
    sites = new PVector[36];
 
    // plot loops here
}



Plotting points



Calculating distance