可玩的高度图

时间:2010-10-25 18:09:40

标签: c# height terrain

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

用C#编写

编辑:我意识到我想要的是陡峭的渐变变得更陡峭,并且平坦的渐变变得更平坦。地形不一定是现实的,只是FPS的“乐趣”。

7 个答案:

答案 0 :(得分:2)

不确定这是否会有所帮助,但您可以将一系列功能转换为具有高概率的平面。例如,0.1和0.3之间的所有结果具有80%的结束概率作为0.1表面。这样,您可以鼓励平面,但要保持您想要的高度可变性。

答案 1 :(得分:2)

我认为你需要使用平滑功能来消除地形的锯齿状,如果这似乎是你的问题。

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

答案 2 :(得分:2)

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

Dungeon League - 阅读全部内容。好东西。

关于Doryen编年史的世界一代文章:

(您也可以下载生成器,但它是用C ++编写的)

答案 3 :(得分:1)

您需要一个“主随机生成器”来决定新区域应该是什么样的,具有您选择的频率。对于山脉,选择你已经拥有的。对于平板选择较少的噪音。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

你应该寻找更多的材料,特别是程序纹理和噪音。这三者有很多相关性。您应该考虑使用具有不同参数的多个噪声函数,并使用不同的函数或运算符进行组合。

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

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

答案 6 :(得分:0)

对于一个简单而好的外观解决方案,您可以做的是使用自定义曲线函数评估从噪声贴图获得的高度。

例如,您可以将曲线图噪声点从0.1-0.3调整为0.1-0.15,然后从0.3-1.0调整为0.15-1.0。

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