Algorithm 什么';3D的速度快吗?柏林还是单一噪音?

Algorithm 什么';3D的速度快吗?柏林还是单一噪音?,algorithm,3d,perlin-noise,procedural-generation,simplex-noise,Algorithm,3d,Perlin Noise,Procedural Generation,Simplex Noise,好的,网上有很多关于柏林噪声和单纯形噪声的比较。但我真的找不到一个能对三个维度的处理时间进行简单比较的地方,这正是我最感兴趣的地方。我已经读过(甚至理解了大部分内容——耶!),但我无法回答一个简单的问题:哪一个对于3D来说更快,假设一个最佳的实现 这表明Simplex在我的案例中是一个非常明显的赢家。当然,也有其他资源主张完全相反的观点 然而,一般的说法似乎是柏林噪声的复杂度为O(2^N),而单纯形的复杂度为O(N^2)。对于3D,Perlin为8,Simplex为9但是,在一些网站上,我发现了

好的,网上有很多关于柏林噪声和单纯形噪声的比较。但我真的找不到一个能对三个维度的处理时间进行简单比较的地方,这正是我最感兴趣的地方。我已经读过(甚至理解了大部分内容——耶!),但我无法回答一个简单的问题:哪一个对于3D来说更快,假设一个最佳的实现

这表明Simplex在我的案例中是一个非常明显的赢家。当然,也有其他资源主张完全相反的观点

然而,一般的说法似乎是柏林噪声的复杂度为O(2^N),而单纯形的复杂度为O(N^2)。对于3D,Perlin为8,Simplex为9但是,在一些网站上,我发现了单纯形实际上是O(N)的说法。那么这里什么是,这对3D中的速度意味着什么

我在这里不知所措,我真的主要感兴趣的是3D应用程序(用于随机地形生成,包括洞穴)的使用,我找不到一个好的答案来回答这个问题,如果我希望它尽可能快,我应该使用哪一个

所以也许有人能帮我:)

1)
(二)

使用以下两种实现在“我的笔记本电脑”中执行800万个噪音样本的时间: (g++-O6)

1) 1.389秒,即每秒运行570万次 2) 0.607s,即每秒运行13.2M次

但是

当真的,真的要进行优化时,我们应该学习

  • 更高级别的优化(每个阶段到底做了什么:有替代方案吗?)
  • 分支机构
  • 记忆模式
  • 依赖关系
  • LUT大小
  • 所需的单个算术运算及其延迟和吞吐量
  • 使用SIMD的可利用并行性
  • 活动变量数

单工噪声看起来更好,但不一定更快。这完全取决于实施情况。根据经验,这是“大致相同的速度”,如果您的代码是好的,那么使用任何一种变体都不会带来很大的损失

请注意,我写的大多数在互联网上浮动的代码都不是为了速度而优化的,而是为了清晰而编写的。伊恩·麦克尤恩(Ian McEwan)和我自己几年前的GLSL实现在速度方面进行了合理的优化,但它们是针对现在已经过时的硬件和当时流行的GLSL版本进行优化的。从那时起,GLSL的重要变化包括整数类型和位逻辑运算,这使得一些哈希函数变得笨拙和不必要的复杂,。由于GLSL中缺少位逻辑运算符,因此需要一个置换多项式。它仍然缺少用于WebGL的GLSL,但所有其他平台现在都支持integer

4D中的单纯形噪声比4D中的经典噪声快得多。所有其他情况取决于语言、平台和代码优化量


单纯形噪声有一个简单的解析导数。在这方面,经典噪音更为棘手。在许多情况下,比如抗锯齿和地形贴图,解析导数非常有用。

Wiki说单纯形是n^2,所以你提到的答案可能是输入错误?完全可能,是的。不过,我更感兴趣的是这对速度意味着什么。如果你把这8和9作为唯一的衡量标准,就不会有那么多人认为单纯形算法更快了。N表示算法的可扩展性有多好,但它并没有说明算法的速度。@Kromster什么,谁比你高?正如作者在这里看到的,N确实是一个错误。很多人抄袭了他的代码和示例,最后都犯了同样的错误,他在2012年晚些时候修复了这些错误。回答不错,谢谢!这真的比我想象的快多了。因此,即使你的笔记本电脑并不能代表所有的机器,这看起来也很有说服力。当然,除了算法本身之外,还有更多的事情要考虑。它值得注意的是,单纯形噪声是由同一个人设计的,后者开发了柏林噪声并创造了具有相同特性但更有效和无伪影的噪声。所以,如果单纯形噪声较慢,那会非常令人震惊,你确定你不是说柏林噪声有一个简单的导数吗?单纯形噪声定义了解析导数,但它们更难理解和推导,尽管计算成本不高。还是将经典噪音等同于价值噪音?