为了实现程序化地形,我实现了双线性插值白噪声。
我可以得到这种结果:
我想实现脊形分形噪声,以获得更真实的地形,例如:
但是,我找不到有关脊形分形噪声的很好的教程。你能告诉我怎么做吗?
最佳答案
脊式Perlin噪声实际上很容易做到-您只需对最终的高度图或噪声层的某些子集进行ABS()(然后反转所得的高度图值,以确保脊出现在较高的值)。
示例:(带有三线性插值的基本Perlin噪声,然后是整个高度场的ABS和INVERT)。 (INVERT的意思是“乘以-1”。)
我强烈建议尝试分形噪声层的各种配置以及基本的数学/逻辑运算。
另一个示例:(两个不同的低频Perlin噪声层使用逻辑INTERSECTION/数学MINIMUM函数合并)
但是,对分形噪声算法进行简单的修改不会为您提供那些看起来像“下坡”的细节(并使地形更加逼真和吸引人)。要实现这些目标,您将需要添加某种侵 eclipse 模拟,这是一种更为复杂的野兽(在算法方面和在CPU方面)。
有关这方面的信息,我推荐这两篇论文(您可以忽略GPU部分,算法可以在CPU上正常工作,尽管以我的经验,对于1000x1000 px的图像,仿真需要花费一分钟左右的时间):
编辑:
让我们澄清一下“在高度字段上应用ABS”的含义。
您只需在 map 的每个像素中获取高度的数值,然后在其上应用ABS()函数,并丢弃其符号即可。
假定珀林噪声发生器生成的值在范围(或另一个以0为中心的范围)内。预计约50%的像素的值大于0,而预期约50%的像素的值小于0。
由于所有双线性/三线性插值将确保曾经有一个平滑的斜率穿过0值,因此ABS会在0所在的位置创建尖锐的山脊。
考虑这张图片:
它显示了两个COS(x)函数,其中一个是使用ABS函数调制的(我添加了一个小的偏移量以确保两条线分别可见)。现在,想象一下紫色的线是垂直翻转的-您最终会看到两座山,两山之间有锋利的山脊和一个山谷:)
关于opengl - 具有脊形分形噪声的程序地形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36796829/