【发布时间】:2014-04-01 18:32:42
【问题描述】:
嘿,有没有一种(简单的)方法可以避免 Perlin Noise 在一段时间后重复出现?我想将它用于无尽的地形,并且不想一遍又一遍地拥有相同的地形,所以我需要一个解决方案。我还将它与分形布朗运动结合起来,并用 hls 将其写入 gpu 以节省一些计算时间。
【问题讨论】:
标签: gradient noise perlin-noise
嘿,有没有一种(简单的)方法可以避免 Perlin Noise 在一段时间后重复出现?我想将它用于无尽的地形,并且不想一遍又一遍地拥有相同的地形,所以我需要一个解决方案。我还将它与分形布朗运动结合起来,并用 hls 将其写入 gpu 以节省一些计算时间。
【问题讨论】:
标签: gradient noise perlin-noise
有点,是的。
您希望避免的重复是由于仅使用低 16 位(通常是最低 8 位)来确定与每个顶点关联的伪随机梯度向量。为了获得你想要的任意大的重复比例,我建议对顶点使用包装哈希。
即:让 Xn = x & 255, Yn = y & 255 等,然后用新的 Xi = (x&255) ^ ((x / 256) 代替 perm[Xn + perm[Yn]] ) & 255) ^ ((x >> 16) & 255) ^ ((x >> 24) & 255) ^ ... {使用按位 (X)OR 代替加法,以确保在随机化向量分配的查找表中不会发生溢出。}
然后使用 perm[Xi] ^ perm[Yi] (或 perm[Xi + perm[Yi]] 等)进行梯度选择过程。
这样,您的点的更高倍数(大规模)索引会继续影响噪声向量的分配。
由于您也使用 fBm,因此您的地形只有在所有八度音阶同步后才会真正重复,因此如果您使用不和谐的和弦,则需要更长的时间。 {这不是通常使用的简单 2**n,但是此选项肯定会增加计算时间,因为您实际上将使用整数除法而不是位移。} 使用素数序列应该给出可能的最大重复长度。然而,根据您选择的持久性参数,这样的处理可能不值得额外的失败,甚至不值得关注。
【讨论】: