private float[,] CreateSimplexNoiseMap(int resolution, int octaves, float persistence, float scale, SimplexNoiseGenerator noiseGen, Func <float, float> tween)
    {
        var values   = new float[resolution, resolution];
        var minValue = 1.0f;
        var maxValue = -1.0f;

        for (int iv = 0; iv < resolution; iv++)
        {
            for (int iu = 0; iu < resolution; iu++)
            {
                double u     = (((double)iu / resolution) * 2.0f - 1.0f) * scale + 0.5f * Offset.x;
                double v     = (((double)iv / resolution) * 2.0f - 1.0f) * scale + 0.5f * Offset.y;
                float  value = (float)noiseGen.EvaluateFractal(u, v, octaves, persistence);
                //Hack, the thing returns mostly between -0.7 and -0.7 for 8 octaves
                value         /= 0.87f;
                value         /= (1.0f - 0.4f * persistence);
                value          = (value + 1.0f) / 2.0f;
                values[iu, iv] = tween(value);
                minValue       = value < minValue ? value : minValue;
                maxValue       = value > maxValue ? value : maxValue;
            }
        }

        /*
         * Debug.Log(minValue);
         * Debug.Log(maxValue);
         */
        return(values);
    }