聪明的方法,以避免重复Perlin噪音

时间:2014-02-28 16:27:25

标签: gradient noise perlin-noise

嘿有一种(简单的)方法可以避免Perlin Noise会在一段时间后重复出现吗?我想将它用于无尽的地形,并且不希望一遍又一遍地拥有相同的地形,所以我需要一个解决方案。我还将它与分形布朗运动结合起来并用hls将其写在gpu上以节省一些计算时间。

1 个答案:

答案 0 :(得分:1)

排序,是的。

您希望避免的重复是由于仅使用低16位(通常最低的8位)来确定与每个顶点关联的伪随机梯度向量。为了获得你想要的任意大的重复比例,我建议使用顶点的包装散列。

即:让Xn = x& 255,Yn = y& 255等,然后代替使用perm [Xn + perm [Yn]],用新的Xi =(x& 255)^((x / 256)& 255)^((x>> 16)替换它们)& 255)^((x>>> 24)& 255)^ ... {使用按位(X)OR而不是添加以确保在随机化向量分配的查找表中不发生溢出。}

然后使用perm [Xi] ^ perm [Yi](或perm [Xi + perm [Yi]],无论如何)进行渐变选择过程。

这样,你的点的高倍数(大规模)指数继续影响噪声向量的分配。

由于你也使用fBm,你的地形只会在所有八度音阶同步后才真正重复,所以如果你使用一个不和谐的和弦,它将需要更长的时间。 {这不是通常使用的简单2 ** n,但是这个选项肯定会增加计算时间,因为你实际上使用整数除法而不是位移。}使用素数序列应该给出最极端的重复长度。然而,根据您选择的持久性参数,这样的处理可能不值得额外的翻转,甚至是显而易见的。