余方姝,楊欣
(1.四川大學(xué)視覺(jué)合成圖形圖像技術(shù)國(guó)防重點(diǎn)學(xué)科實(shí)驗(yàn)室,成都 610065;2.四川大學(xué)計(jì)算機(jī)學(xué)院,成都 610065)
在虛擬現(xiàn)實(shí)技術(shù)日益發(fā)展的過(guò)程中,布料模擬已逐漸成為一個(gè)研究熱點(diǎn),模擬出的布料在電子游戲、影視動(dòng)漫、服裝設(shè)計(jì)等各方面展現(xiàn)了越來(lái)越多的應(yīng)用[1]。布料是日常生活中隨處可見(jiàn)的物品,它具有高度的形變特性、延展性、整體性,且具備分布均勻的質(zhì)量。如何在計(jì)算機(jī)中正確模擬出布料的這些物理特性,一直以來(lái)都是科學(xué)家們研究的重點(diǎn)。本文將布料模擬過(guò)程分成建模和計(jì)算兩個(gè)方面來(lái)介紹。
目前,常用的布料模型構(gòu)造方法有以下幾種:
基于幾何的建模方法:幾何方法不考慮布料根據(jù)動(dòng)力學(xué)表現(xiàn)的運(yùn)動(dòng)特性,采用幾何方程來(lái)表現(xiàn)布料褶皺、折疊等幾何效果。該方法計(jì)算開(kāi)銷小,但無(wú)法反映布料彈性,不夠逼真。
基于物理的建模方法:根據(jù)布料的物理規(guī)律,使用質(zhì)點(diǎn)來(lái)對(duì)布料進(jìn)行模擬,將布料的質(zhì)量分散到質(zhì)點(diǎn)上,同時(shí),使用質(zhì)點(diǎn)間的相互作用來(lái)模擬布料的物理性質(zhì),有粒子系統(tǒng)和彈簧質(zhì)點(diǎn)模型等方法。
基于混合特性的建模方法:這種方法結(jié)合了將幾何建模和物理建模結(jié)合,使用幾何方法模擬布料輪廓,然后用物理方法模擬細(xì)節(jié),產(chǎn)生快速而精確的效果,但在真實(shí)性上還是低于物理方法。
綜合效率和真實(shí)性的考慮,本文采用彈簧質(zhì)點(diǎn)模型進(jìn)行建模。
1995年X Provot建立了經(jīng)典的彈簧質(zhì)點(diǎn)模型[2]。模型將一塊布料劃分成m×n的均勻矩形網(wǎng)格,如圖1所示。每個(gè)網(wǎng)格頂點(diǎn)都是一個(gè)虛擬質(zhì)點(diǎn),質(zhì)點(diǎn)有相同質(zhì)量,用來(lái)模擬質(zhì)量均勻的布料。每個(gè)質(zhì)點(diǎn)與其周圍質(zhì)點(diǎn)通過(guò)無(wú)質(zhì)量彈簧相連接。一共有三種性質(zhì)的彈簧:
連接左右相鄰 [i,j]與[i+1,j]、上下相鄰[i,j]與[i,j+1]的彈簧叫結(jié)構(gòu)彈簧,用來(lái)模擬布料橫縱向的力,阻止布料在這兩個(gè)方向過(guò)度拉伸形變。
連接對(duì)角線方向[i,j]與[i+1,j+1]的彈簧叫剪切彈簧,用來(lái)模擬布料內(nèi)傾斜方向的力,阻止布料斜方向的過(guò)度形變,模擬布料的延展性。
連接水平豎直方向間隔[i,j]和[i+2,j]、[i,j]和[i,j+2]質(zhì)點(diǎn)的彈簧叫彎曲彈簧,用來(lái)模擬布料在被彎曲和折疊時(shí),抵抗彎曲的力。
圖1 彈簧質(zhì)點(diǎn)模型
在彈簧質(zhì)點(diǎn)模型中,任意質(zhì)點(diǎn)[I,j]在t時(shí)刻的位置是Pi,j(t),力學(xué)方程由其在當(dāng)前位置受到的合力Fi,j(t)決定。根據(jù)牛頓第二定律:
其中,m(Pi,j)表示當(dāng)前質(zhì)點(diǎn)的質(zhì)量,a(Pi,j)表示當(dāng)前質(zhì)點(diǎn)在t時(shí)刻的加速度。而質(zhì)點(diǎn)所受到的合力Fi,j()t是由質(zhì)點(diǎn)受到的彈簧質(zhì)點(diǎn)模型內(nèi)部的力和外部作用力組成的:
其中內(nèi)力FInternal是其內(nèi)部的三種彈簧產(chǎn)生。根據(jù)胡克定律,在非過(guò)度拉伸情況下彈簧的應(yīng)力和其形變呈線性關(guān)系,公式如下:
其中Fn表示當(dāng)前彈簧產(chǎn)生的力,k是彈簧的勁度系數(shù),是一個(gè)常數(shù),與彈簧的材質(zhì)相關(guān)。X代表彈簧發(fā)生形變的長(zhǎng)度,即形變后的長(zhǎng)度減去原長(zhǎng)。由此可知,質(zhì)點(diǎn)[I,j]受到的內(nèi)力就是連接它的彈簧產(chǎn)生的彈力的合力:
同時(shí),質(zhì)點(diǎn)還會(huì)受到外部的作用力,如重力、空氣阻力等:
其中,重力 Fgravity=m(Pi,j)g,阻力 Fair=-Kavi,j,Ka為空氣阻力系數(shù),vi,j為質(zhì)點(diǎn)速度矢量。
在對(duì)質(zhì)點(diǎn)進(jìn)行受力分析后,就進(jìn)入對(duì)布料力學(xué)運(yùn)動(dòng)方程的計(jì)算了。
顯式歐拉積分是最容易實(shí)現(xiàn)數(shù)值積分的方法之一。假設(shè)不了模型中可劃分成m個(gè)質(zhì)點(diǎn),時(shí)間步長(zhǎng)為h,質(zhì)點(diǎn)的質(zhì)量用對(duì)角矩陣M∈R3m×3m表示,質(zhì)點(diǎn)位置用q表示。任選一個(gè)質(zhì)點(diǎn),在tn時(shí)刻其所在的位置為qn,則 f(qn)為質(zhì)點(diǎn)在tn時(shí)刻受到的力,vn為質(zhì)點(diǎn)在tn時(shí)刻的速度,那么使用顯式積分求解下一刻tn+1的運(yùn)動(dòng)可表示為:
顯式積分計(jì)算簡(jiǎn)單,但用tn時(shí)刻的速度計(jì)算tn+1時(shí)刻的位置帶來(lái)一定的誤差,影響其準(zhǔn)確度。
隱式歐拉積分是計(jì)算布料運(yùn)動(dòng)常用的積分,可用公式表示為:
由(8)和(9)兩個(gè)公式可得:
上式中qn和qn-1是已知量,而此時(shí)要qn+1的值,就需要求解 fn+1的值。
為了求解這個(gè)經(jīng)典的非線性方程,我們根據(jù)Baraff和Witkin在1998年提出的線性化力的方法[3]:
假設(shè)用x表示qn+1,然后用y表示2qn-qn-1,x是未知量,而y是已知量,可構(gòu)建出臨界式:
此時(shí),方程轉(zhuǎn)換成求g(x)最小值的問(wèn)題。該方法是由Martin在2011年提出的變分法隱式歐拉積分[4]。
本文主要思想是使用塊坐標(biāo)下降法通過(guò)重新整理模型的能量E來(lái)計(jì)算其力學(xué)方程。在布料模擬中,大部分的能量來(lái)源于彈性勢(shì)能,其公式為:
其中,x代表彈簧變化的長(zhǎng)度。此時(shí),對(duì)布料模型而言,其單個(gè)彈簧的彈性勢(shì)能可表示為:
pi和 pj代表彈簧兩端的質(zhì)點(diǎn),l是彈簧的原長(zhǎng)。
然后令l=|d|,則:
則,解彈性勢(shì)能方程轉(zhuǎn)變成最小化問(wèn)題:
考慮到場(chǎng)景中有多個(gè)彈簧,而彈簧和質(zhì)點(diǎn)在實(shí)現(xiàn)過(guò)程中,會(huì)采用矩陣表示整個(gè)數(shù)據(jù),我們將能量方程更新為矩陣形式:
其中,s是彈簧的總數(shù),pi1和pi2代表當(dāng)前第i根彈簧兩端的質(zhì)點(diǎn),x是包含全部質(zhì)點(diǎn)的向量,L和J分別代表:
其中,Ai是彈簧i的入射向量,Ai,i1=1,Ai,i2=-1,其他值為0;Si代表第i個(gè)彈簧;I是單位矩陣。
然后將其帶入公式(12),可以將上式轉(zhuǎn)換成最優(yōu)化問(wèn)題:
其中,b是一個(gè)向量,表示外部力合力產(chǎn)生的慣性,是一個(gè)常量。將上式收斂到最小值所得到的x即時(shí)隱式歐拉積分的解。
解最小化方程使用的方法是塊坐標(biāo)下降法:首先用預(yù)估位置初始化x的值,然后使用當(dāng)前x的值計(jì)算d,第二步固定d的值,使用計(jì)算出的d值計(jì)算x,重復(fù)該步驟直到達(dá)到最大迭代次數(shù),就能得到下一步質(zhì)點(diǎn)的位置。
此外,為了對(duì)算法進(jìn)行加速,采用了預(yù)計(jì)算方法處理算式中與過(guò)程無(wú)關(guān)的量。算式中M+h2L使用質(zhì)量矩陣,時(shí)間步長(zhǎng),彈簧勁度系數(shù)矩陣計(jì)算,而這些值都是固定的,同樣J的計(jì)算也是固定的,這樣就可以在初始化階段計(jì)算出兩組數(shù)據(jù)的值,避免在迭代過(guò)程中加入大量的矩陣運(yùn)算,減少計(jì)算開(kāi)銷。
實(shí)驗(yàn)?zāi)M了固定四角平行放置的矩形布料在被放開(kāi)右側(cè)兩角后,在空中飄動(dòng),然后在空氣阻力作用下恢復(fù)靜止?fàn)顟B(tài)的效果。如圖2,展示了布料物理規(guī)律下的運(yùn)動(dòng)過(guò)程,布料在被解開(kāi)兩角后,自然墜落,左右飄動(dòng),效果真實(shí)。圖3展示了布料模擬的細(xì)節(jié),圖中可以清晰看到布料產(chǎn)生的褶皺和彎曲現(xiàn)象,與真實(shí)布料效果相似。在滿足真實(shí)感的同時(shí),布料的幀率為300-400幀,此時(shí)模型的三角面片為1k能達(dá)到能夠達(dá)到實(shí)時(shí)渲染效果。當(dāng)布料三面片個(gè)數(shù)達(dá)到10k時(shí),如圖4所示,布料細(xì)節(jié)更明顯,更具真實(shí)感的同時(shí),幀率同樣達(dá)到實(shí)時(shí)渲染要求。
圖2 布料運(yùn)動(dòng)過(guò)程
圖3 布料模擬細(xì)節(jié)及幀率
圖4 布料模擬細(xì)節(jié)(三角面片數(shù)10k)
本文的布料模擬方法采用預(yù)計(jì)算處理彈簧質(zhì)點(diǎn)模型數(shù)據(jù),使用塊坐標(biāo)下降法計(jì)算隱式積分,對(duì)彈簧質(zhì)點(diǎn)模型位置進(jìn)行預(yù)測(cè),在兼顧真實(shí)感的同時(shí),對(duì)繪制效率也有較好的提升,能夠被運(yùn)用于電子游戲、影動(dòng)畫(huà)產(chǎn)業(yè)中。但同時(shí),本文未對(duì)布料碰撞進(jìn)行研究,包括布料自碰撞和布料和物體間的碰撞進(jìn)行研究,包括布料自碰撞和布料和物體間的碰撞,需要在接下來(lái)的工作中進(jìn)行研究和完善。
參考文獻(xiàn):
[1]陳輝,沈毅.關(guān)于織物仿真技術(shù)的綜述[J].絲綢,2005(8).
[2]Xavier Provot.Deformation Constraints in a Mass-Spring Model to Describe Rigid Clothbehavior[C].In Proceedings of Graphics Interface,Quebec:Canadian Information Processing Society,1995,12(6):147-154.
[3]D Baraff,A Witkin.Large Steps in Cloth Simulation[J].Conference on Computer Graphics&Interactive Techniques,1998:43-54.
[4]S Martin,B Thomaszewski,E Grinspun,M Gross.Example-Based Elastic Materials[J].In Acm Siggraph,2011,30(4):1-8.