1

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

Как я могу получить более высокий уровень детализации с помощью 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")); 
} 

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

+0

Что конкретно вы подразумеваете под «более высоким уровнем детализации» и «более плоскими результатами»? Пожалуйста, дайте числовые и/или примеры изображений того, что вы сейчас получаете и чего хотите. – Pikalek

+0

http://libnoise.sourceforge.net/tutorials/images/terrainf8p1.jpg Вот пример изображения. Как вы можете видеть, есть горы, но также и неплохая ровная местность с множеством деталей. Я знаю, что это может быть достигнуто в PerlinNoise с добавлением mulitply octaves вместе и с частотой, но я не знаю, как это сделать в OpenSimplexNoise. – ShadowDragon

ответ

1

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

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

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