具有脊状分形噪声的程序地形

Jim*_*Zer 6 opengl procedural-generation terrain

我实现了双线性插值白噪声,以便在程序上生成地形.

我可以得到这样的结果:

在此输入图像描述

我想实现脊状分形噪声,以获得更逼真的地形,如:

在此输入图像描述

但是我找不到脊状分形噪声的好教程.你能告诉我怎么做吗?

Mat*_*ský 10

正脊Perlin杂其实是相当容易的事 - 你只需要ABS()或者最终高度图或噪声层的一些子集(然后反转产生高度映射值,以确保山脊出现在高值).

例: 在此输入图像描述(具有三线性插值的基本perlin噪声,然后是整个高度场的ABS和INVERT).(INVERT表示"乘以-1".)

我强烈建议尝试各种配置的分形噪声层和基本的数学/逻辑运算.

另一个例子: 在此输入图像描述 (使用逻辑INTERSECTION/math MINIMUM函数合并两个不同的低频perlin噪声层)

然而,对分形噪声算法的简单修改不会给你那些看似"向下流动"的细节(并使地形更加逼真和吸引人).要实现这些目标,您需要添加某种侵蚀模拟,这是一种更复杂的野兽(无论是算法还是CPU).

有关这方面的一些信息,我推荐这两篇论文(您可以忽略GPU部分,算法在CPU上工作正常,但根据我的经验,对于1000x1000像素图像,模拟将需要一分钟左右):

  1. Mei,Xing,Decaudin,Philippe和Hu,Bao-Gang.GPU上的快速水力侵蚀模拟与可视化.2007年.
  2. GPU上的快速液压和热侵蚀.Jákó,Balász.2011.第15届中欧计算机图形学研讨会.

编辑:

让我们通过"在高度场上应用ABS"来澄清我的意思.

您只需在地图的每个像素中获取高度的数值,并在其上应用ABS()函数,丢弃其符号.

这假设perlin噪声生成器生成范围<-1,1>(或以0为中心的另一范围)的值.预计~50%的像素具有大于0的值,并且预期~50%具有小于0的值.

由于所有双线性/三线性插值将确保过去通过0值的平滑斜率,因此ABS会在0处产生尖锐的脊.

考虑这个图像:

在此输入图像描述

它显示了两个COS(x)函数,其中一个函数使用ABS函数进行调制(我添加了一个小偏移量以确保两条线分别可见).现在想象一下,紫色线垂直翻转 - 最后你会看到两座山脉,山脊尖锐,山谷之间有一个山谷:)