可玩高度图

3
我有一个无限的程序生成地形游戏。我使用1/f噪声来控制高度(我认为这是perlin噪声?)。虽然看起来不错,但可玩性不强,因为它没有真正的平坦区域。仅仅减小振幅是行不通的,因为我仍然希望高度有很大的变化。有人知道我可以在高度图上应用的滤波器,以鼓励平坦区域,同时保持大范围的高度变化吗?
使用C#编写。
编辑:我意识到我想要的是使陡峭梯度更陡峭,使平缓梯度更平缓。地形不需要真实,只要对于FPS游戏来说“好玩”即可。
7个回答

2

不确定这是否有帮助,但您可以将函数的范围转换为具有高概率的平坦表面。例如,0.1到0.3之间的所有结果都有80%的概率以0.1表面结束。这样,您可以鼓励平坦表面但保持所需的高可变性。


这使得地形看起来非常人工,我得到了很多平坦的表面,但它们都在同一水平面上。 - Hannesh

2

1
链接把我重定向到了一个奇怪的广告。:( - Alaanor

2
简单的噪声并不足以生成一个好看的地形。它只是更复杂过程中的一个中间步骤。您需要模拟一些真实世界的现象:温度、侵蚀、降水等等。通常这是一个消耗大量 CPU 的过程,但是值得努力。以下是一些有趣的链接:
Dungeon League - 请阅读所有内容。非常棒的东西。 《Doryen编年史》中的世界生成文章:

你也可以下载生成器,但它是用C++编写的。


1
你需要一个“主随机生成器”,它将决定新区域的外观,频率由你选择。对于山区,请选择已有的内容。对于平地,请选择较少的噪音。

0

对于一个简单且外观良好的解决方案,您可以使用自定义曲线函数来评估从噪声图中获取的高度。

例如,您可以将曲线映射噪声点从0.1-0.3到0.1-0.15,然后从0.3-1.0到0.15-1.0。

这样,您仍然保持地形的实际粗糙度,但使其更平坦。


0
你可以使用中值滤波器进行过滤。这会使得表面变平坦,但同时也会破坏山峰。对于相对平坦的地区(如洼地和高原),这不是问题。但如果你想要尖锐的山峰(即高度差大且快速变化),你应该有选择地应用这个滤波器。

0

你应该寻找更多关于程序纹理和噪声的材料,它们之间有很大的关联。你应该考虑使用多个不同参数的噪声函数,并使用不同的函数或运算符将它们组合起来。

为了帮助你的情况,你可以使用一个函数来生成高频噪声,然后将其乘以低频噪声。这将导致低频噪声接近1处出现山峰,接近0处出现平坦地形。一些平滑/侵蚀算法也很不错。但是你仍然需要大量的试验和微调参数才能得到至少可用的结果。

一些更复杂的地形可能需要超过10个噪声函数,并进行alpha混合或平滑等操作。不要认为你可以通过应用简单的滤波器得到好看的地形。


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