賈 瑤,靳雁霞,馬 博,陳治旭,蘆 燁
(中北大學 大數據學院,山西 太原 030051)
近年來布料動畫在很多領域有著重要的應用[1],尤其是在游戲、電影和虛擬試衣領域,服裝的逼真度嚴重地影響著用戶的體驗感。布料在動畫模擬中有著重要的作用,因為布料是一種柔性材料,很容易發生彎曲形變,產生不同程度的褶皺。這些褶皺可以顯示出不同程度的細節特征,準確而逼真地模擬布料的褶皺,是布料動畫的關鍵。近年來有許多布料模擬方法[2-7],都可以準確而逼真地模擬布料動畫。已有的許多工作中主要針對布料多精度建模[8-10],石敏等人[8]提出一種基于實例的多精度網格精化,在動畫中獲取布料彎曲模式,通過計算曲率得到變形模式,然后對精度不足的布料網格區域進行加精,從而形成高精度網格使模擬效果逼真,但是計算曲率的方法使得計算量大成本高。Narain R等人[3]提出了一種基于物理的動力學方法,合成高分辨率布料褶皺,通過使用隱式積分法,計算下一階段布料質點的運動狀態,最終得到逼真的布料效果。基于物理的方法雖然能生成逼真的動畫效果,但是計算復雜耗時長。針對上述計算復雜耗時長的問題,該文提出了一種基于機器學習的方法合成高分辨率布料褶皺,通過輸入低分辨率布料網格特征,最終得到高分辨率布料網格,以實現逼真的動畫模擬。
布料精化的演化過程有以下幾個階段:
(1)最初劉浩[10]通過建立彈簧質點模型,通過計算虛擬彈簧所連質點的外力以及它們間的相互作用力,去模擬布料的受力變現,實驗表明可以模擬出逼真的布料動畫效果,但是由于彈簧質點所產生的拉伸問題使得實驗結果沒有預期效果好。
(2)針對逼真性問題,李娜等人[11]提出了一種更好的方法對布料進行模擬,提出了一種基于平均曲率的布料彎曲模型,該方法通過獲得真實布料屬性參數,建立基于平均曲率的彎曲近似模型,然后對布料區域進行劃分不斷更新,實驗結果表明可以模擬出衣服的褶皺細節。但是由于曲率計算是一項很復雜的工作且計算量比較大,往往需要花費大量時間。
(3)針對耗時長問題,Oh Y J等人[12]提出了一種基于機器學習的方法對布料進行模擬,提出了基于深度神經網絡的布料分層建模方法,通過將傳統的物理方法與深度神經網絡相結合,對更深層次的布料進行精化,實驗結果表明該方法可以快速且高效地模擬出高質量的布料動畫效果。該方法模擬出的布料效果在時間效率上有了很大的提升,但是模擬效果卻沒有物理方法那樣精確。
(4)針對物理方法耗時長問題,Benameur S等人[13]提出了一種基于粒子位置校正的多分辨率布料模擬的方法,通過使用一階有限元方法處理任意三角形,不僅僅局限在規則三角形上,校正粒子位置,最終模擬出高分辨率布料。該方法雖然能模擬出逼真的布料動畫效果,但是在處理角度和布料層次方面比較復雜。
針對實時性以及逼真性問題,該文提出了一種基于機器學習[14]的方法合成高分辨率布料褶皺,對布料進行模擬,提高布料逼真的視覺效果。
首先將低分辨率布料褶皺圖像放入CNN中進行訓練,其次將訓練出的高分辨率布料褶皺圖像轉換為高分辨率布料網格,最后對布料進行模擬。
算法步驟如下:
Step1:模擬布料運動獲取布料運動的幀數據信息,將幀數據轉換為圖像進行存儲,此時圖像為低分辨率圖像。
Step2:將得到的低分辨率圖像數據信息作為CNN的輸入,在網絡中進行訓練。
Step3:通過將CNN網絡與縮小網絡相結合,最終得到輸出圖像,即高分辨率圖像。
Step4:將高分辨率圖像轉換為網格,對布料進行模擬。
算法流程如圖1所示。

