首先,重要的是要注意您正在查看的不是 Perlin Noise。您正在查看 Hugo Elias 对所谓的价值噪音的解释,该链接可能导致 90% 以上的混淆。值噪声肯定会产生一些类似的效果,但速度要慢得多(特别是如果您使用三次插值器,这是您想要的大多数效果)。此外,您正在查看的函数只是随机基数,而不是实际的插值噪声函数。
其次,老实说,我会跳过 Perlin Noise 并看一下名为 OpenSimplex Noise 的东西。Perlin Noise 是一种较旧的算法,通过将其所有特征沿基轴和 45 度对角线排列,往往会表现出明显的网格伪影。OpenSimplex 噪声对于基本上所有与 Perlin 噪声相同的事情都很有用:噪声采用输入点(2D、3D 或 4D)并返回一个介于 -1 和 1 之间的值,并且输出值随输入坐标平滑变化变化。
OpenSimplex Noise 实际上是我自己开发的一种算法,作为游戏开发项目的一部分,可作为 Simplex Noise 算法的替代方案,该算法为 3D+ 实现申请了专利。
“官方”回购:https ://gist.github.com/KdotJPG/b1270127455a94ac5d19 (Java)
其他人的 Javascript 端口:https ://gist.github.com/KdotJPG/b1270127455a94ac5d19 (注意:目前只有 2D 实现,但您可能不需要更多)
3D Perlin vs 3D OpenSimplex,在 2D 切片中:(
左边是原始噪声(x,y,0),接下来是负片/正片的黑白,接下来是接近零的黑色,接下来是噪声(x,y,0.5))
2D OpenSimplex:(
为了比较,请注意 2D Perlin Noise 在 z=0 时看起来几乎与 3D 相同)