为什么Perlin噪声算法使用查找表来生成随机数?

5
我一直在研究噪声算法,以便构建一个库,现在开始使用Perlin noise(更准确地说是Simplex noise),我想要处理任意维度,或者至少到6维。阅读Simplex noise demystified有所帮助,但是在查看实现代码时,我看到了一个名为perm的大型查找表。

在代码示例中,它似乎用于生成一组梯度的索引,但该方法似乎很奇怪。我认为该表只是为了提供1)确定性和2)加速。

我的问题是,perm查找表是否具有任何辅助含义或目的,还是只是出于上述原因而存在?换句话说,是否使用伪随机数生成器的特定原因是除了性能之外?


能解决这个问题吗,大佬?我也想知道——用介于1到300或1到600之间的随机生成列表替换perm是不起作用的。 - Aquinas
很抱歉,@Aquinas,不行。我仍然坚持我的“加速”理论。虽然这是一段时间之前的事情,但我认为数字必须在某个特定范围内。 - Aatch
我认为你是对的,排列和梯度数组只是为了确保我们在每个点上获得随机的梯度,并且当我们以后访问相同的点时始终获得相同的梯度。重要的是确定性、随机性以及梯度具有单位长度并均匀分布在0,0周围。 - James Clark
我在这里描述了这个问题:http://stackoverflow.com/a/43627723/1548601 - Entalpi
2个回答

2

这是一个字节数组。范围是0到255。如果需要,您可以对其进行随机化。您可能希望对随机数进行种子处理...等等。


0

Perm表(和grad表)用于优化。它们只是预先计算值的查找表。您在1)和2)两个方面都是正确的。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接