Algorithm 什么';Perlin/单纯形噪声算法的随机性是什么?

Algorithm 什么';Perlin/单纯形噪声算法的随机性是什么?,algorithm,random,noise,perlin-noise,prng,Algorithm,Random,Noise,Perlin Noise,Prng,柏林噪声算法和单纯形噪声算法的随机性是什么 这两种算法中哪一种具有更好的随机性 与标准伪随机生成器相比,使用Perlin/单纯形作为随机数生成器有意义吗 更新: 我知道柏林/单工噪声的用途。我只是好奇随机性的特性。柏林噪声和单纯形噪声是为了产生有用的噪声,而不是完全随机的。这些算法通常用于创建程序生成的景观等。例如,它可以生成如下地形(图像来源): 在此图像中,噪波会生成一个二维高度贴图,如下图所示(图像来源): 每个像素的颜色代表一个高度。生成高度贴图后,使用渲染器创建与图像“高度”(颜色

柏林噪声算法和单纯形噪声算法的随机性是什么

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

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

更新:
我知道柏林/单工噪声的用途。我只是好奇随机性的特性。

柏林噪声和单纯形噪声是为了产生有用的噪声,而不是完全随机的。这些算法通常用于创建程序生成的景观等。例如,它可以生成如下地形(图像来源):

在此图像中,噪波会生成一个二维高度贴图,如下图所示(图像来源):

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

因此,该算法的结果实际上不是“随机的”;正如你所看到的,有很多容易辨别的模式

单纯形被认为看起来有点“好”,这意味着更少的随机性,但它的主要目的是产生类似的噪声,但更好地扩展到更高的维度。也就是说,如果产生3D、4D、5D噪声,单纯形噪声将优于柏林噪声,并产生类似的结果

如果您想要一个通用的psuedo随机数生成器,请查看或。请注意,对于加密,PRNG可能充满了警告

更新:

(回应老年退休金计划最新问题)

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

索引是使用一些简单的整数运算计算的,没有什么特别的。例如,“噪波+”项目使用预计算的“随机向量”(请参见)来获取其源噪波,并在此向量的不同值之间进行插值。它通过一些简单的整数运算将“随机”索引生成到该向量中,并添加少量伪随机性。以下是一个片段:

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)];

...
int-vIndex=(噪声X_因子*ix+噪声Y_因子*iy+噪声Z_因子*iz+噪声种子因子*SEED)&0xffffffff;
vIndex^=(vIndex>>噪声移位);
vIndex&=0xff;

const Real xGradient=randovectors3d[(vIndex我想你是糊涂了

perlin和simplex从其他来源获取随机数,并使它们变得不那么随机,这样它们看起来更像自然景观(仅随机数看起来不像自然景观)

所以它们不是随机数的来源——它们是处理其他地方随机数的一种方式

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

如《随机数统计》中所述,询问哪个能产生“更好的”随机性取决于您使用它的目的。一般来说,PRNG的质量通过测试电池进行比较。在印刷时,作者指出,测试PRNG随机性的最著名和最广泛使用的测试电池是&。另外,请参阅和的相关问题

除了测试典型PRNG的标准问题外,作为PRNG测试柏林噪声或单一噪声更为复杂,因为:

  • 两者在内部都需要PRNG,因此其输出的随机性受基础PRNG的影响
  • 大多数PRNG缺少可调参数。相比之下,柏林噪声是一个或多个频率不断增加、振幅不断降低的相干噪声函数(倍频程)的总和。由于最终图像取决于所用倍频程的数量和性质,因此随机性的质量将相应变化
  • 类似于#2的论点适用于改变单纯形噪声中使用的维数,因为“4D单纯形噪声的3D部分不同于3D单纯形噪声。”Stefan Gustavson的

  • 不要将柏林或单纯形用于随机性。它们不是用于随机性的。它们是随机性的一种应用

    人们选择它们是因为它们的视觉吸引力,这一点还没有得到充分的讨论,所以我将重点关注这一点

    带smoothstep的perlin/simplex非常平滑。无论缩放多远,它们始终是渐变,而不是顶点或边

    输出范围为(+/-1/2 x#dimensions),因此需要对此进行补偿,以使其在需要时达到0到1或-1到1的范围。修复此问题是标准的。添加倍频程将通过倍频程的比例因子增加此范围(当然通常是更大倍频程的一半)

    perlin/simplex噪波有一种奇怪的特性,放大时是棕色噪波,缩小时是蓝色噪波。无论是一个或中间的缩放都不适合prng,但它们非常适合伪装自然现象(这不是真正随机的,并且/特别有偏见)

    perlin和simplex噪波在轴上都有一定的偏差,perlin在这方面还有一些问题。编辑:在三维中避免更多的偏差是非常复杂的。很难(不可能?)在球体上生成大量无偏差点

    perlin结果趋向于具有八角偏压的圆形,而simplex趋向于生成具有六角形偏压的椭圆形

    高维单纯形的切片看起来不像低维单纯形,但3d柏林的2d切片看起来很像2d柏林

    大多数人认为simplex实际上无法处理更高的维度——它往往在更高的维度上“看起来越来越糟”。据说perlin没有这个问题(尽管它仍然有偏见)

    我相信一旦“倍频程”,当l