Perlin noise
一、 背景介绍
分形:
分形,具有以非整数维形式充填空间的形态特征。通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。分形(Fractal)一词,是芒德勃罗创造出来的,其原意具有不规则、支离破碎等意义。1973年,芒德勃罗(B.B.Mandelbrot)在法兰西学院讲课时,首次提出了分维和分形的设想。(百度百科)
分形在自然界中随处可见:
生成方式:
Perlin noise 就是一种非常有用强大的算法,常用于生成看似杂乱而又有序的内容。尤其特别适合用于游戏和其他视觉媒体,如电影。它的创始人Perlin也因为最先运用此技术而获得奥斯卡奖。
噪音维数 | 原始噪音 (Grayscale) | 实例 |
---|---|---|
1维 | Using noise as an offset to create handwritten lines. |
|
2维 | By applying a simple gradient, a procedural fire texture can be created. |
|
3维 | Perhaps the quintessential use of Perlin noise today, terrain can be created with caves and caverns using a modified Perlin Noise implementation. |
二、原理
对一维,如上图,先分配随机的散点,再对这些点进行插值获得连续的曲线。此处需要注意的是需要控制波长,否则可能导致Aliasing(不知道中文应该如何翻译这个词,因为其并不代表锯齿)。
此处细节Prof. James给我的邮件答复内容:
Because the wavelength is about the size ofthe lattice. Therefore the frequency is also narrowly limited. You are going to add a number of thesesignals to get the 1/f noise. You need to know the frequency you are about toadd in order to be able to sample at the Nyquist limit.
对二维
- 定义一个晶格结构,每个晶格的顶点有一个“伪随机”的梯度向量。对于二维的Perlin噪声来说,晶格结构就是一个平面网格,三维的就是一个立方体网格。
- 输入一个点(二维的话就是二维坐标,三维就是三维坐标,n维的就是n个坐标),我们找到和它相邻的那些晶格顶点(二维下有4个,三维下有8个,n维下有