Почему мой симплексный шум дает разные значения для одних и тех же входных данных? - PullRequest
0 голосов
/ 21 июня 2020

У меня есть процедурно сгенерированный мир в 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

...