当前位置: 首页 > 知识库问答 >
问题:

减小柏林噪声的范围

穆招
2023-03-14

我有一个柏林噪声函数,我想用它来为我的游戏挑选生物群落地图。问题是,生物群落是由两个因素决定的——平均降雨量和平均温度。所以,我想,我只需要做两个柏林噪声函数,然后重叠它们。

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

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

共有1个答案

司寇昱
2023-03-14

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

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

  • 首先生成温度图

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

因此,即使为每个层滚动最大随机值,合成值也将受到温度指定的最大值的限制。

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

编辑:

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

  • 独立生成温度图和降雨量图
  • 将降雨图乘以温度图(按范围缩放
 类似资料:
  • 我使用柏林噪声生成2D高度图。起初,我手动尝试了一些参数,并为我的工作找到了振幅、持久性...的良好组合。 现在我正在开发该程序,我为用户添加了更改贴图参数并为自己制作新贴图的功能,但现在我发现某些参数(主要是倍频程和频率)的值不在我以前看到的范围内。我认为,如果设定的振幅=20,我从中得到的值(高度)将在[0,20]或[-10,10]或[-20,20]范围内,但现在我看到振幅不是控制输出范围的唯

  • 我正在研究一些相干噪声的各种实现(我知道有库,但这主要是为了我自己的启发和好奇心)以及如何使用它,我对最初的Perlin噪声有一个问题。 根据这个经常链接的数学常见问题,输出范围将介于-1和1之间,但我不明白该值是如何在该范围内的。 据我所知,算法基本上是这样的:每个网格点都有一个相关的长度为1的随机梯度向量。然后,对于每个点,对于所有四个周围的网格点,计算随机梯度和从该网格点出发的向量的点积。然

  • 我最近一直在尝试用C实现一个Perlin噪声发生器(基于Ken Perlin的网站,使用SDL库作为屏幕输出),但输出显示插值块之间的边不是连续的或平滑的-插值块确实表现为块。 我很确定我的代码中缺少了一些东西,或者做错了,但我似乎找不到它。 作为参考,我的当前代码如下: 用法:跑步时,按住上下键可放大或缩小噪声网格。

  • 我想让3D Perlin噪波算法适应较低的维度,但我在梯度函数方面遇到了问题,因为我不完全理解推理。 原始的Perlin梯度函数采用四个参数:一个和一个三维坐标。函数的结果基于的值返回,如下所示。 : : : : : : : : : : : : : : : : 从0到11的返回值构成了一种模式,因为每个组合只表示一次。然而,最后四个是重复的。为什么选择它们来拟合最后四个返回值?有两个维度(x,y)

  • GaussianNoise层 因为这是一个起正则化作用的层,该层只在训练时才有效。 GaussianDropout层 因为这是一个起正则化作用的层,该层只在训练时才有效。 AlphaDropout Alpha Dropout是一种保持输入均值和方差不变的Dropout,该层的作用是即使在dropout时也保持数据的自规范性。 通过随机对负的饱和值进行激活,Alphe Drpout与selu激活函数

  • GaussianNoise层 keras.layers.noise.GaussianNoise(sigma) 为层的输入施加0均值,标准差为sigma的加性高斯噪声。该层在克服过拟合时比较有用,你可以将它看作是随机的数据提升。高斯噪声是需要对输入数据进行破坏时的自然选择。 一个使用噪声层的典型案例是构建去噪自动编码器,即Denoising AutoEncoder(DAE)。该编码器试图从加噪的输