首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perlin/Simplex噪声算法的随机性质量是什么?

Perlin/Simplex噪声算法的随机性质量是什么?
EN

Stack Overflow用户
提问于 2012-09-18 16:48:00
回答 4查看 3.8K关注 0票数 6

Perlin噪声算法和单纯形噪声算法的随机性是什么?

这两种算法中哪一种具有更好的随机性?

与标准伪随机生成器相比,使用Perlin/Simplex作为随机数生成器有意义吗?

更新:我知道Perlin/Simplex噪声是用来做什么的。我只对随机性属性感兴趣。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-03 09:49:32

正如“随机数统计”中所述,AI Game Wisdom 2,问哪个产生“更好的”随机性取决于你使用它做什么。通常,PRNG的质量是通过测试电池来比较的。在印刷时,作者指出,用于测试PRNG随机性的最著名和最广泛使用的测试电池是ENTDiehard。另请参阅how to test random numberswhy statistical randomness tests seem ad-hoc的相关问题。

除了测试典型PRNG的标准问题之外,测试Perlin噪声或单工噪声作为PRNG更加复杂,因为:

  1. 都需要PRNG,因此其输出的随机性受底层PRNG的影响。大多数PRNG缺乏可调参数。相反,Perlin噪声是一个或多个相干噪声函数(倍频程)的总和,具有不断增加的频率和不断减少的振幅。由于最终图像取决于所使用的八度的数量和性质,因此随机性的质量将相应地变化。与#2类似的libnoise: Modifying the Parameters of the Noise Module
  2. An论点适用于改变单纯形噪声中使用的维度数量,因为“4D单纯形噪声的3D部分不同于3D单纯形噪声。”斯特凡·古斯塔夫森的Simplex noise demystified.
票数 3
EN

Stack Overflow用户

发布于 2012-09-20 01:31:10

Perlin噪声和单纯形噪声旨在生成有用的噪声,而不是完全随机的。这些算法通常用于创建程序生成的景观等。例如,它可以生成这样的地形(来自here的图像):

在此图像中,噪波生成如下所示的2D高度贴图(来自here的图像):

每个像素的颜色代表一个高度。在生成高度图之后,渲染器用于创建与图像的“高度”(颜色)相匹配的地形。

因此,算法的结果实际上不是“随机的”;正如您所看到的,有许多容易识别的模式。

单纯形看起来有点“好”,这意味着更少的随机性,但它的主要目的是产生类似的噪音,但更好地缩放到更高的维度。也就是说,如果一个人会产生3D,4D,5D噪声,单纯形噪声将优于Perlin噪声,并产生类似的结果。

如果您想要一个通用的伪随机数生成器,请查看Mersenne twisterother prngs。请注意,wrt到密码学,prngs可能充满了警告。

更新:

(对OPs更新问题的回应)

至于这些噪声函数的随机属性,我知道perlin noise使用(非常)穷人的prng作为输入,并在相邻的“随机”像素之间进行一些平滑/插值。输入的随机性实际上只是伪随机索引到一个预先计算的随机向量中。

索引是使用一些简单的整数运算来计算的,并不太花哨。例如,noise++项目使用预先计算的"randomVectors“(参见here)来获取其源噪声,并在此向量的不同值之间进行插值。它通过一些简单的整数操作在这个向量中生成一个“随机”索引,并添加少量的伪随机性。下面是一个代码片段:

代码语言:javascript
复制
int vIndex = (NOISE_X_FACTOR * ix + NOISE_Y_FACTOR * iy + NOISE_Z_FACTOR * iz + NOISE_SEED_FACTOR * seed) & 0xffffffff;
vIndex ^= (vIndex >> NOISE_SHIFT);
vIndex &= 0xff;

const Real xGradient = randomVectors3D[(vIndex<<2)];

...

然后,稍微随机的噪声被平滑,实际上与相邻像素混合,产生图案。

在产生初始噪声之后,perlin/simplex噪声具有八度噪声的概念;即,在不同的尺度上将噪声重新混合到自身中。这就产生了更多的模式。因此,噪声的初始质量可能仅与预计算的随机数组加上伪随机索引的效果一样好。但在perlin噪声对其做了所有这些之后,明显的随机性显着降低(我认为它实际上扩散到了更广泛的区域)。

票数 5
EN

Stack Overflow用户

发布于 2012-09-20 01:37:16

我想你是糊涂了。

perlin和simplex从其他来源获取随机数,并使其随机性较低,以便它们看起来更像自然景观(仅随机数看起来不像自然景观)。

因此,它们不是随机数的来源-它们是处理来自其他地方的随机数的一种方式。

即使它们是一个来源,它们也不是一个好的来源(这些数字是强相关的)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12473434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档