圖1 算法流程
首先對布料進行模擬,在模擬階段獲取布料幀數據信息,將幀數據信息進行保存,即為低分辨率布料網格。而此時低分辨率布料網格為三角形面片網格,需要將布料網格數據轉換為布料圖像數據,即低分辨率圖像,然后將低分辨率圖像數據輸入神經網絡中進行訓練。
在布料模擬過程中,獲取布料幀數據信息,此時幀數據信息為初始布料網格。在初始布料網格中標記每一個三角形面片的三個頂點坐標,并計算由這三個頂點所組成的三角形面片的法向量,然后求每一個頂點所連三角形面片的平均法向量(如圖2所示),其中V表示三角形頂點,F=(F1,F2,…,Fm)表示與該頂點V相鄰的所有三角形面片數。最后將得到的平均法向量恢復到三維坐標系中,將其作為RGB的值,將坐標值歸一化到[0,255],此時網格就被轉換成了圖像。計算平均法向量的公式如式(1)所示,其中n為法向量,m為與三角形頂點相鄰的所有三角形面片數。
(1)

圖2 三角形頂點與其相鄰面示意圖
通過對布料進行模擬,得到歸一化后的RGB值,將得到的RGB值作為輸入,輸入到CNN中進行訓練,最終得到高分辨率圖像。卷積神經網絡[15-16]在圖像領域有著顯著的效果,所以選取卷積神經網絡合成高分辨率圖像。它的網絡結構由輸入層、卷積層、池化層、全連接層以及輸出層組成,優點是權值共享,降低了訓練過程中的復雜性,提高了擬合度。
文中的網絡框架不同于普通的卷積神經網絡框架,首先將歸一化后得到的RGB值作為輸入在網絡中進行訓練,卷積神經網絡框架由輸入層、卷積層、全連接層以及輸出層組成。該框架取消了池化層,選取三個帶有步幅的卷積層進行特征提取,代替了池化層的特征提取功能,其中卷積核選取3×3的卷積操作且步幅長度為2進行特征映射。卷積操作公式如式(2)所示,其中Mk為卷積響應矩陣,Ck為卷積核,A為輸入矩陣,s為步幅長度。
(2)
其次在卷積層后加入了一種特殊的網絡結構,該結構為縮小網絡,此網絡選取等比例縮放,在縮放過程中選取比例系數為1.5倍進行縮放,整體布局保持不變,目的是能夠得到更高分辨率的圖像,縮放比例效果如圖3所示。最后選取三個全連接層進行批量歸一化處理,最終輸出高分辨率圖像。該網絡框架如圖4所示。

圖3 縮放比例

圖4 網絡框架
為了評估最終輸出效果,通過殘差均方誤差進行評估,將殘差均方誤差定義為RMSE,當RMSE的值越小說明輸出效果越好,輸出的預測值越接近真實值。計算公式如式(3)所示,其中yc為實際值,yp為神經網絡輸出值,i,j為像素索引。

(3)
通過卷積神經網絡與縮小網絡對低分辨率圖像進行訓練,最后合成高分辨率圖像,需要將合成的高分辨率圖像轉換為高分辨率網格。在得到高分辨率圖像后,標記每一個像素點,用像素點來恢復三角形網格,其中一種方法是通過使用雙線性插值的方法恢復三角形網格。具體操作步驟為首先將得到的像素網格放入二維坐標系中進行標記,在x軸方向上找到兩處頂點位置x1x2和x3x4方向進行插值,插值后的坐標為p1、p2,然后沿著p1、p2方向在y軸方向進行插值,最終得到坐標p,此時點p的坐標為最終三角形網格的頂點坐標,雙線性插值如圖5所示。將圖像轉換為網格的另一種方法,通過像素值恢復三角形網格的三個頂點坐標,每一個像素網格由RGB值組成,RGB值是由三組值來確定的,由這三組RGB值分別作為三角形的三個頂點,為了使最終的網格具有連續性可以取RGB近似值進行恢復,最終得到三角形網格。

圖5 雙線性插值示意圖
該文基于機器學習的方法,通過將卷積神經網絡與縮小網絡相結合,生成高分辨率圖像,最終形成高分辨率網格。實驗環境配置如下:處理器為Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40 GHz,64 GB內存的計算機,以及Windows 10操作系統的軟件環境。為了驗證實驗的高效性,在不同場景下將低分辨率布料模擬效果、高分辨率布料模擬效果以及真實布料模擬效果進行對比。
為了驗證該方法的高效性,設置不同的場景對布料進行模擬,對比在同一場景中低分辨率、高分辨率以及真實布料的模擬效果。分別將場景設置為風中飄動的旗幟、布料與小球發生碰撞以及布料在懸掛狀態下施加外界風力這三個場景。圖6為低分辨率、高分辨率以及真實場景下旗幟隨風飄動的模擬效果。圖7為低分辨率、高分辨率以及真實場景下布料與小球發生碰撞的模擬效果。圖8為低分辨率、高分辨率以及真實場景下布料在懸掛狀態下施加外界風力的模擬效果。

