gpt4 book ai didi

javascript - 流行的 Perlin Noise 伪随机函数不起作用

转载 作者:行者123 更新时间:2023-12-02 16:52:42 27 4
gpt4 key购买 nike

许多 Perlin Noise 教程和实现( hereherehere 等)使用函数来生成如下伪随机值:

function Noise(integer x, integer y)
n = x + y * 57
n = (n<<13) ^ n;
return ( 1.0 - ( (n * (n * n * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);
end function

这个函数给出了奇怪的输出:http://jsfiddle.net/byoybjkw/
函数不起作用,因为它经常返回恒定(非伪随机)值。

  1. 为什么这个功能如此受欢迎并且大家都推荐它?
  2. 还有哪些其他可能的实现方式? jsfiddle 演示将不胜感激。

最佳答案

首先,请务必注意,您看到的不是柏林噪声。您正在查看 Hugo Elias 对值(value)噪声的解释,该链接可能造成了该问题 90% 以上的困惑。值噪声肯定可以产生一些类似的效果,但速度要慢得多(特别是如果您使用三次插值器,这正是您想要的大多数效果)。此外,您正在查看的函数只是随机基数,而不是实际的插值噪声函数。

其次,说实话,我会跳过 Perlin Noise,而看一下名为 OpenSimplex Noise 的东西。 Perlin Noise 是一种较旧的算法,通过沿基轴和 45 度对 Angular 线排列其所有特征,往往会表现出明显的网格伪影。 OpenSimplex 噪声基本上可用于与 Perlin 噪声相同的所有用途:噪声采用输入点(2D、3D 或 4D)并返回 -1 到 1 之间的值,并且输出值随输入坐标平滑变化变化。

OpenSimplex Noise 实际上是我自己开发的一种算法,作为游戏开发项目的一部分,作为用于 3D+ 实现的受专利保护的 Simplex Noise 算法的替代方案。

“官方”存储库:https://gist.github.com/KdotJPG/b1270127455a94ac5d19 (Java)

别人的Javascript移植:https://gist.github.com/KdotJPG/b1270127455a94ac5d19 (注意:到目前为止只有 2D 实现,但您可能不需要更多)

3D Perlin 与 3D OpenSimplex,在 2D 切片中: enter image description here (左边是原始噪声(x,y,0),下一个是负数/正数的黑白,下一个是接近零的黑色,下一个是噪声(x,y,0.5))

2D OpenSimplex: enter image description here(为了进行比较,请注意,2D Perlin 噪声在 z=0 时看起来与 3D 几乎相同)

关于javascript - 流行的 Perlin Noise 伪随机函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26445577/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com