賈 瑤,靳雁霞,馬 博,陳治旭,蘆 燁
(中北大學(xué) 大數(shù)據(jù)學(xué)院,山西 太原 030051)
近年來布料動畫在很多領(lǐng)域有著重要的應(yīng)用[1],尤其是在游戲、電影和虛擬試衣領(lǐng)域,服裝的逼真度嚴(yán)重地影響著用戶的體驗感。布料在動畫模擬中有著重要的作用,因為布料是一種柔性材料,很容易發(fā)生彎曲形變,產(chǎn)生不同程度的褶皺。這些褶皺可以顯示出不同程度的細節(jié)特征,準(zhǔn)確而逼真地模擬布料的褶皺,是布料動畫的關(guān)鍵。近年來有許多布料模擬方法[2-7],都可以準(zhǔn)確而逼真地模擬布料動畫。已有的許多工作中主要針對布料多精度建模[8-10],石敏等人[8]提出一種基于實例的多精度網(wǎng)格精化,在動畫中獲取布料彎曲模式,通過計算曲率得到變形模式,然后對精度不足的布料網(wǎng)格區(qū)域進行加精,從而形成高精度網(wǎng)格使模擬效果逼真,但是計算曲率的方法使得計算量大成本高。Narain R等人[3]提出了一種基于物理的動力學(xué)方法,合成高分辨率布料褶皺,通過使用隱式積分法,計算下一階段布料質(zhì)點的運動狀態(tài),最終得到逼真的布料效果?;谖锢淼姆椒m然能生成逼真的動畫效果,但是計算復(fù)雜耗時長。針對上述計算復(fù)雜耗時長的問題,該文提出了一種基于機器學(xué)習(xí)的方法合成高分辨率布料褶皺,通過輸入低分辨率布料網(wǎng)格特征,最終得到高分辨率布料網(wǎng)格,以實現(xiàn)逼真的動畫模擬。
布料精化的演化過程有以下幾個階段:
(1)最初劉浩[10]通過建立彈簧質(zhì)點模型,通過計算虛擬彈簧所連質(zhì)點的外力以及它們間的相互作用力,去模擬布料的受力變現(xiàn),實驗表明可以模擬出逼真的布料動畫效果,但是由于彈簧質(zhì)點所產(chǎn)生的拉伸問題使得實驗結(jié)果沒有預(yù)期效果好。
(2)針對逼真性問題,李娜等人[11]提出了一種更好的方法對布料進行模擬,提出了一種基于平均曲率的布料彎曲模型,該方法通過獲得真實布料屬性參數(shù),建立基于平均曲率的彎曲近似模型,然后對布料區(qū)域進行劃分不斷更新,實驗結(jié)果表明可以模擬出衣服的褶皺細節(jié)。但是由于曲率計算是一項很復(fù)雜的工作且計算量比較大,往往需要花費大量時間。
(3)針對耗時長問題,Oh Y J等人[12]提出了一種基于機器學(xué)習(xí)的方法對布料進行模擬,提出了基于深度神經(jīng)網(wǎng)絡(luò)的布料分層建模方法,通過將傳統(tǒng)的物理方法與深度神經(jīng)網(wǎng)絡(luò)相結(jié)合,對更深層次的布料進行精化,實驗結(jié)果表明該方法可以快速且高效地模擬出高質(zhì)量的布料動畫效果。該方法模擬出的布料效果在時間效率上有了很大的提升,但是模擬效果卻沒有物理方法那樣精確。
(4)針對物理方法耗時長問題,Benameur S等人[13]提出了一種基于粒子位置校正的多分辨率布料模擬的方法,通過使用一階有限元方法處理任意三角形,不僅僅局限在規(guī)則三角形上,校正粒子位置,最終模擬出高分辨率布料。該方法雖然能模擬出逼真的布料動畫效果,但是在處理角度和布料層次方面比較復(fù)雜。
針對實時性以及逼真性問題,該文提出了一種基于機器學(xué)習(xí)[14]的方法合成高分辨率布料褶皺,對布料進行模擬,提高布料逼真的視覺效果。
首先將低分辨率布料褶皺圖像放入CNN中進行訓(xùn)練,其次將訓(xùn)練出的高分辨率布料褶皺圖像轉(zhuǎn)換為高分辨率布料網(wǎng)格,最后對布料進行模擬。
算法步驟如下:
Step1:模擬布料運動獲取布料運動的幀數(shù)據(jù)信息,將幀數(shù)據(jù)轉(zhuǎn)換為圖像進行存儲,此時圖像為低分辨率圖像。
Step2:將得到的低分辨率圖像數(shù)據(jù)信息作為CNN的輸入,在網(wǎng)絡(luò)中進行訓(xùn)練。
Step3:通過將CNN網(wǎng)絡(luò)與縮小網(wǎng)絡(luò)相結(jié)合,最終得到輸出圖像,即高分辨率圖像。
Step4:將高分辨率圖像轉(zhuǎn)換為網(wǎng)格,對布料進行模擬。
算法流程如圖1所示。
圖1 算法流程
首先對布料進行模擬,在模擬階段獲取布料幀數(shù)據(jù)信息,將幀數(shù)據(jù)信息進行保存,即為低分辨率布料網(wǎng)格。而此時低分辨率布料網(wǎng)格為三角形面片網(wǎng)格,需要將布料網(wǎng)格數(shù)據(jù)轉(zhuǎn)換為布料圖像數(shù)據(jù),即低分辨率圖像,然后將低分辨率圖像數(shù)據(jù)輸入神經(jīng)網(wǎng)絡(luò)中進行訓(xùn)練。
在布料模擬過程中,獲取布料幀數(shù)據(jù)信息,此時幀數(shù)據(jù)信息為初始布料網(wǎng)格。在初始布料網(wǎng)格中標(biāo)記每一個三角形面片的三個頂點坐標(biāo),并計算由這三個頂點所組成的三角形面片的法向量,然后求每一個頂點所連三角形面片的平均法向量(如圖2所示),其中V表示三角形頂點,F(xiàn)=(F1,F2,…,Fm)表示與該頂點V相鄰的所有三角形面片數(shù)。最后將得到的平均法向量恢復(fù)到三維坐標(biāo)系中,將其作為RGB的值,將坐標(biāo)值歸一化到[0,255],此時網(wǎng)格就被轉(zhuǎn)換成了圖像。計算平均法向量的公式如式(1)所示,其中n為法向量,m為與三角形頂點相鄰的所有三角形面片數(shù)。
(1)
圖2 三角形頂點與其相鄰面示意圖
通過對布料進行模擬,得到歸一化后的RGB值,將得到的RGB值作為輸入,輸入到CNN中進行訓(xùn)練,最終得到高分辨率圖像。卷積神經(jīng)網(wǎng)絡(luò)[15-16]在圖像領(lǐng)域有著顯著的效果,所以選取卷積神經(jīng)網(wǎng)絡(luò)合成高分辨率圖像。它的網(wǎng)絡(luò)結(jié)構(gòu)由輸入層、卷積層、池化層、全連接層以及輸出層組成,優(yōu)點是權(quán)值共享,降低了訓(xùn)練過程中的復(fù)雜性,提高了擬合度。
文中的網(wǎng)絡(luò)框架不同于普通的卷積神經(jīng)網(wǎng)絡(luò)框架,首先將歸一化后得到的RGB值作為輸入在網(wǎng)絡(luò)中進行訓(xùn)練,卷積神經(jīng)網(wǎng)絡(luò)框架由輸入層、卷積層、全連接層以及輸出層組成。該框架取消了池化層,選取三個帶有步幅的卷積層進行特征提取,代替了池化層的特征提取功能,其中卷積核選取3×3的卷積操作且步幅長度為2進行特征映射。卷積操作公式如式(2)所示,其中Mk為卷積響應(yīng)矩陣,Ck為卷積核,A為輸入矩陣,s為步幅長度。
(2)
其次在卷積層后加入了一種特殊的網(wǎng)絡(luò)結(jié)構(gòu),該結(jié)構(gòu)為縮小網(wǎng)絡(luò),此網(wǎng)絡(luò)選取等比例縮放,在縮放過程中選取比例系數(shù)為1.5倍進行縮放,整體布局保持不變,目的是能夠得到更高分辨率的圖像,縮放比例效果如圖3所示。最后選取三個全連接層進行批量歸一化處理,最終輸出高分辨率圖像。該網(wǎng)絡(luò)框架如圖4所示。
圖3 縮放比例
圖4 網(wǎng)絡(luò)框架
為了評估最終輸出效果,通過殘差均方誤差進行評估,將殘差均方誤差定義為RMSE,當(dāng)RMSE的值越小說明輸出效果越好,輸出的預(yù)測值越接近真實值。計算公式如式(3)所示,其中yc為實際值,yp為神經(jīng)網(wǎng)絡(luò)輸出值,i,j為像素索引。
(3)
通過卷積神經(jīng)網(wǎng)絡(luò)與縮小網(wǎng)絡(luò)對低分辨率圖像進行訓(xùn)練,最后合成高分辨率圖像,需要將合成的高分辨率圖像轉(zhuǎn)換為高分辨率網(wǎng)格。在得到高分辨率圖像后,標(biāo)記每一個像素點,用像素點來恢復(fù)三角形網(wǎng)格,其中一種方法是通過使用雙線性插值的方法恢復(fù)三角形網(wǎng)格。具體操作步驟為首先將得到的像素網(wǎng)格放入二維坐標(biāo)系中進行標(biāo)記,在x軸方向上找到兩處頂點位置x1x2和x3x4方向進行插值,插值后的坐標(biāo)為p1、p2,然后沿著p1、p2方向在y軸方向進行插值,最終得到坐標(biāo)p,此時點p的坐標(biāo)為最終三角形網(wǎng)格的頂點坐標(biāo),雙線性插值如圖5所示。將圖像轉(zhuǎn)換為網(wǎng)格的另一種方法,通過像素值恢復(fù)三角形網(wǎng)格的三個頂點坐標(biāo),每一個像素網(wǎng)格由RGB值組成,RGB值是由三組值來確定的,由這三組RGB值分別作為三角形的三個頂點,為了使最終的網(wǎng)格具有連續(xù)性可以取RGB近似值進行恢復(fù),最終得到三角形網(wǎng)格。
圖5 雙線性插值示意圖
該文基于機器學(xué)習(xí)的方法,通過將卷積神經(jīng)網(wǎng)絡(luò)與縮小網(wǎng)絡(luò)相結(jié)合,生成高分辨率圖像,最終形成高分辨率網(wǎng)格。實驗環(huán)境配置如下:處理器為Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40 GHz,64 GB內(nèi)存的計算機,以及Windows 10操作系統(tǒng)的軟件環(huán)境。為了驗證實驗的高效性,在不同場景下將低分辨率布料模擬效果、高分辨率布料模擬效果以及真實布料模擬效果進行對比。
為了驗證該方法的高效性,設(shè)置不同的場景對布料進行模擬,對比在同一場景中低分辨率、高分辨率以及真實布料的模擬效果。分別將場景設(shè)置為風(fēng)中飄動的旗幟、布料與小球發(fā)生碰撞以及布料在懸掛狀態(tài)下施加外界風(fēng)力這三個場景。圖6為低分辨率、高分辨率以及真實場景下旗幟隨風(fēng)飄動的模擬效果。圖7為低分辨率、高分辨率以及真實場景下布料與小球發(fā)生碰撞的模擬效果。圖8為低分辨率、高分辨率以及真實場景下布料在懸掛狀態(tài)下施加外界風(fēng)力的模擬效果。
圖6 旗幟隨風(fēng)飄動的模擬效果
從圖6可以看出,圖6(a)為低分辨率下旗幟在風(fēng)中飄動的模擬效果,布料沒有明顯的彎曲形變,只有微小的變化,模擬效果不佳。圖6(b)為文中方法高分辨率下旗幟在風(fēng)中飄動的模擬效果,可以看出布料有明顯的褶皺,也可以看出細節(jié)性的褶皺,使得模擬更加真實效果更加逼真。圖6(c)為真實場景中的旗幟隨風(fēng)飄動的效果,可以看出真實場景下布料有著豐富的褶皺。
圖7 布料與小球發(fā)生碰撞的模擬效果
從圖7可以看出,圖7(a)為低分辨率下布料與小球發(fā)生碰撞的模擬效果,可以看出布料與小球接觸后發(fā)生碰撞,在接觸周圍只有少量的褶皺,模擬效果不好。圖7(b)為高分辨率下布料與小球發(fā)生碰撞的模擬效果,通過使用文中方法進行模擬,在布料與小球發(fā)生碰撞時,該方法可以產(chǎn)生大量且豐富的褶皺,且可以看出細微的褶皺變化,模擬出的效果更加逼真。圖7(c)為真實場景中布料與小球碰撞的模擬效果,在發(fā)生碰撞后發(fā)生碰撞的接觸面布料有大量的褶皺。
圖8 布料在懸掛狀態(tài)下施加外界風(fēng)力的模擬效果
從圖8可以看出,圖8(a)為低分辨率下布料懸垂且施加外界風(fēng)力的布料模擬效果,可以看出布料在懸垂?fàn)顟B(tài)下隨風(fēng)飄動,有幾處明顯的褶皺,但褶皺量少模擬效果欠佳。圖8(b)為高分辨率下布料懸垂且施加外界風(fēng)力的布料模擬效果,可以看出布料在此狀態(tài)下有明顯的褶皺且褶皺量大,在細節(jié)處也有豐富的褶皺,模擬效果逼真。圖8(c)為真實場景中布料懸垂且施加外界風(fēng)力的效果,可以看出布料有豐富且細微的褶皺。
實驗結(jié)果表明,在三個不同場景中,低分辨率情況下布料模擬的效果一般,沒有細微的褶皺,與真實場景下的模擬效果進行對比低分辨率下布料模擬效果不佳。在高分辨率情況下布料模擬效果逼真且有著細微的褶皺,而且沒有產(chǎn)生僵硬的現(xiàn)象,與真實場景下的模擬效果比較兩者的模擬效果相似,沒有明顯的差異。所以該方法能夠模擬出高質(zhì)量的布料動畫效果,且效果逼真。
實驗中比較在兩個不同場景中布料網(wǎng)格的質(zhì)點數(shù)以及布料模擬的時間性能,場景分別為風(fēng)中飄動的旗幟以及布料在懸掛狀態(tài)下施加外界風(fēng)力。分別比較了兩個不同場景中,低分辨率質(zhì)點數(shù)與高分辨率質(zhì)點數(shù)。還比較了在兩個場景中高分辨率布料模擬與真實場景中布料模擬的運行時間。實驗結(jié)果如表1所示。
表1 不同場景下的布料性能比較
實驗結(jié)果表明,在同一場景中不同分辨率的布料網(wǎng)格擁有的質(zhì)點數(shù)不同,可以看出高分辨率布料擁有更多的質(zhì)點數(shù),說明高分辨率擁有著更豐富的褶皺,且模擬效果更加真實。從表中可以看出,在兩個不同的場景中,使用文中方法合成高分辨率布料模擬所運行的時間比真實場景中布料模擬運行的時間短,可以說明該方法具有高效性。
上述實驗表明,文中方法不僅可以模擬出逼真的布料動畫效果,而且可以快速地模擬出動畫效果,在實時性和逼真性上都有很大的優(yōu)勢。
提出了一種基于機器學(xué)習(xí)的方法合成高分辨率布料褶皺,采用卷積神經(jīng)網(wǎng)絡(luò)與縮小網(wǎng)絡(luò)相結(jié)合的方法。通過比較低分辨率布料模擬、高分辨率布料模擬以及真實的布料模擬,驗證了該方法可以充分展示出細致的布料褶皺,與真實的布料模擬效果相似。通過模擬風(fēng)中飄動的旗幟以及布料與小球碰撞,實驗結(jié)果表明該方法在受外力情況下仍可模擬出逼真的布料效果。但該方法仍然存在一些不足之處,在處理網(wǎng)格邊界時不是很理想,下一步的工作將對網(wǎng)格邊界問題進行重點討論。