【问题标题】:Making the range of perlin noise smaller使柏林噪声的范围更小
【发布时间】:2014-11-25 18:21:39
【问题描述】:

我有一个柏林噪声函数,我想用它来为我的游戏选择生物群落作为地图。问题是生物群落是由两个因素决定的——平均降水量和平均温度。所以,我想,我只需制作两个 perlin 噪声函数并将它们重叠。

现在的问题是生物群落并不包含所有可能的降水温度组合。例如,没有高降水和低温的生物群落,如图所示。


(来源:wikimedia.org

我怎样才能仍然使用柏林噪声,但永远无法到达生物群落未覆盖的区域?

【问题讨论】:

  • 最简单的解决方案是只要您没有在地图内击中,就重新滚动 Perlin 噪声(显然值略有变化)。不过,不确定这会对您的总积分分配产生什么影响。走出那个“坏”区域可能需要一段时间。
  • 是的,最安全的做法是丢弃任何超出允许范围的结果。

标签: java terrain perlin-noise


【解决方案1】:

您可以将值限制在允许的范围内(例如,温度为 0 °C 的区域中允许的最大降水量为 100 cm)。

您可以在噪声算法本身期间执行此操作,而不仅仅是在整个值字段完成之后。我想它会像这样工作:

  • 首先生成温度图。
  • 当您为降雨噪声生成每个随机值时,生成一个范围内的值,该范围内的值适当缩小到温度图允许的值范围。

示例: 如果您要生成 0 - 250 mm 范围内的随机值(大约是最大可能降雨量的 50%,对于低频噪声层之一),请查看该像素中的温度,看到它是 10 °C,因此随机值将缩小到 0-100 毫米(该温度允许的 0-200 毫米的 50%)。

因此,即使您为每一层滚动最大随机值,合成值也会受到温度指示的最大值的限制。

我不知道这有多现实以及现实主义对你来说有多重要。究竟是什么阻止了低温地区的大雨?我提出的解决方案实际上可以很好地模拟低温地区减少蒸发等因素。

编辑:

还有一个想法,可能最终相当于我的第一个解决方案:

  • 独立生成温度图和降雨图。
  • 将降雨图乘以温度图(缩放到范围 )。这将减少低温地区的降雨量。

【讨论】:

    猜你喜欢
    • 2021-04-29
    • 2012-01-29
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多