【摘要】本文主要研究了三維織物動(dòng)態(tài)模擬的實(shí)現(xiàn)過程。文章分別從織物模型、質(zhì)點(diǎn)位置的計(jì)算方法等方面針對(duì)現(xiàn)有的方法進(jìn)行綜合分析,根據(jù)每種方法的特點(diǎn)進(jìn)行選擇,并最終在計(jì)算機(jī)上進(jìn)行了模擬實(shí)現(xiàn)。實(shí)驗(yàn)結(jié)果表明,布料的模擬效果較為真實(shí),運(yùn)行過程流暢,對(duì)硬件配置無較高要求。
【關(guān)鍵詞】織物模擬;織物模型;質(zhì)點(diǎn)位置
1.引言
自上個(gè)世紀(jì)80年代以來,三維織物的動(dòng)態(tài)模擬問題就一直是研究人員的熱點(diǎn)研究問題,現(xiàn)有的方法大致可分為三類:幾何方法,物理方法和混合方法。幾何方法主要在不考慮織物的物理特性的情況下運(yùn)用幾何方程,模擬織物的視覺效果,這一類方法單獨(dú)使用時(shí)不能產(chǎn)生較為真實(shí)的效果;物理方法將織物視為由一系列微小的粒子組成,每一個(gè)粒子所受到的力都要計(jì)算出來,模擬動(dòng)態(tài)的織物;混合方法是結(jié)合了物理和幾何的方法,更多的用來模擬較復(fù)雜的動(dòng)態(tài)織物。
2.織物模型的選擇
目前,基于物理方法的織物模型種類很多,如有限元模型,有限體積模型,粒子系統(tǒng)模型等。本文的織物模型選擇的是經(jīng)典的質(zhì)點(diǎn)——彈簧模型,這是一種實(shí)現(xiàn)較為簡單且有效的方法,這種模型將織物模擬為相互關(guān)聯(lián)的質(zhì)點(diǎn),每個(gè)質(zhì)點(diǎn)的運(yùn)動(dòng)情況由不同的時(shí)刻所受到的合力決定。
3.計(jì)算方法的選擇
目前有兩種計(jì)算的方式,隱式積分算法和顯式積分算法。
隱式積分算法從系統(tǒng)整體出發(fā)計(jì)算質(zhì)點(diǎn)位置,這類算法的優(yōu)點(diǎn)在于由于將質(zhì)點(diǎn)視為一個(gè)連接的整體,潛在的不穩(wěn)定性通常會(huì)消失,這樣模擬過程不會(huì)出現(xiàn)不穩(wěn)定或放大的情況;缺點(diǎn)是存在泰勒級(jí)數(shù)的截?cái)嗾`差且很難用代碼正確的實(shí)現(xiàn)。
顯示積分算法的基本思想是獨(dú)立地更新所有未知的變量,這類算法的缺點(diǎn)是由于把一些變量看作是獨(dú)立的,相互之間并不影響,而織物上的質(zhì)點(diǎn)彼此之間是相互連接在一起的,因此這種方法模擬的織物有可能會(huì)出現(xiàn)質(zhì)點(diǎn)彼此之間移動(dòng)不同步的情況,質(zhì)點(diǎn)的位置會(huì)稍微出現(xiàn)些偏差,但是這種偏差是可被忽略的。
本文選擇顯示積分算法主要考慮該算法編碼實(shí)現(xiàn)較為簡單,對(duì)CPU的性能要求也不高,并且實(shí)現(xiàn)方式很多。顯示積分算法中目前較為常用有Euler算法和Verlet算法。
3.1 Euler算法
在數(shù)學(xué)和計(jì)算機(jī)領(lǐng)域,Euler算法是最基礎(chǔ)的一種算法,用于計(jì)算離散時(shí)間段中物體受力后的運(yùn)動(dòng)軌跡。該算法的主要優(yōu)點(diǎn)是易于實(shí)現(xiàn),但是由于該方法會(huì)產(chǎn)生較大的誤差,因此可能在數(shù)值上會(huì)不穩(wěn)定,尤其是對(duì)于剛性方程。
3.2 Verlet算法
該算法主要應(yīng)用在分子動(dòng)力學(xué)模擬方面,計(jì)算粒子的運(yùn)動(dòng)軌跡,相較Euler算法具有更好的穩(wěn)定性,且具有其他的一些對(duì)于物理系統(tǒng)非常重要的屬性,如時(shí)間可逆性。該算法的穩(wěn)定性很大程度上取決于統(tǒng)一的更新率,或能在一個(gè)很小的時(shí)間增量內(nèi)識(shí)別出位置,有時(shí)也被用在游戲的物理引擎中。
和Euler算法不同的是,為了降低誤差,Verlet算法計(jì)算下一個(gè)時(shí)間點(diǎn)位置的方法并不使用速度,而是通過前一個(gè)時(shí)間點(diǎn)和當(dāng)前時(shí)間點(diǎn)的位置,如式(1)所示:
在下一個(gè)時(shí)間點(diǎn)到來之后,再計(jì)算前一個(gè)時(shí)間點(diǎn)的速度,計(jì)算速度的公式如式(2)所示:
實(shí)現(xiàn)過程中本文選擇Verlet算法,它有更好的穩(wěn)定性,誤差也較小。
4.具體實(shí)現(xiàn)
織物模型采用質(zhì)點(diǎn)-彈簧系統(tǒng),由16個(gè)質(zhì)點(diǎn),58個(gè)彈簧組成。為了達(dá)到更為真實(shí)的效果,每一個(gè)質(zhì)點(diǎn)通過12個(gè)彈簧相互連接,分別為4個(gè)結(jié)構(gòu)彈簧,4個(gè)剪切彈簧和4個(gè)彎曲彈簧,每個(gè)彈簧都有相同的系數(shù)和剛性。如下圖所示。
其中是用來減小質(zhì)點(diǎn)運(yùn)動(dòng)速度的,相當(dāng)于空氣阻力;指質(zhì)點(diǎn)的質(zhì)量,單位為千克。代表剛性系數(shù),指時(shí)間步長,表示彈簧的重力系數(shù)。
一開始,每個(gè)質(zhì)點(diǎn)的位置都會(huì)設(shè)置到初始位置,并且所受外力為0,由于P1和P4是固定住的,因此在第一行只需計(jì)算質(zhì)點(diǎn)P2和P3的位置坐標(biāo),之后每一次運(yùn)行Verlet算法時(shí)都要設(shè)置一個(gè)默認(rèn)重力值,施加重力之后質(zhì)點(diǎn)位置坐標(biāo)的計(jì)算用到以下計(jì)算公式:
其它質(zhì)點(diǎn)依此類推。
為了滿足彈簧的約束條件,要給每一個(gè)質(zhì)點(diǎn)施加彈簧張力并計(jì)算它們的位置信息,要使用以下公式:
在上述公式中,表示彈簧長度;表示彈簧的剩余長度系數(shù);P1和P2為連接在一個(gè)彈簧兩端的兩個(gè)質(zhì)子。
依此類推加上所有的彈簧張力。16個(gè)質(zhì)點(diǎn)的初始位置和計(jì)算后位置坐標(biāo)如表1所示。
5.實(shí)驗(yàn)結(jié)果與結(jié)論
程序采用C++語言進(jìn)行編寫,使用Visual Studio 2008進(jìn)行編譯,運(yùn)行硬件環(huán)境配置如下:CPU為Intel Core2 T5870,主頻為2GHz;內(nèi)存為2GB,顯卡為ATI Mobility Radeon X1350,顯存128MB,實(shí)驗(yàn)結(jié)果如圖2所示。
實(shí)驗(yàn)結(jié)果表明,織物的動(dòng)態(tài)模擬效果較為真實(shí),并且運(yùn)行過程連貫順暢,對(duì)硬件配置無太高要求。
參考文獻(xiàn)
[1]祝雙武,郝重陽.一種基于真實(shí)感圖像生成的織物外觀仿真快速算法[J].系統(tǒng)仿真學(xué)報(bào),2008,20(5):1234-1237.
[2]胡江帆,嚴(yán)佩敏,周俊瑋,萬旺根.基于改進(jìn)質(zhì)點(diǎn)彈簧模型下的布料實(shí)時(shí)仿真[J].計(jì)算機(jī)仿真,2008,25(7):184-187.
[3]趙慧青.虛擬服裝設(shè)計(jì)中的布料仿真與碰撞檢測算法研究[D].成都:成都理工大學(xué),2008.
[4]吳夢熊.三維織物動(dòng)態(tài)真實(shí)感仿真技術(shù)研究與實(shí)現(xiàn)[D].上海:東華大學(xué),2008.
[5]Thomas Stumpp,Jonas Spillmann,Markus Becker.A Geometric Deformation Model for Stable Cloth Simulation[J].Workshop on Virtual Reality Interaction and Physical Simulation VRIPHYS,2008.
作者簡介:孔令寅(1986—),陜西西安人,碩士,四川大學(xué)錦江學(xué)院計(jì)算機(jī)學(xué)院教師。