Can you give me a basic description of how the simplex noise algorithm works?