Appendix B. Perlin Noise

Perlin noise is the algorithm for generating a series of slowly changing random values that behave just like the parameters of live motion of a living creature. It is one of the most used algorithms in computer graphics. It is used for random object movement, texture generation, and so on. Many examples in the book are essentially based on using Perlin noise. In this appendix, we will find out what Perlin noise is and how to use it in openFrameworks projects; we will cover the following topics:

  • Perlin noise basics
  • Using the ofNoise() function
  • Space-coherent noise

Perlin noise basics

Perlin noise is the algorithm used for computing values of a pseudo-random function, smoothly depending on its parameters. It was originally developed in 1982 by Ken Perlin and named after him. Today, it's called classical noise. In 2001, Ken Perlin developed a modification of the algorithm and called it simplex noise. Simplex noise works faster than classical noise, but the results differ a little.

Nowadays both noises are widely used. Often it is not very important which algorithm is used in a given case; that's why we will refer to both of them as just Perlin noise.

For a developer, the Perlin noise function ofNoise( t ) just takes values in the range [0, 1] and depends on the parameter t. The dependence is smooth; that is, a small change in the value of the input parameter t leads to a small change in the output result. But, unlike any other mathematical function such as sin( t ) or exp( t ), Perlin noise is not periodic and is not constantly increasing. It has complex and non-repetitive behavior, which is called pseudo-random behavior. That is, on one hand it is a function that seems random, and on the other hand it is fixed. No matter how many times you compute ofNoise( t ) for the given t, you will obtain exactly the same result.

The main advantage of Perlin noise compared to an ordinary pseudo-random number generator, ofRandom( a, b ), is the controllable smoothness. Indeed, if we will consider float values A0 = ofNoise( t ), A1 = ofNoise( t+0.01 ), and A2 = ofNoise( t+0.1 ) for different values of t, we will find that often A1 is closer to A0 than A2. Hence we can control the resultant smoothness of the graph of ofNoise( t ), built for discrete set of values t, by controlling the step of incrementing these values. Contradictorily, two calls of ofRandom( 0, 1 ) generate two uncorrelated numbers, and there is no way to control their proximity.

Now let's see how to use Perlin noise in openFrameworks projects.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset