在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噪音的發明不僅改變了視覺效果的創建方式,而且持續影響著我們對電腦生成圖像的理解。在未來,技術將會如何進一步提升我們在數字世界中重現自然現象的能力呢?