喻揚濤,段 鵬
(1.云南民族大學 人民武裝學院,云南 昆明 650118;2.云南民族大學 數(shù)學與計算機科學學院,云南 昆明 650500)
蠟染是國家級非物質(zhì)文化遺產(chǎn),主要分布于我國西南少數(shù)民族地區(qū).由于工藝的原因,手工蠟染作品會形成無法重現(xiàn)的“冰紋”,成為蠟染的靈魂.由于染制環(huán)境的復雜性,蠟染冰紋及其色彩隨機性較強,各次染制中,雖然風格基本相同,但從細節(jié)上來看,卻存在一定差異, “一圖多樣,各圖不同”成為蠟染作品生命力的重要體現(xiàn).隨著社會的發(fā)展,傳統(tǒng)蠟染快速消亡.作為蠟染技藝保護的重要手段,蠟染數(shù)字化研究引起了研究者們的積極關(guān)注,也取得了一些有效的成果.圖案、冰紋的計算機生成,染色的數(shù)字化模擬是蠟染數(shù)字化的主要工作.本文以云南蠟染畫為研究對象,主要討論Perlin噪聲在冰紋生成和染色模擬中的應用.
Wyvill等[1]較早開始對印尼蠟染冰紋生成進行初步研究,提出了基于距離變換的冰紋生成和染色方法.Tang等[2]提出了基于Voronoi圖的蠟染冰紋生成方法,并使用雙曲模型模擬了冰紋的交點加粗效果.Liu等[3]基于斷裂力學,提出使用改進的有限元分析方法生成冰紋,在時間復雜度上有較大提升.Lv等[4]在生成分叉狀裂紋時使用了基于分形的方法.Huang等[5]將可變卷積和混合擴散卷積應用到冰紋生成中.Tian等[6]提出一種基于分形幾何的圖案生成方法,用于自動生成花朵.Yuan等[7]也提出基于分形幾何的蝴蝶圖案生成方法.Morimoto等[8]基于幾何折疊和擴散,以日本扎染織紋為研究對象,建立幾何折疊模型和擴散滲透模型.劉世光等[9]模擬了布料上污漬的擴散.我們以云南蠟染畫為研究對象,在冰紋生成和染色方面也做了一些工作[10-14]
Ken Perlin[15-16]于1983年提出Perlin噪聲,后面又做了大量改進.由于Perlin噪聲符合自然特性,常用于生成各種自然特效,在影視、游戲、藝術(shù)繪制領(lǐng)域都有廣泛的應用.不同應用中噪聲生成方法,表面、煙霧、火焰、云層、水面、地形和石材紋理等場景的模擬,都取得了一系列的成果.Hart等[17]開發(fā)了一個通用的多通道像素著色器產(chǎn)生的柏林噪聲函數(shù).Bridson等[18]基于Perlin噪聲生成湍流速度場,模擬湍流和圍繞任意剛性物體的流動.Acosta等[19]使用Perlin 噪聲來模擬氧化物紋理.Qi等[20]使用Perlin噪聲在3D虛擬環(huán)境中渲染云,可以根據(jù)用戶的視點來更改云的位置和方向.Li等[21]將Perlin噪聲應用于水面可視化.芮小平[22]提出Perlin 噪聲的三維地形可視化方法.金磊[23]基于Perlin噪聲生成大理石紋理.Inoue等[24]研究了Perlin噪聲生成具有光學反射特性的紙張表面形貌.Abdolhoseini[25]等使用高斯混合模型和Perlin噪聲函數(shù)模擬了神經(jīng)元核微環(huán)境.特有少數(shù)民族風情風格方面,Perlin噪聲鮮有應用.
Perlin噪聲兼具連續(xù)性和隨機性,不同的應用場景,通常使用不同的算法生成.一維Perlin噪聲常用于卷軸地形、模擬手繪線條等;二維、三維Perlin噪聲常用于二維、三維自然現(xiàn)象的模擬;四維Perlin噪聲常用于動畫制作.頻率、持續(xù)度是Perlin噪聲的基本參數(shù).在實際應用中,通常把振幅的值歸一化到[-1,1]或[0,1],頻率有時用波長表示.Perlin噪聲由分別擁有不同頻率和振幅的平滑函數(shù)疊加而成.其生成過程主要有隨機數(shù)生成、插值、平滑、疊加.
圖1示意了生成隨機數(shù),以及之后的插值過程.首先,在關(guān)鍵點上生成[0,1]間的隨機數(shù),如圖1(a);插值在隨機數(shù)間進行,結(jié)果為連續(xù)噪聲函數(shù),如圖1(b).立方插值、余弦插值、線性插值是常用的方法.立方插值效果好,但計算麻煩,較為耗時;線性插值簡單快速,但效果稍差.具體使用的插值方法,通常根據(jù)實際應用的要求選擇.余弦插值兼具結(jié)果的平滑性和較低的復雜度,使用較多.插值后的噪聲為連續(xù)噪聲,但其平滑度較差,通常需要平滑,方法與具體應用相關(guān).各個不同頻率、不同振幅的平滑函數(shù)最終進行疊加,Perlin噪聲最終可得,如圖2.
圖1 隨機數(shù)插值
圖2 二維Perlin噪聲生成過程
實際應用中,頻率通常按二倍減少,振幅按比減少,稱持續(xù)度(Persistence).Persistence大,主要體現(xiàn)高頻噪聲特征;Persistence小,主要體現(xiàn)低頻噪聲特征.
使用Persistence參數(shù),對第i個平滑函數(shù),有:
frequencyi=2i,amplitudei=Persistencei.
(1)
蠟染數(shù)字化關(guān)鍵技術(shù)里,Perlin噪聲的主要應用是染色模擬和冰紋生成.一維Perlin噪聲應用于冰紋生成,在冰紋的寬度和濃度上添加.二維Perlin噪聲應用于染色中暈染和斑駁現(xiàn)象的形成.本文設計了一維和二維Perlin噪聲的生成算法(PND算法).為方便計算,使用波長代替頻率.
Perlin噪聲生成(Perlin noise generating,PND)算法
step 1 設置波長及振幅.
step 2 根據(jù)波長,在關(guān)鍵點生成隨機數(shù),在關(guān)鍵點間,對各點插值.
step 3 對插值結(jié)果平滑,獲得平滑函數(shù),將平滑函數(shù)振幅進行變換,疊加.
step 4 若達到噪聲要求則停止,否則修改波長及振幅,重復Step 2.
波長初始值常為2n,波長n倍處為關(guān)鍵點,這些點處生成隨機數(shù).關(guān)鍵點外,逐一進行插值.一維插值基礎上,可進行二維插值.插值后的關(guān)鍵技術(shù)為平滑,一維和二維函數(shù)分別使用用均值平滑和高斯平滑.波長按減半迭代,若波長低于閾值,或迭代次數(shù)滿足條件,停止疊加.振幅按持續(xù)度以乘積形式遞減.
設PL(x)為x點處一維噪聲值,TL(x)為x點處每次疊加的平滑噪聲函數(shù)值,TL長度為CrackLength,波長為WeaveLength,通常,CrackLength為WeaveLength的整數(shù)倍.隨機數(shù)在波長n倍處生成.Tl(0),Tl(WeaveLength),Tl(2×WeaveLength),…Tl(n×WeaveLength),Tl(CrackLength)處生成0到1的隨機數(shù).
a,b和x為插值函數(shù)的3個參數(shù),兩端點為a和b,插值點為x.對位于Tstart至Tend間的插值點i,各插值參數(shù)取值如下:
(2)
均值平滑使用在一維噪聲函數(shù)中.設Noise(x)為當前點噪聲,Noise(x-1)為前一點噪聲,Noise(x+1)為后一點噪聲,計算當前點為:
(3)
由指定參數(shù)生成一維Perlin噪聲后,可根據(jù)所需的噪聲強度,將其加入到生成的冰紋中.
原冰紋寬度沒有變化,均為d;待混合Perlin噪聲為p(x),則x處混合Perlin噪聲后,寬度dp(x)為:
dp(x)=(1-α)d+αp(x)d.
(4)
上式中,α為噪聲因子,在[0,1]間取值.α值大,噪聲影響寬度更為顯著;α值小,冰紋較多保持原來寬度.Perlin噪聲對濃度的影響,原理與寬度類似.
以平行狀單條冰紋為對象,我們加入Perlin噪聲,影響其寬度、濃度.通過實驗研究了波長值、持續(xù)度、α值發(fā)生變化對冰紋形態(tài)的影響.
圖3為單條冰紋加入Perlin噪聲效果.圖3(a)為不同波長Perlin噪聲對應的實驗結(jié)果, 單條冰紋中,寬度變化的頻率由Perlin噪聲的波長決定.較大波長對應寬度的低頻變化,此時以平緩為基調(diào);較小波長對應寬度的高頻變化,此時以變化劇烈為特點.
圖3(b)示意了持續(xù)度改變對冰紋視覺效果的影響.持續(xù)度越小,噪聲越多顯現(xiàn)低頻部分,其形態(tài)更為光滑;持續(xù)度越大,噪聲越多顯現(xiàn)高頻部分,其形態(tài)顯得粗糙.圖3(b)可看出,就整體寬度而言,其變化不大,但由于持續(xù)發(fā)生了變化,粗糙程度變化卻較為明顯.圖3(c)為改變α值時的實驗結(jié)果.可看出,由上至下,噪聲影響逐漸增大,寬度變化愈趨劇烈.
圖3 Perlin噪聲各參數(shù)分析
設PMat(x,y)為二維噪聲,TMat(x,y)為當前平滑噪聲函數(shù),Prows為行數(shù),PCols為列數(shù),波長為WeaveLength.TMat(Rand X, Rand Y)處先行生成隨機數(shù),服從平均分布,取值為[0,1],其中
(6)
其中,m和n是整數(shù).
二維插值以一維插值為基礎.設插值點TMat (j,i)四周頂點為V0(Left,Top),V1(Right,Top),V2(Left,Bottom),V3(Right,Bottom).由于V0(Left,Top),V1(Right,Top)同處于Top行,首先對其進行一維插值.參數(shù)取值為:a=TMat(Left,Top),b=TMat(Right,Top),x=(j-Left)/(Right-Left).該插值返回結(jié)果為TopValue.接下來,V2(Left,Bottom),V3(Right,Bottom)同處于Bottom行,對其插值,參數(shù)取值為:a=TMat(Left,Bottom),b=TMat(Right,Bottom),x=(j-Left)/(Right-Left),該插值返回結(jié)果為BottomValue.同理,垂直方向也應對TopValue,BottomValue插值,參數(shù)為:a=TopValue,x=(i-top)/(Bottom-Top),x=(i-top)/(Bottom-Top).
二維噪聲函數(shù)TMat可使用圖像進行表示,故其平滑可用圖像平滑方法完成,本文使用高斯平滑.
我們使用文獻[13]的算法進行蠟染染色.二維Perlin噪聲在染色中的應用主要是實現(xiàn)染料濃度在連續(xù)性基礎上的隨機變化,模擬蠟染作品中的斑駁、暈染現(xiàn)象,提高作品的表現(xiàn)力.
設原圖像為I(x),則加入噪聲的圖像Ip(x)為:
Ip(x)=(1-α)I(x)+αf(p(x)).
(7)
式(7)中,α為噪聲因子.f為變換函數(shù),該函數(shù)由染色區(qū)域、濃度等因素確定.本文中變換函數(shù)f使用映射圖表示.
二維Perlin噪聲的波長、持續(xù)度、α值同樣對結(jié)果具有決定性的影響.圖4為使用不同波長、不同持續(xù)度生成的二維Perlin噪聲.圖4(a)到圖4(d)是不同波長的結(jié)果.圖4(a)到圖4(d)波長逐步減小,噪聲逐步豐富,圖4(a)最為平滑,圖4(d)最為豐富.可見,波長決定了噪聲的豐富程度.圖4(e)到圖4(h)是相同波長,不同持續(xù)度的結(jié)果.圖4(e)到圖4(h)高頻噪聲越來越明顯,4(e)噪聲較為平滑,高頻成分并不突出;圖4(h)中低頻部分并不明顯,高頻部分則較為突出.值得注意的是,圖4(e)到圖4(h)中雖然持續(xù)度不同,但波長相同.結(jié)果中,雖然高頻信息和低頻信息各不相同,但整體形態(tài)卻基本一致.說明噪聲的基本形態(tài)是由波長決定的,而持續(xù)度主要影響的是其細節(jié)形態(tài).
圖4 波長和持續(xù)度對Perlin噪聲的影響
在采用文獻[11]的蠟染冰紋生成算法和文獻[13]的蠟染染色算法基礎上,我們使用本文方法生成了適于蠟染冰紋和染色的一維和二維Perlin噪聲,基于Visual Studio +OpenCv環(huán)境進了模擬實驗.模擬主要考慮兩種情景,一是布料較為細膩,布料特征不明顯,僅模擬冰紋生成和染色;二是布料較為粗糙,具有明顯的紡織視覺特征.
圖5為加入了Perlin噪聲的冰紋生成結(jié)果,沒有布料織物特征.圖5(a)為分支型冰紋,Perlin噪聲主要影響冰紋的寬度和亮度,使得同一冰紋的不同位置寬度和亮度產(chǎn)生變化,該變化在連續(xù)的基礎上,又具有一定的隨機性.圖5(a)為體現(xiàn)“碗”的光照變化,還對合成的圖像進行了光照處理,光照加入了二維Perlin噪聲.加入噪聲后,圖像高光區(qū)域和低光區(qū)域界限顯得較不規(guī)則,但又保持了高光和低光的基本視覺效果,增加了作品的靈動之氣.圖5(b)為多色染制中的龜裂狀冰紋,Perlin噪聲主要影響冰紋寬度和染料濃度.圖5(c)為純網(wǎng)格狀冰紋生成,Perlin噪聲主要影響冰紋寬度、染料濃度.從冰紋生成的結(jié)果來看,對于蠟染作品中常見的冰紋形態(tài),Perlin噪聲都可以在保持連續(xù)性的基礎上增加變化,從而提高作品的生命力和表現(xiàn)力.
圖5 蠟染冰紋模擬結(jié)果
圖6為加入了Perlin噪聲的布料染色結(jié)果,具有明顯的布料特征.圖6(a)與圖6(b)中,Perlin噪聲持續(xù)度值相同,通過波長變化觀察染色結(jié)果的變化.若波長較大,噪聲較為平滑,暈染區(qū)塊數(shù)量較少,單個區(qū)塊面積較大,適合模擬較為均勻的暈染,斑駁現(xiàn)象并不突出;當波長較小時,暈染區(qū)塊數(shù)量較多,單個區(qū)塊面積較小,適合模擬較為細碎的暈染,點塊狀斑駁現(xiàn)象更為突出.
圖6(c)和圖6(d)Perlin噪聲使用了相同的波長,持續(xù)度發(fā)生了變化.2圖暈染區(qū)塊數(shù)量及單個區(qū)塊面積相當,但其視覺效果確有較大區(qū)別.由于圖6(c)采用了較大的持續(xù)度,其染色結(jié)果高頻成分較多,暈染更為細碎,斑駁更為明顯.可見,通過調(diào)節(jié)波長和持續(xù)度參數(shù),可以有效控制染色的視覺效果.
圖6 具有明顯布料特征的蠟染染色模擬
在圖6中,我們也生成了冰紋,由于冰紋主要生成于圖案中面積較小區(qū)域,主要呈斷裂形態(tài).冰紋生成中,Perlin噪聲也影響了冰紋寬度、染料濃度,使得冰紋形態(tài)既能隨機變化,又能保持其本質(zhì)的特征,能夠較好體現(xiàn)手工蠟染冰紋的基本特點.
本文以云南蠟染為對象,研究Perlin噪聲在其數(shù)字化模擬中的應用,主要工作是一維Perlin噪聲和二維Perlin噪聲在蠟染冰紋生成、染色、布料模擬中的使用.全文討論了蠟染模擬中生成適合蠟染特點的一維Perlin噪聲和二維Perlin噪聲;根據(jù)蠟染要求,建立噪聲混合函數(shù),將Perlin噪聲加入到蠟染作品中;選取適合蠟染模擬的Perlin噪聲參數(shù),實驗分析噪聲參數(shù)對染色結(jié)果的影響.
實驗表明,算法在蠟染模擬中可以有效表達冰紋形態(tài);能夠體現(xiàn)常見的單色染制、多色染制,布料結(jié)構(gòu)基本特征;對染色中常出現(xiàn)的暈染、斑駁現(xiàn)象能夠有效實現(xiàn).
手工蠟染作品受環(huán)境、作者、原料等各種因素影響較大,染制中還有其它本文未涉及的視覺特征.采用合適的方法模擬蠟染作品的這些特征,以及探索Perlin噪聲在云南少數(shù)民族風情繪畫中其它應用,將會成為后續(xù)的工作方向.