【发布时间】:2021-04-09 21:14:03
【问题描述】:
【问题讨论】:
-
像“这样的功能存在吗”这样的问题更适合math.stackexchange.com
标签: noise-generator
【问题讨论】:
标签: noise-generator
首先,您是否需要具有均匀分布的连续值?还是只需要将该区域划分为 N 个等可能的区间?
如果是后者,那就简单了。预先生成一个在许多随机坐标处评估的巨大噪声数组(例如大小为 0x10000000),对数组进行排序,然后将数组划分为您需要的任意多个间隔。如果您想利用噪声分布在零附近对称的事实,那么对于每个值,还要将其符号翻转值添加到数组中。每个间隔开始时的排序值是您在边界条件检查中使用的值。
如果您确实需要连续范围的值,那么您可以尝试拟合一个函数来统一噪声输出。我提出了一种修改噪声分布的方法here,并已试用here。这用于使 4D 噪声具有与 3D 噪声相似的分布,但它也应该能够均匀化。请注意,该公式涉及多项式对整数幂的积分,这取决于您的调整值,但您可以为少数这些情况手动编写评估函数(可能不需要超过 k=3),然后编写lerp 逻辑在这些之上。然后,您可以使用数学或手动+视觉指标来确定最佳调整值。
强制性噪声算法选择注意事项:使用质量好的噪声。也就是说,具有良好梯度向量表的单纯形噪声,或域旋转的 3D+ Perlin。 FastNoiseLite 支持两者(OpenSimplex2 或 Perlin + SetRotationType3D(ImproveXYPlanes) + GetNoise(x, y, 0))。当教程推荐 Perlin 噪声时,不要加任何警告。 Perlin 是一种较旧的噪声算法,如果没有域旋转技术,它会产生大量的方形,这对于大多数应用程序来说是完全不必要的妥协。
编辑:注意到图像中的域是 0 到 1。大多数噪声实现,以及我链接的库,使用范围 -1 到 1。不过,如果需要,您可以在统一化后重新缩放。
【讨论】: