Градиентные круги для генератора карт

Поэтому я делаю генератор карт, который создает случайные острова. Он использует Perlin Noise в основе генератора, а затем метод, использующий круги с градиентами для создания островков.

Метод окружностей создает количество окружностей в центре карты с градиентом от цвета, начинающегося с 64 до 0. Проблема заключается в том, что этот метод создает ненатруальный взгляд на части карты с круглыми краями. Когда для пикселя генерируется шум перлина, он получает этот пиксель на карте градиента и затем умножает его на синее значение.

Таким образом, если шум перлина дает единицу на пикселе 1, 5, а значение синего цвета на карте градиента равно 54, оно выведет значение шума 54. Если шум перлина на пикселе 130, 560 равен 0,5, а значение цвета градиента равно 64 тогда значение шума 32.

Вот что я получаю:

В коде есть два ключевых момента, бит perlin:

noise = NoiseGenerator.Noise(x, y);
double gradColour = getGradColour(x, y).B;
double addedNoise = noise * gradColour;
double gradNoise = addedNoise;// - gradColour;

А затем генератор карт градиента:

    public static void DrawGrad(float X, float Y, float R, Color C1, Color C2)
    {
        Graphics g = Graphics.FromImage(imgGrad);
        GraphicsPath path = new GraphicsPath();
        path.AddEllipse(X, Y, R, R);

        PathGradientBrush pathGrBrush = new PathGradientBrush(path);
        pathGrBrush.CenterColor = C1;

        Color[] colours = { C2 };
        pathGrBrush.SurroundColors = colours;
        g.FillEllipse(pathGrBrush, X, Y, R, R);
        //g.FillEllipse(Brushes.Red, X, Y, R, R);
        g.Flush();
    }

        int amount = rnd.Next(25, 30);
        for (int i = 0; i < amount / 4; i++)
        {
            float X = rnd.Next(-800, 1748);
            float Y = rnd.Next(-800, 1748);
            float R = rnd.Next(1000, 1200);
            DrawGrad(X, Y, R, Color.FromArgb(255, 0, 0, rnd.Next(15, 20)), Color.FromArgb(0, 0, 0, 0));
        }
        for (int i = 0; i < amount; i++)
        {
            double positionDiv = 1.98;
            double X1 = rnd.Next(0, 450) / positionDiv;
            double Y1 = rnd.Next(0, 450) / positionDiv;
            double R1 = rnd.Next(300, 650) / 4;
            float R = (float)R1;
            float X = (float)X1;
            float Y = (float)Y1;

            while (X + R > 1004)
            {
                X = 924 - R;
            }
            while (Y + R > 1004)
            {
                Y = 924 - R;
            }
            if(X < 30)
            {
                X = 30;
            }
            if(Y < 30)
            {
                Y = 30;
            }
            DrawGrad(X, Y, R, Color.FromArgb(255, 0, 0, rnd.Next(40, 64)), Color.FromArgb(0, 0, 0, rnd.Next(13, 17)));
        }

Мне просто интересно, если кто-нибудь еще знает какие-либо другие методы в C #, которые могли бы создать остров, используя шум Perlin? Любой совет будет принята с благодарностью.