Random 为什么柏林噪声算法对随机数使用查找表

Random 为什么柏林噪声算法对随机数使用查找表,random,noise,perlin-noise,Random,Noise,Perlin Noise,我一直在为我想要建立的一个库研究噪声算法,并从柏林噪声开始(更准确地说是单纯形噪声,我想处理任意维,或者至少6维)。阅读,有帮助,但在最后查看实现时,我看到了一个名为perm的大查找表 在代码示例中,它似乎用于将索引生成为一组渐变,但该方法似乎很奇怪。我假设这张表格只是为了提供1)决定论,2)提速 我的问题是,perm查找表是否有任何辅助意义或用途,或者是出于上述原因?或者,除了性能之外,没有使用伪随机数生成器有什么特殊原因吗?这是一个字节数组。范围是0到255。 如果你愿意,你可以随机化。你可

我一直在为我想要建立的一个库研究噪声算法,并从柏林噪声开始(更准确地说是单纯形噪声,我想处理任意维,或者至少6维)。阅读,有帮助,但在最后查看实现时,我看到了一个名为
perm
的大查找表

在代码示例中,它似乎用于将索引生成为一组渐变,但该方法似乎很奇怪。我假设这张表格只是为了提供1)决定论,2)提速


我的问题是,
perm
查找表是否有任何辅助意义或用途,或者是出于上述原因?或者,除了性能之外,没有使用伪随机数生成器有什么特殊原因吗?

这是一个字节数组。范围是0到255。 如果你愿意,你可以随机化。你可能会想要随机种子。。。等等。

perm表(和grad表)用于优化。它们只是预计算值的查找表。你在第1)点和第2)点上都是正确的


除了性能和可移植性之外,您没有理由不使用PRN。

明白了吗?我也想知道——用一个随机生成的列表(比如1到300或1到600)来替换perm是不可行的。@阿奎那不幸的是,不行。我仍然坚持我的“提速”理论。这是很久以前的事了,但是我认为数字必须在一定的范围内,然而……我认为你是对的,排列和梯度数组只是为了确保我们在每个点上得到随机的ish梯度,并且我们在以后访问同一点时总是得到相同的梯度。重要的是决定论,随机性,梯度有单位长度,平均分布在0,0附近;