【问题标题】:clever way to avoid repetition in Perlin noise避免柏林噪音重复的聪明方法
【发布时间】:2014-04-01 18:32:42
【问题描述】:

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

【问题讨论】:

    标签: gradient noise perlin-noise


    【解决方案1】:

    有点,是的。

    您希望避免的重复是由于仅使用低 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,但是此选项肯定会增加计算时间,因为您实际上将使用整数除法而不是位移。} 使用素数序列应该给出可能的最大重复长度。然而,根据您选择的持久性参数,这样的处理可能不值得额外的失败,甚至不值得关注。

    【讨论】:

      猜你喜欢
      • 2012-12-21
      • 2012-06-25
      • 1970-01-01
      • 2011-11-22
      • 2012-07-22
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      相关资源
      最近更新 更多