-2

我想要的是一个均匀且平滑的随机函数,即有界 beetwen 两个值

平滑随机函数的第一个候选者将是 perlin 噪声,但它的分布并不均匀,如图所示


柏林噪声分布




是否有任何均匀、平滑钳位的随机函数?

4

1 回答 1

0

首先,您是否需要具有均匀分布的连续值?还是您只需要将区域划分为 N 个等可能的区间?

如果是后者,那就简单了。预先生成在许多随机坐标处评估的巨大噪声数组(例如大小为 0x10000000),对数组进行排序,然后将数组划分为您需要的任意多个间隔。如果您想利用噪声分布在零附近对称的事实,那么对于每个值,还要将其符号翻转值添加到数组中。每个间隔开始时的排序值是您在边界条件检查中使用的值。

如果您确实需要连续范围的值,那么您可以尝试拟合一个函数来统一噪声输出。我在这里提出了一种修改噪声分布的方法,并在此处进行了尝试。这用于使 4D 噪声具有与 3D 噪声相似的分布,但它也应该能够均匀化。请注意,该公式涉及多项式对整数幂的积分,这取决于您的调整值,但您可以为少数这些情况手动编写评估函数(可能不需要超过 k=3),然后编写lerp 逻辑在这些之上。然后,您可以使用数学或手动+视觉度量来确定最佳调整值。

强制噪声算法选择注意事项:使用质量好的噪声。也就是说,具有良好梯度向量表的单纯形噪声,或域旋转的 3D+ Perlin。FastNoiseLite同时支持(OpenSimplex2Perlin++ SetRotationType3D(ImproveXYPlanes)GetNoise(x, y, 0)。当教程推荐 Perlin 噪声时,不要加任何警告。Perlin 是一种较旧的噪声算法,如果没有域旋转技术,它会产生大量的方形,这对于大多数应用程序来说是完全不必要的妥协。

编辑:注意到图像中的域是 0 到 1。大多数噪声实现,实际上是我链接的库,使用范围 -1 到 1。但是,如果需要,您可以在统一化后重新缩放。

于 2021-04-10T10:46:20.053 回答