有均匀光滑的随机函数吗?
is there any uniform smooth random function?
我想要的是一个均匀且平滑的随机函数,它在两个值之间有界
平滑随机函数的第一个候选者是柏林噪声,但它的分布并不均匀,如图所示
是否有任何均匀、平滑的 和 钳位随机函数?
首先,您是否需要均匀分布的连续值?还是只需要将区域分成N个等概率的区间?
如果是后者,就简单了。预先生成一个巨大的噪声数组(例如大小为 0x10000000),在许多随机坐标下评估噪声,对数组进行排序,然后将数组划分为您需要的任意多个间隔。如果您想利用噪声分布围绕零对称这一事实,则还可以为每个值将其符号翻转值添加到数组中。每个间隔开始时的排序值是您在边界条件检查中使用的值。
如果你确实需要连续范围的值,那么你可以尝试拟合一个函数来均匀化噪声输出。我提出了一种修改噪声分布的方法 here and it was tried out here。这用于使 4D 噪声具有与 3D 噪声相似的分布,但它也应该用于均匀化。请注意,该公式涉及多项式对整数幂的积分,具体取决于您的调整值,但您可以为少数这些情况手动编写评估函数(可能不需要超过 k=3),然后编写在这些之上进行 lerp 逻辑。然后您可以使用数学或手动+视觉指标来确定最佳调整值。
强制噪声算法选择注意事项:使用质量好的噪声。也就是说,具有良好梯度向量表的单纯形噪声,或域旋转 3D+ Perlin。 FastNoiseLite 支持两者(OpenSimplex2
或 Perlin
+ SetRotationType3D(ImproveXYPlanes)
+ GetNoise(x, y, 0)
)。当教程在没有任何警告的情况下推荐使用 Perlin 噪声时,请对它持保留态度。 Perlin 是一种较旧的噪声算法,如果没有域旋转技术,它会产生很多方形,这对于大多数应用程序来说是完全不必要的妥协。
编辑:注意图像中的域是 0 到 1。大多数噪声实现,实际上我链接的库,使用范围 -1 到 1。不过,如果需要,您可以在统一化后重新缩放。
我想要的是一个均匀且平滑的随机函数,它在两个值之间有界
平滑随机函数的第一个候选者是柏林噪声,但它的分布并不均匀,如图所示
是否有任何均匀、平滑的 和 钳位随机函数?
首先,您是否需要均匀分布的连续值?还是只需要将区域分成N个等概率的区间?
如果是后者,就简单了。预先生成一个巨大的噪声数组(例如大小为 0x10000000),在许多随机坐标下评估噪声,对数组进行排序,然后将数组划分为您需要的任意多个间隔。如果您想利用噪声分布围绕零对称这一事实,则还可以为每个值将其符号翻转值添加到数组中。每个间隔开始时的排序值是您在边界条件检查中使用的值。
如果你确实需要连续范围的值,那么你可以尝试拟合一个函数来均匀化噪声输出。我提出了一种修改噪声分布的方法 here and it was tried out here。这用于使 4D 噪声具有与 3D 噪声相似的分布,但它也应该用于均匀化。请注意,该公式涉及多项式对整数幂的积分,具体取决于您的调整值,但您可以为少数这些情况手动编写评估函数(可能不需要超过 k=3),然后编写在这些之上进行 lerp 逻辑。然后您可以使用数学或手动+视觉指标来确定最佳调整值。
强制噪声算法选择注意事项:使用质量好的噪声。也就是说,具有良好梯度向量表的单纯形噪声,或域旋转 3D+ Perlin。 FastNoiseLite 支持两者(OpenSimplex2
或 Perlin
+ SetRotationType3D(ImproveXYPlanes)
+ GetNoise(x, y, 0)
)。当教程在没有任何警告的情况下推荐使用 Perlin 噪声时,请对它持保留态度。 Perlin 是一种较旧的噪声算法,如果没有域旋转技术,它会产生很多方形,这对于大多数应用程序来说是完全不必要的妥协。
编辑:注意图像中的域是 0 到 1。大多数噪声实现,实际上我链接的库,使用范围 -1 到 1。不过,如果需要,您可以在统一化后重新缩放。