Шум перлина в юнити 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;
