我有一个无限程序生成地形的游戏。我使用 1/f 噪声作为高度(我认为这是柏林噪声?)。无论如何,它看起来不错,但它不是很好玩,因为它并没有真正的平坦区域。仅仅降低幅度是行不通的,因为我仍然想要高度的较大变化。有谁知道我可以应用于高度图以鼓励平坦区域同时保持大范围高度的过滤器?
用 C# 编写
编辑:我已经意识到我想要的是陡峭的渐变变得更陡峭,而平坦的渐变变得更平坦。地形不需要是真实的,对于 FPS 来说只是“有趣”。
不确定这是否会有所帮助,但您可以使您的函数范围很可能转换为平面。例如,介于 0.1 和 0.3 之间的所有结果都有 80% 的概率以 0.1 曲面结束。通过这种方式,您可以鼓励平面,但保持您想要的高可变性。
我相信您需要使用平滑功能来消除地形的锯齿状,如果这似乎是您的问题。
我只浏览了这个页面,但它可能是一个不错的指南: http ://www.float4x4.net/index.php/2010/06/generating-realistic-and-playable-terrain-height-maps/
简单的噪声不足以生成好看的地形。这只是更复杂过程中的中间步骤之一。你需要模拟一些真实世界的现象:温度、侵蚀、降水,诸如此类。通常,这是一个占用大量 CPU 资源的过程,但值得付出努力。以下是一些有趣的链接:
地牢联盟 - 阅读所有内容。好东西。
多里恩编年史的世界一代文章:
(您也可以下载生成器,但它是用 C++ 编写的)
您需要一个“主随机生成器”,它会以您选择的频率来决定新区域的外观。对于山,选择你已经拥有的。对于公寓,选择噪音较小的。
然后您可以按中值过滤器过滤。它会使你的表面变平。但它会毁坏山脉。这对于空心和高原等相对平坦的区域来说很好。如果您想要陡峭的山脉(具有快速和大的高度差异),您应该有选择地应用此过滤器。
您应该寻找更多材料,尤其是在程序纹理和噪声方面。这三个有很大的关系。您应该考虑使用多个具有不同参数的噪声函数,并使用不同的函数或运算符将它们组合起来。
为了帮助您解决问题,您可以使用一个函数生成高频噪声,然后将其乘以低频噪声。这将导致低频噪声接近 1 的峰值和接近 0 的平坦。某种平滑/侵蚀算法也很酷。但是您仍然需要大量的试验和错误并微调您的参数以获得至少可用的结果。
一些更复杂的地形可能需要 10 多个带有 alpha 混合或平滑等的噪声函数。不要认为应用简单的过滤器会得到漂亮的地形。
您可以做一个简单且看起来不错的解决方案是使用自定义曲线函数评估您从噪声图获得的高度。
例如,您可以使曲线图噪声点从 0.1-0.3 变为 0.1-0.15,然后从 0.3-1.0 变为 0.15-1.0。
这样,您仍然保持地形的实际粗糙度,但使其更平坦。