我正在努力获得一个像Terraria游戏一样的自然景观。我使用元胞自动机为表面生成洞穴和1d Perlin噪声。结果是这样的:我的原型
但这并不能让我满意,因为最初的目标是获得这样的东西:我想要什么
我知道在第二种情况下,也使用了Perlin噪声,但我完全不知道如何实现这一点。有人能建议我如何在Perlin噪音的情况下实现第二种情况吗?
我会做什么:
-
对2D噪波使用Simplex而不是Perlin。Simplex避免了Perlin的许多可见网格对齐特性。你可以在这张图中看到,顶部的佩林经常沿着45度和90度的方向。我创建/使用/推荐的噪音应该是
this,特别是(编辑:既然你使用的是Python,你可以使用这个(Noise2_XBeforeY
函数,因为它旋转了三角形网格,试图看起来最适合Terraria风格的游戏 -
从
abs(noise(frequency*x, frequency*y)) < threshold ? cave : leave_solid
开始。调整频率阈值,直到它们产生所需的大小/分布。 -
利用分形噪声改善洞穴的形状和变化。
abs(noiseA(frequency*x, frequency*y) + noiseB(2*frequency*x, 2*frequency*y)*0.5 + ...) < threshold ? cave : leave_solid
-
与高度进行比较,使洞穴在上升时变得更小。用你在地下有多远的函数代替阈值,例如
threshold = f(height(y) - y)
,其中f(t) =
类似于t / (t + 1)
。注意height(y) - y
是如何在地下越深时变得越大的(假设Y在下降时为负(,t / (t + 1)
保持了增量,但平稳地防止其超过1。f(t) = t / (t + 1)
可能无法单独工作,因此您可能需要像f(t) = thresholdMax * t / (thresholdIncreaseRate * t + 1)
一样对其进行概括。为thresholdMax和thresholdIncreaseRate选择最适合您用途的值。