Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 为什么所有单纯形噪声算法都有排列&;梯度表?_Algorithm_Noise_Procedural Generation_Simplex - Fatal编程技术网

Algorithm 为什么所有单纯形噪声算法都有排列&;梯度表?

Algorithm 为什么所有单纯形噪声算法都有排列&;梯度表?,algorithm,noise,procedural-generation,simplex,Algorithm,Noise,Procedural Generation,Simplex,我已经尝试实现Simplex Noise大约一个月了,我确实理解使用Simples来减少所需的计算量以及梯度侧的安全功率的想法。然而,在任何语言中实现这一点似乎都是不可能的 在我找到的每一个代码中,在我阅读的资源中,在任何地方,代码似乎都有一个G和一个p表。通过谷歌搜索和四处询问,我了解到它们是一个排列和渐变表。他们是干什么的?我们为什么需要它们 我目前的想法是排列表只包含随机值,因此它们不必在运行时计算 示例: 基本上是的,p表用于从G表中选择随机梯度。然而,重要的是它需要是可重复的

我已经尝试实现Simplex Noise大约一个月了,我确实理解使用Simples来减少所需的计算量以及梯度侧的安全功率的想法。然而,在任何语言中实现这一点似乎都是不可能的

在我找到的每一个代码中,在我阅读的资源中,在任何地方,代码似乎都有一个G和一个p表。通过谷歌搜索和四处询问,我了解到它们是一个排列和渐变表。他们是干什么的?我们为什么需要它们

我目前的想法是排列表只包含随机值,因此它们不必在运行时计算

示例:


基本上是的,p表用于从G表中选择随机梯度。然而,重要的是它需要是可重复的。也就是说,在3D情况下,对于给定的
(i,j,k)
三元组,您需要始终能够产生相同的“随机”梯度。这就是使噪波函数连贯的原因。所以这个公式在P表中进行一些查找的要点是,结果看起来是随机的,但对于给定的输入是确定的


如果您不关心性能,您也可以轻松地使用
(i,j,k)
来为伪随机数生成器种子,然后使用它从G表中选择一个梯度。

此时,单纯形、柏林噪声和这两者的混合之间的混淆在互联网上非常普遍。我所知道的最著名和被引用的论文是。古斯塔夫森先生在信中说:

为了清晰起见,我将使用混合方法, 使用经典噪声中的梯度散列法,但使用单纯形网格和直接求和 单纯形噪声的噪声贡献分析

因此,结果不是单纯噪声或柏林噪声,而是一种混合或混合噪声算法,具有两者的某些特征。”

柏林噪声是经典噪声,它使用预定义的(以某种方式生成的)梯度向量和排列表(保留梯度表的索引)。为了从坐标(x,y,z)中得到一个梯度,你应用一些散列函数,经典的柏林噪声简单地使用模,然后你从排列表中获取一个索引,这反过来给你另一个索引,你用它从表中获取一个梯度。使用模运算作为散列函数,可以立即获得柏林噪声的可重复性

排列表看起来像这样;[0,1,2,…,sizeof(梯度表)-1]

单纯形噪声(至少用于3D及以上的纹理生成)及其算法在这里进行了描述。Simplex noise使用了两项独特的发明,以将其与柏林噪声区分开来

1) 没有梯度表也没有排列表。相反,梯度是通过位操作算法动态生成的

2) 它不是由正方形(二维)组成的坐标网格,而是由平铺平面的正方形组成。在2D中这是三角形,在3D中是四面体。此坐标栅格减少了栅格的可见瑕疵

单纯形噪声还有一些次要但仍然非常重要的特性,使其成为一种更优雅的算法。例如,没有内积,因为顶点的所有贡献都是使用球形核生成的。甚至简化坐标网格和笛卡尔坐标网格(或法线坐标网格)之间的转换也被优化为一次乘法,这使得转换成本非常低廉


作为一种无耻的自我推销,我将提供一个链接,链接到我的of noise函数,在该函数中,我将尽可能正确地实现所有功能。我们的目标是提供一些标准的跨平台实现,包括一系列噪波函数。

那么排列值在理论上是什么定义了渐变表的索引?