Monthly Archives: July 2015

Perlin噪声

本篇文章谢绝转载,也禁止用于任何商业目的 1. Perlin噪声 Ken Perlin在1983年提出了一种渐变噪声,Perlin在1985年的SIGGRAPH有该算法的描述,称之为经典Perlin噪声(Classical Perlin Noise)。为了简化计算,方便使用硬件实现,并解决经典Perlin噪声中存在的错误,到2001年,Ken Perlin再次对原始的噪声算法进行了改进,称之为Simplex噪声(Simplex Noise),这两种算法都可以称为Perlin噪声。但是,我们有时候也把分形噪声也称为Perlin噪声,甚至在严肃的学术论文中都有这种称法。为了避免歧义,本文指的Perlin噪声特指经典Perlin噪声和Simplex噪声。 Stefan Gustavson指出:Simplex噪声有更小的算法复杂度,要求更少的乘法,在\(N\)维空间上,经典Perlin噪声的算法复杂度为\(\log \left( {{2}^{N}} \right)\),但是Simplex噪声的算法复杂度为\(\log \left( {{N}^{2}} \right)\)等优点。虽然Stefan Gustavson提供了对Simplex算法的注解,但是我依然不能理解Simplex噪声背后的数学原理,对Simplex噪声不作进一步阐述。 2. 经典Perlin噪声 经典Perlin噪声是Ken Perlin在1983年提出的噪声,Ken Perlin提供了一维、二维、三维算法的C实现,我们无法仅从他提供的代码理解其数学原理,Matt Zucker从数学原理的角度,对经典Perlin噪声进行了解读。本节将详细介绍二维、三维的Pernlin噪声的数学原理,算法的C语言实现源码如下所示: /* coherent noise function over 1, 2 or 3 dimensions */ /* (copyright Ken Perlin) */ #include

spacer