# Understanding the Perlin Noise

## Introduction

Sure, the value noise we've seen in the previous posts is nice, but it's very blocky, especially with one octave only :

###### A sample of 2D value noise.

And that's very understandable : we fixed a grid of values and interpolates between these values, so we really do see the grid. That might be OK for some applications, but if you want to look natural, these alignments don't look good.

Perlin noise resulted from the work of Ken Perlin, who developed it for the movie Tron (1982) to improve the value noise.

To obfuscate the grid, the idea is not to associate a value at integers coordinates, but a *direction*.

We'll develop here a modern version of Perlin Noise in 1D, 2D, 3D and 4D.

# Improving the value noise.

## Introduction

In this post, we'll improve the value noise we introduced last time in 3 steps :

- we'll improve the code for 1 dimension,
- we'll fractalize the noise,
- we'll extend the value noise in 2D, 3D, 4D.

With all the notions seen for the value noise, it will be considerably simpler to understand the next noises such as the Perlin Noise and the Simplex Noise.

# A first noise : the Value Noise

## Introduction

We've seen in the previous post that the noises we want have special properties. Here, we'll write a noise function that have those, called the **value noise**.

In this post, we'll see :

- how to have reproducible pseudo-random generator for integers,
- how to transform that into a smooth noise for real numbers with an interpolation,
- hot to make a simple implementation of this value noise in Rust.

# A small introduction to noise in informatics.

## Introduction

Just a small blog post to introduce the notion of noise, used particularly in texture synthesis for natural phenomenons. For this introduction, no need to have a mathematical background. In the next posts, I'll try to explain the maths behind noise functions, but that's for later.