圖6 旗幟隨風飄動的模擬效果
從圖6可以看出,圖6(a)為低分辨率下旗幟在風中飄動的模擬效果,布料沒有明顯的彎曲形變,只有微小的變化,模擬效果不佳。圖6(b)為文中方法高分辨率下旗幟在風中飄動的模擬效果,可以看出布料有明顯的褶皺,也可以看出細節性的褶皺,使得模擬更加真實效果更加逼真。圖6(c)為真實場景中的旗幟隨風飄動的效果,可以看出真實場景下布料有著豐富的褶皺。

圖7 布料與小球發生碰撞的模擬效果
從圖7可以看出,圖7(a)為低分辨率下布料與小球發生碰撞的模擬效果,可以看出布料與小球接觸后發生碰撞,在接觸周圍只有少量的褶皺,模擬效果不好。圖7(b)為高分辨率下布料與小球發生碰撞的模擬效果,通過使用文中方法進行模擬,在布料與小球發生碰撞時,該方法可以產生大量且豐富的褶皺,且可以看出細微的褶皺變化,模擬出的效果更加逼真。圖7(c)為真實場景中布料與小球碰撞的模擬效果,在發生碰撞后發生碰撞的接觸面布料有大量的褶皺。

圖8 布料在懸掛狀態下施加外界風力的模擬效果
從圖8可以看出,圖8(a)為低分辨率下布料懸垂且施加外界風力的布料模擬效果,可以看出布料在懸垂狀態下隨風飄動,有幾處明顯的褶皺,但褶皺量少模擬效果欠佳。圖8(b)為高分辨率下布料懸垂且施加外界風力的布料模擬效果,可以看出布料在此狀態下有明顯的褶皺且褶皺量大,在細節處也有豐富的褶皺,模擬效果逼真。圖8(c)為真實場景中布料懸垂且施加外界風力的效果,可以看出布料有豐富且細微的褶皺。
實驗結果表明,在三個不同場景中,低分辨率情況下布料模擬的效果一般,沒有細微的褶皺,與真實場景下的模擬效果進行對比低分辨率下布料模擬效果不佳。在高分辨率情況下布料模擬效果逼真且有著細微的褶皺,而且沒有產生僵硬的現象,與真實場景下的模擬效果比較兩者的模擬效果相似,沒有明顯的差異。所以該方法能夠模擬出高質量的布料動畫效果,且效果逼真。
實驗中比較在兩個不同場景中布料網格的質點數以及布料模擬的時間性能,場景分別為風中飄動的旗幟以及布料在懸掛狀態下施加外界風力。分別比較了兩個不同場景中,低分辨率質點數與高分辨率質點數。還比較了在兩個場景中高分辨率布料模擬與真實場景中布料模擬的運行時間。實驗結果如表1所示。

表1 不同場景下的布料性能比較
實驗結果表明,在同一場景中不同分辨率的布料網格擁有的質點數不同,可以看出高分辨率布料擁有更多的質點數,說明高分辨率擁有著更豐富的褶皺,且模擬效果更加真實。從表中可以看出,在兩個不同的場景中,使用文中方法合成高分辨率布料模擬所運行的時間比真實場景中布料模擬運行的時間短,可以說明該方法具有高效性。
上述實驗表明,文中方法不僅可以模擬出逼真的布料動畫效果,而且可以快速地模擬出動畫效果,在實時性和逼真性上都有很大的優勢。
提出了一種基于機器學習的方法合成高分辨率布料褶皺,采用卷積神經網絡與縮小網絡相結合的方法。通過比較低分辨率布料模擬、高分辨率布料模擬以及真實的布料模擬,驗證了該方法可以充分展示出細致的布料褶皺,與真實的布料模擬效果相似。通過模擬風中飄動的旗幟以及布料與小球碰撞,實驗結果表明該方法在受外力情況下仍可模擬出逼真的布料效果。但該方法仍然存在一些不足之處,在處理網格邊界時不是很理想,下一步的工作將對網格邊界問題進行重點討論。