Шум перлина в юнити 2d, как убрать резкие перепады?

Делаю генерацию мира в игре, вид сверху. Использую шум перлина в функции Generate():

    public void Generate()
    {
        for (int y = 0; y < size; y++)
        {
            for (int x = 0; x < size; x++)
            {
                float ny = y / size - Random.Range(0f, 2f);
                float nx = x / size - Random.Range(0f, 2f);
                humidityMap[y, x] = (Mathf.PerlinNoise(nx, ny));

                Debug.Log(humidityMap[y, x]);

                if (humidityMap[y, x] > 0)
                    biomesData[y, x] = Database.biomes[1];
                if (humidityMap[y, x] > 0.3)
                    biomesData[y, x] = Database.biomes[2];
                if (humidityMap[y, x] > 0.5)
                    biomesData[y, x] = Database.biomes[0];

                data[y, x] = biomesData[y, x].primaryBlock;
            }
        }
    }

Потом я заполняю массив биомов и массив тайлов на карте, затем рисую тайлы. Проблема в том что шум перлина генерирует слишком сильные перепады между значениями. Как это можно исправить? Если убрать строчку Random.Range(0f, 2f) при вычислении nx и ny то значения получаются одинаковыми и шум перлина возвращает одинаковые значения. Результат генерации прикреплён

Результат генерации


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Проблема тут: y / size - целочисленное деление. Оно всегда выдаст ноль. Сделайте его вещественным ((float)y / size) и уберите Random.Range.

Чтобы сделать шум случайным вне циклов вычислите

float dy = Random.Range(0f, 1000f);
float dx = Random.Range(0f, 1000f);

В цикле

float ny = (float)y / size + dy;
float nx = (float)x / size + dx;
→ Ссылка