在1983年,Ken Perlin发明了一种特殊的噪音类型,称为Perlin噪音。这种噪音在电脑图形学上有着广泛的应用,特别是在生成自然场景和动画时,能有效地帮助创建真实的物理效果。 Perlin噪音不仅能用来生成地形、为变量提供伪随机改变,还能更新图像纹理。这篇文章将深入探讨Perlin噪音的背景、用途及其重要性。
Ken Perlin的创作灵感源自于他对当时电脑生成影像(CGI)中机械感的沮丧。 1985年,他在SIGGRAPH会议上正式发表了名为《An Image Synthesizer》的论文,详细介绍了Perlin噪音。他的开发灵感部分来自于1982年在迪士尼的计算机动画科幻电影《电子世界大战》(Tron)中的工作。随着其技术的发展,Perlin在1997年获得了奥斯卡奖,以表彰他对电脑生成表面上自然外观纹理技术的贡献。
「因为Perlin噪音的发展,电脑图形艺术家能够更加真实地呈现自然现象的复杂性。」
Perlin噪音作为程序性纹理原素,被视为一种逐渐增强了电脑图形学逼真度的渐变噪音。这一功能虽然具有伪随机的特性,但其所有可视细节的尺寸都是一致的。这种属性使其在操作上变得易于控制;艺术家可以将多个缩放的Perlin噪音拷贝插入到数学表达式中,创造出各式各样的程序化纹理。利用Perlin噪音生成的合成纹理常用于CGI,帮助计算机生成的视觉元素,例如物体表面、火焰、烟雾或云彩等看起来更自然。
Perlin噪音通常在二、三或四维上实现,但实际上可以定义于任意维度。实现通常涉及三个步骤:定义随机梯度向量的网格、计算梯度向量与其偏移的点积以及在这些值之间进行插值。
定义一个n维网格,每个网格交点都与一个随机的n维单位长度梯度向量相关联。这种随机化有助于形成自然的纹理效果。
要计算任何候选点的值,首先要找到该点所在的唯一网格单元,接着识别该单元的2^n个角落及其相关的梯度向量,然后计算每个角落的偏移向量,并对每个角落的梯度向量与偏移向量进行点积计算。每个网格角落的影响随距离增长而增大,这意味着对偏移向量进行归一化的操作可能会引入显著的尖锐变化,因此在插值步骤中考虑距离更加重要。
最后一步是对这些点积进行插值。这一过程是使用在2^n个网格节点处具有零一阶导数的函数来进行,因此在每个网格节点附近,输出将逼近节点的梯度向量和偏移向量的点积。
「Perlin噪音的特征在于它在每个节点都通过0,这赋予了它独特的外观。」
对于每个噪音函数的评估,必须在每个位于包含网格单元的节点上计算位置和梯度向量的点积。因此Perlin噪音的复杂度随着维度的增加而上下文为O(2^n)。虽然Perlin噪音仍在计算领域中占有一席之地,但如简单噪音和OpenSimplex噪音等新的替代品已经出现,这些替代品能提供相似的结果并改善计算效率。
Perlin噪音的发明不仅改变了视觉效果的创建方式,而且持续影响着我们对电脑生成图像的理解。在未来,技术将会如何进一步提升我们在数字世界中重现自然现象的能力呢?