java - 分形噪声地形产生奇怪的人工制品线

标签 java noise terrain fractals

我有一个由 Perlin Fractal Noise 模式生成的地形,它生成了非常出色的地形。我遇到的问题是一些奇怪的线穿过 X 和 Z 坐标,我认为它与分形生成有关,但当我生成它的 2D 图片时,我看不到任何人工制品。 Artefact lines

地形的生成是通过将地形分割成 block 来完成的,这些 block 又被分割成瓦片,瓦片的大小取决于分辨率。

对于每个图 block ,我以类似的方式为每个角 block 计算四个角:

float corner1 = mapHeight * fractal( x * tileSize +( posX * (mapSize) ) , z * tileSize +( posZ * (mapSize)) ,25000,0.5,16);

分形函数:

float fractal(int x,int y,float gridSubs,float gain,int octaves){
  float total = 0;
  float freq = 1.0/gridSubs;
  float amp = gain;

  for(int f=0;f<octaves;f++){
    total += noise(x*freq,y*freq)*amp;
    freq *= 2.0;
    amp *= gain;
  }
  return total;
}

编辑: 关于为什么会发生这种情况,我还没有真正得到一个好的答案,但一种可能是我的顶点位置有一些奇怪的值(尽管我不应该有)。

我仍在尝试一些方法来有效地渲染景观,而不会因顶点而阻塞我的 GPU。通过一些测试,人工制品很少,据我所知,这可能与 Processing 中简单照明的工作方式有关,如果我仍然找不到解决方法,我会更新它。

如果有人仍然知道一个简单的方法来减少他们对景观的影响,或者只是有一个好的建议,那么请在下面发表:)

最佳答案

我的第一 react 是问为什么要手动计算 Octave 音阶,而不是使用 noiseDetail?

http://www.processing.org/reference/noiseDetail_.html

如果您只想从噪声中获得更多的总振幅,请将噪声输出乘以某个 >1 的标量。如果您希望该振幅内存在更多细节,请增加 noiseDetail。

您看到的伪影是您使用从同一种子生成的 Octave 对齐 perlin 噪声并且只是将其叠加而不进行平滑这一事实的必要组成部分。最重要的是,生成值之间的一些特定于实现的插值正在幕后进行。要么自己做 perlin 噪音,要么使用内置的 perlin 噪音,不要尝试两者都做。

关于java - 分形噪声地形产生奇怪的人工制品线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23344081/

相关文章:

java - StringBuffer 和appender 方法

c++ - 程序生成无缝分形噪声纹理

java - map 生成 - 雨、风和天气

java - 在 Spring MVC 中无法从单独的服务包中找到 bean

java - 通过 JDBC 运行 PL/SQL 和 T-SQL

java - Jackson 树结构的序列化/反序列化

python - 摆脱 Pandas 或其 PieChart 可视化引擎中无关紧要数据的聪明方法?

algorithm - 无限蓝噪音

gis - 铯:铯可以与 float .tif 作为地形图 block 一起使用吗?

c++ - 将 SRTM *.hgt 文件作为纹理传递给 OpenGL 着色器会导致图像倾斜