Added perlin noise generation