好吧,网上有很多 Perlin 噪声和 Simplex 噪声之间的比较。但我真的找不到一个对三个维度进行简单处理时间比较的地方,这是我最感兴趣的。我读过那个流行的PDF http://webstaff.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf(甚至理解了其中的大部分 - 耶!)但我无法回答这个简单的问题:假设最佳实现,哪一个对于 3D 来说更快?
This 堆栈溢出问题解答 https://stackoverflow.com/questions/6963388/fastest-perlin-like-3d-noise-algorithm这表明 Simplex 是我的案例中明显的赢家。当然,还有其他资源声称完全相反。
然而,一般的说法似乎是 Perlin 噪声的复杂度为 O(2^N),而 Simplex 的复杂度为 O(N^2)。对于 3D,这意味着 Perlin 为 8,Simplex 为 9。But,在某个网站上我发现了这样的说法:Simplex 实际上是 O(N)。所以呢is确实如此,这对于 3D 速度到底意味着什么?
我在这里不知所措,我真的主要对 3D 应用程序(用于随机地形生成,包括洞穴)的使用感兴趣,并且我无法找到一个很好的答案来回答这个问题,如果我希望它尽可能快,我应该使用哪一个可能的。
所以也许有人可以在这里帮助我:)
1) http://www.fundza.com/c4serious/noise/perlin/perlin.html http://www.fundza.com/c4serious/noise/perlin/perlin.html
2) http://www.6by9.net/b/2012/02/03/simplex-noise-for-c-and-python http://www.6by9.net/b/2012/02/03/simplex-noise-for-c-and-python
使用这两种实现方式在“我的笔记本电脑”中执行 8M 噪声样本的执行时间:
(g++-O6)
1) 1.389s,即每秒 570 万次操作
2) 0.607s,即每秒 1320 万次操作
But...
当真正真正进行优化时,应该学习
- 更高级别的优化(每个阶段真正做了什么:有替代方案吗?)
- Branches
- 记忆模式
- 依赖关系
- LUT 大小
- 所需的单独算术运算、它们的延迟和吞吐量
- 使用 SIMD 的可利用并行性
- 实时变量的数量
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)