public static void GetNoiseMap( float[][] map, int dx = 0, int dy = 0, int octaves = 1, float persistance = 0.5f, float lacunarity = 2.0f, float sx = 1.0f, float sy = 1.0f, int seed = 0 ) { var random = new Random(seed); var width = map.GetWidth(); var height = map.GetHeight(); var pmin = 0.0f; var pmax = 1.0f; for (uint i = 1; i < octaves; ++i) { var ppow = Mathx.Pow(persistance, i); pmin += ppow * 0.25f; pmax += ppow * 0.75f; } var rdx = random.NextFloat(-99999.0f, +99999.0f); var rdy = random.NextFloat(-99999.0f, +99999.0f); var fx = 1.0f / (sx * width); var fy = 1.0f / (sy * height); for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { float amplitude = 1.0f; float frequency = 1.0f; float value = 0.0f; for (int i = 0; i < octaves; ++i) { float sampleX = ((x - dx) * fx) * frequency + rdx; float sampleY = ((y - dy) * fy) * frequency + rdy; float pv = Mathf.PerlinNoise(sampleX, sampleY); value += pv * amplitude; amplitude *= persistance; frequency *= lacunarity; } map[x][y] = Mathf.SmoothStep(pmin, pmax, value); } } }