2010-10-25 47 views
3

我有一个无限程序生成的地形游戏。我使用1/f噪声作为高度(我认为这是perlin噪声?)。无论如何,它看起来不错,但它并不是非常可玩,因为它并不真正拥有平坦的区域。只是减小幅度将不起作用,因为我仍然想要高度变化很大。有谁知道我可以应用于高度图的过滤器来鼓励平坦的区域,同时保持高度的范围?可玩高度图

用C#编写

编辑:我意识到,我想要的是陡坡变得更陡峭,并且平梯度变得平坦。地形不需要现实,对于FPS来说只是“有趣”。

回答

2

我相信你需要使用平滑功能来摆脱地形的锯齿状,如果这似乎是你的问题。

我只是通过这个页面看了看,但它可能是一个不错的指南:http://www.float4x4.net/index.php/2010/06/generating-realistic-and-playable-terrain-height-maps/

+0

这看起来不错!我试图实现它,但侵蚀步骤似乎不适合我的高度图,我可能只是有坏的参数?我会多花一些时间 – Hannesh 2010-10-25 19:26:17

+0

链接将我重定向到一个陌生的广告。 :( – Alaanor 2017-02-06 14:02:25

0

然后您可以按median filter进行过滤。它会使你的表面变平。但它会摧毁山脉。这对于凹陷和高原等相对平坦的区域来说很好。如果你想要锐利的山脉(快速和大高差),你应该选择性地使用这个过滤器。

2

不知道这是否会有所帮助,但是您可以使您的函数范围转换为高概率的平坦表面。例如,0.1和0.3之间的所有结果都有80%的结束概率为0.1表面。这样你就可以鼓励平坦的表面,但保持你想要的高度可变性。

+0

这使得地形看起来很人造,我有很多平坦的表面,但它们都处于同一水平。 – Hannesh 2010-10-25 19:25:26

0

你应该寻找更多的材料,特别是具有程序上的纹理和噪音。这三个关系很大。您应该考虑使用多个不同参数的噪声函数,并使用不同的函数或运算符将它们组合在一起。

为了帮助您的情况,您可以使用一种功能来生成高频噪声,然后将其乘以低频噪声。这将导致低频噪声接近1的峰值和接近0的平坦度。某种平滑/侵蚀算法也很酷。但是你仍然需要大量的试验和错误,并且微调你的参数以获得至少可用的结果。

一些更复杂的terains可能需要超过10个alpha混合或平滑等噪声功能。不要以为你会通过简单的过滤器获得漂亮的地形。

2

简单的噪音不足以产生美观的地形。这只是一个更复杂过程的中间步骤之一。你需要模拟一些现实世界的现象:温度,侵蚀,降水,这类事情。这通常是一个CPU繁重的过程,但非常值得努力。这里有一些有趣的链接:

地牢联盟 - 阅读所有。好东西。

上Doryen编年史

世界生成文章:

(您也可以下载产生过,但它写在C++)

+0

虽然我认为这是个好主意,但我不认为OP需要如此复杂的模拟,但它会让他很好地理解事情是如何运作的。 – Euphoric 2010-10-25 18:46:40

1

你需要一个 “主随机数生成器” 是将根据您选择的频率决定新区域应该是什么样子。对于山来说,选择你已有的东西。对于单位选择较少的噪音。