分形噪声地形生成奇怪的伪影线

5
我有一个由Perlin分形噪声模式生成的地形,生成的地形非常惊人。我遇到的问题是一些奇怪的线条横穿X和Z坐标,我认为这与分形生成有关,但当我生成了一个二维图像时,我看不到任何伪影。伪影线

地形的生成是通过将地形分成块来完成的,每个块又被分成具有大小的瓦片,其取决于分辨率。

对于每个瓦片,我以类似的方式计算四个角落:

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中简单光照的工作方式有关,如果我还找不到解决办法,我将更新这个信息。
如果有人知道一个简单的方法来减少他们对景观造成的影响或者有好的建议,请在下面发表 :)

不是真正的解决方案(更像是一种视觉技巧,以减少伪影),在部署地形之前对高度图应用一些模糊处理,这可能会让您绕过真正的问题,同时跟踪它。 - higuaro
1
我不确定你的代码具体是如何设置的,但那看起来像是瓦片之间的不连续性。举个例子:如果你使用固定尺寸渲染了一张2D噪声图像,然后将该图像平铺,那么每个图像边界处都会有不连续性。你是否在x、z坐标上执行了模函数(或类似的操作)? - Anna Dickinson
2个回答

0
我的第一反应是为什么你要手动计算音阶,而不使用noiseDetail呢?

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

如果你只是想要更大的噪声幅度,可以将噪声的输出乘以一个大于1的数。如果你想在这个幅度内有更多的细节存在,可以增加noiseDetail。

你所看到的伪影是因为你使用了相同种子生成的八度对齐柏林噪声,并且没有进行平滑处理。另外,在生成值之间还进行了一些实现特定的插值操作。要么自己实现柏林噪声,要么使用内置的柏林噪声,不要尝试同时进行两者。


0
看到你的图片,我不确定但感觉像是类型转换问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接