OpenSimplex Значительно выше уровень детализации

Я новичок в мире поколения и алгоритмах, которые используются для них, поэтому я надеюсь, что кто-то может дать мне несколько полезных объяснений или код, или оба, или ссылки на некоторые ресурсы, которые я пропустил при поиске решения.

Как я могу получить более высокий уровень детализации с OpenSimplexNoise?

Я знаю, что в некоторых алгоритмах, таких как PerlinNoise, это можно сделать с частотой и сложением кратных октав. Итак, как я могу достичь такой цели с OpenSimplexNoise?

Вот что я уже получил:

    private static final int WIDTH = 512;
private static final int HEIGHT = 512;
private static final double FEATURE_SIZE = 64;

public static void main(String[] args)
    throws IOException {

    OpenSimplexNoise noise = new OpenSimplexNoise(1233313l);
    BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_BYTE_INDEXED);
    for (int y = 0; y < HEIGHT; y++)
    {
        for (int x = 0; x < WIDTH; x++)
        {
            double value = noise.eval(x / FEATURE_SIZE, y / FEATURE_SIZE);
            int rgb = 0x010101 * (int)((value + 1) * 127.5);
            image.setRGB(x, y, rgb);
        }
    }
    ImageIO.write(image, "png", new File("noise1.bmp"));
}

И как мне добиться этого, чтобы получить более ровные результаты для лесов и т. Д.

1 ответ

Решение

OpenSimplexNoise не предоставляет непосредственно описанную вами функциональность, поэтому вам придется предоставить ее самостоятельно. В основном вы неоднократно генерируете слой шума и добавляете его к конечному результату. Более конкретно:

  • Количество октав контролируется количеством циклов.
  • Амплитуда слоя контролируется путем умножения значений данного слоя на некоторое количество. Амплитуда обычно получается из октавного числа; Наиболее распространенным примером является использование 1/(2^n) где n это номер текущей октавы.
  • Частоту можно контролировать, регулируя интервал выборки. Что касается OpenSimplexNoise, вы можете сделать это, умножив x y z параметры на некоторое количество. Опять же, это, как правило, происходит от октавного числа, и наиболее распространенный пример mutliple 2^n,

Настройка количества октав, значений амплитуды и частоты - это больше искусство, чем наука, и она сильно зависит от вашей ситуации. Немного поэкспериментируйте и изучите, что другие использовали, чтобы найти то, что подходит для вашего проекта. Я получаю хорошие результаты, используя 6 октав со стандартной амплитудой и частотой, описанной выше.

Другие вопросы по тегам