У меня есть процедурно сгенерированный мир в Godot с помощью функций TileSet и Simplex Noise. Изучая этот мир, я создаю вокруг игрока область, в которой создаются чанки. По мере того, как игрок перемещается, куски загружаются и выгружаются.
Когда игрок удаляется на некоторое расстояние от известной точки и возвращает значения, которые я получаю, отличаются от тех, которые были сгенерированы вначале.
Да не понимаю, почему мои значения шума дают разные выходные данные для одних и тех же входов.
так вот мой код, который имеет отношение к созданию шума
Готово:
noise = new OpenSimplexNoise();
noise.Seed = (int)thisPlanet.seed;
noise.Octaves = 4;
noise.Lacunarity = 2.0f;
noise.Period = 64.0f;
noise.Persistence = 0.75f;
За кадр:
chunkPos = new Vector2((int)Mathf.Floor(PlayerStats.planetaryPos.x / map.CellSize.x), (int)Mathf.Floor(PlayerStats.planetaryPos.y / map.CellSize.y));
for (int x = -chunkRenderDistance; x <= chunkRenderDistance; x++)
{
for (int y = -chunkRenderDistance; y <= chunkRenderDistance; y++)
{
Vector2 offsetPos = new Vector2(chunkPos.x + x, chunkPos.y + y);
if (!chunkGrid.ContainsKey(offsetPos))
{
PlanetCell pc = new PlanetCell(offsetPos, (noise.GetNoise2d(offsetPos.x + x, offsetPos.y + y) < 0) ? waterID : landID);
map.SetCellv(offsetPos, pc.id);
chunkGrid.Add(offsetPos, pc);
}
}
}
Конечно, есть еще кое-что для удаления порции и очистки памяти, но это биты, которые дают мне данные для генерации моих плитки.
Почему я должен получать разные выходные значения для (noise.GetNoise2d(offsetPos.x + x, offsetPos.y + y) < 0) ? waterID : landID)
Должен ли он не всегда возвращать одно и то же значение для любого данного входа?
Вот видео, показывающее выпуск: https://youtu.be/9YBhjEjPAPo