唐 勇,李 玲,劉志蕾,趙 靜,呂夢雅
(1.燕山大學 信息科學與工程學院,河北 秦皇島 066004;2.河北省計算機虛擬技術與系統(tǒng)集成重點實驗室,河北 秦皇島 066004)
布料的仿真是計算機圖形學研究的重要內(nèi)容,但是由于布料類柔性織物的易變形性和靈活性,碰撞處理成為了布料仿真的主要瓶頸之一。碰撞一定會伴隨摩擦的產(chǎn)生,所以正確考慮摩擦接觸,對布料的仿真有著重要的作用。
2002年斯坦福大學的Bridson等[1]提出了一種方法,使用庫倫摩擦模型來計算摩擦力的大小,根據(jù)彈簧排斥力的大小計算彈性力,然后用彈性力來評估庫倫摩擦并且將排斥力與“撞擊區(qū)”故障保護相結合,通過連續(xù)碰撞檢測來檢測碰撞的剛化區(qū),這是最經(jīng)典的處理摩擦接觸的方法,同時也是本文理論研究的基礎。2008年康奈爾大學的Kaldor等[2]針對針織布結構中的阻尼和摩擦滯后效應的問題提出了三組阻尼模型的方法,分別是質(zhì)量比例阻尼、接觸阻尼、非剛性運動阻尼,但是由于未采用適當?shù)哪Σ聊P?,所以導致計算結果不精確。2010年愛荷華大學的Williams等[3]提出了一種織物本構模型,能夠捕捉各向異性、非線性和滯后的主要特征,并且可以在非線性、薄殼體、大形變、有限元框架中實現(xiàn)一般的穿孔交互式建模,但是這種建模缺失了內(nèi)部摩擦,計算結果產(chǎn)生偏差導致系統(tǒng)穩(wěn)定性較弱。2011年法國國立計算機及自動化研究院的Daviet等[4]引入了一種有效的求解器將精確的庫侖摩擦考慮在內(nèi),然而,布料的模擬計算效率較低且實時性弱。2013年奧地利科技學院的Miguel等[5]提出了一種實時更新參數(shù)的內(nèi)摩擦模型Dahl模型,并且證明這個模型能夠有效地解決布料滯后的現(xiàn)象。但是該模型對于具有非常低的彎曲剛度和密度比的織物來說,彎曲摩擦估計結果不精確,導致實驗實時性差。2013年北京航空航天大學的王華民等[6]開發(fā)了一個摩擦測量裝置,通過從現(xiàn)實世界捕獲的摩擦數(shù)據(jù)來推導出真實反映織物的復雜摩擦特性的摩擦模型,但是這種模型不能很好地捕捉靜態(tài)摩擦,所以對布料仿真摩擦接觸分析不精確。2017年賓夕法尼亞大學的Jiang等[7]使用物質(zhì)點法改進拉格朗日方法,將布料建模為非牛頓流體并通過非光滑本構法自動考慮摩擦接觸,但布料模擬的計算效率較低。2018年浙江大學的唐敏等[8]提出了一種基于GPU的交互布料模擬的增量碰撞處理算法,利用基于優(yōu)化的求解器的連續(xù)迭代的空間和時間的相干性來進行碰撞響應計算,但是他們直接采用Bridson的摩擦模型,并沒有考慮對摩擦模型進行改進。2018年加州大學的Guo等[9]采用了離散殼模型,利用Jiang等[7]的方法處理接觸和碰撞,利用背景體積網(wǎng)格有效地處理復雜碰撞材料之間的接觸力,雖然能夠解釋布料接觸與精確的庫倫摩擦,但是在碰撞處理過程計算效率低。2018年明尼蘇達大學的Li等[10]提出了一種新的方法,使用物質(zhì)點方法和細分有限元法的組合模擬摩擦接觸的薄殼,但是很難保證實驗的實時性。2019年胡安卡洛斯國王大學的Mickeal等[11]通過直接解決混合線性互補問題并省略了線性互補問題矩陣的構造來解決碰撞接觸問題,他們建議使用共軛殘差求解器作為碰撞響應系統(tǒng)的主干可以精確地處理摩擦,但是實際情況中摩擦處理替換為共軛殘差求解器很難實現(xiàn),由于不能精確地處理摩擦導致布料模擬穩(wěn)定性弱。
綜上可知,布料的仿真在碰撞和摩擦接觸方面取得了很大的進步,但是在布料模擬過程中,計算效率低、布料運動穩(wěn)定性差都成為了目前所要解決的問題?;诖?,本文提出了Dahl模型雙向摩擦特性的布料碰撞摩擦接觸處理方法。與之前的方法相比,改進后的Dahl摩擦模型能夠進行準確的碰撞檢測和摩擦接觸,保證計算效率的同時增強了布料運動的穩(wěn)定性。
為了更好地實現(xiàn)布料的真實感與實時性模擬,本文采用正三角形劃分織物,在Choi等[12]提出的質(zhì)點彈簧模型的基礎上忽略未產(chǎn)生影響的剪切彈簧力,利用三角形的穩(wěn)定性保持織物穩(wěn)定,并采用對布料進行建模。采用該質(zhì)點彈簧模型對布料進行建模,簡單高效,且滿足實時性需求?;谌切尉W(wǎng)格的質(zhì)點彈簧模型的結構如圖1所示。
圖1 三角網(wǎng)格質(zhì)點彈簧結構Fig.1 Triangular mesh mass spring structure
本文在布料質(zhì)點受力的分析中采用牛頓第二運動定律,對布料質(zhì)點的質(zhì)量、加速度以及受到的力進行了描述,即
(1)
式中,x表示質(zhì)點的位置矢量,是實驗的求解目標;m表示質(zhì)點的質(zhì)量;Finter(x,t)表示質(zhì)點所受內(nèi)力;Fexter(x,t)表示質(zhì)點所受外力。本文中質(zhì)點所受的力是隨時間和位置所變化的。
如何有效解決超彈現(xiàn)象也是布料仿真中所面臨的問題。在實際情況中,布料的受力與變形之間不僅是簡單的線性關系,當布料的彈性形變超出一定的范圍,就會產(chǎn)生復雜的非線性現(xiàn)象。
為了改善超彈現(xiàn)象,更加真實地模擬布料的受力情況,本文引入形變系數(shù)
B=|xij-d|/d,
(2)
通過設置形變系數(shù)的最大值Bmax來檢測布料彈性的形變系數(shù)B。若形變系數(shù)超過了最大值,說明彈簧被過度的拉伸或者壓縮,則重新調(diào)整彈簧d的長度,使得B=Bmax成立。其中d為不同彈性布料對應的自然長度,xij為彈簧從質(zhì)點i到質(zhì)點j的長度。
Dahl模型是一個連續(xù)模型,它是由一個非線性方程和一個力的輸出方程所構成的:
(3)
其中,z是摩擦模型的內(nèi)部狀態(tài);v是相對速度;σ0是剛度系數(shù);而F和Fc就是摩擦力和庫侖摩擦力。根據(jù)式(3)可知,穩(wěn)態(tài)時F=Fcsgn(v),即摩擦力等于庫侖摩擦力Fc。停滯時,|F| 本文通過改變摩擦特性,控制速度和速度變量之間的關系,對Dahl模型做出如下改進: (4) 其中h(|v|)為符號函數(shù),取值如下: 式中,v為相對速度;sgn(v)表示符號函數(shù);Fs為靜摩擦力;σ0為剛度系數(shù);σ1為微分系數(shù);Fc為庫侖摩擦力;z0為外力作用下的位移;Δv為靜摩擦力對應的速度段,Δv=0.001 m/s。 改進后的Dahl模型更好地模擬布料的摩擦接觸現(xiàn)象而且同時增強了布料運動的穩(wěn)定性。 在布料模擬的過程中,為了增加真實感,常常給布料附加各種外力,使其與周圍的物體發(fā)生碰撞。碰撞檢測算法總體劃分為靜態(tài)干涉檢測算法和動態(tài)碰撞檢測算法,但考慮到仿真的實時性,大多采用動態(tài)碰撞檢測算法,其中比較經(jīng)典的算法有層次包圍盒法和空間分割法??紤]到本文選用的球體和桌子作為碰撞對象,所以采用簡單易行的檢測方法。若碰撞對象為球體,則要判斷任意質(zhì)點到球心的距離是否小于球體的半徑。若碰撞剛體為桌子時,則要檢測是否有質(zhì)點落在桌子所處空間的區(qū)域內(nèi)。 圖2為傳統(tǒng)的二分法處理碰撞問題的示意圖,其核心是不斷地調(diào)整時間步長。但是在仿真中為了得到精確的近似解往往需要大量的迭代,造成實驗的實時性差。所以本文提出一種改進的二分法。 圖2 二分法處理碰撞問題示意圖Fig.2 Schematic diagram of the binary method fordealing with collision problems 圖3 改進二分法流程圖Fig.3 Improved dichotomy flow chart 1) 首先確定一個閾值m,作為碰撞檢測時所允許的誤差值,當質(zhì)點與剛體表面的距離小于m時認為發(fā)生碰撞,否則認為沒有發(fā)生碰撞。 4) 使用同樣的方法重復以上步驟直到質(zhì)點與剛體的距離小于假定的閾值為止。 圖3為改進二分法的流程圖。其中,k表示當前檢測質(zhì)點;al表示距當前質(zhì)點位置距離最小值;ah表示距當前質(zhì)點位置距離最大值;bl表示第一次優(yōu)化后距當前質(zhì)點位置距離最小值;bh表示第一次優(yōu)化距當前質(zhì)點位置距離最大值。 基于質(zhì)點-彈簧的布料建模,本文采用改進的排斥力模型處理布料之間的碰撞。如果檢測到質(zhì)點與剛體發(fā)生碰撞時,則需要沿著碰撞面的法線方向添加一個與速度方向相反的排斥力。若與其碰撞的剛體是桌子時,排斥力的大小為常數(shù),若為球體時排斥力為質(zhì)點與球心距離的函數(shù): Fp=g(Qs-Qc), (6) 其中,F(xiàn)p為排斥力,Qs為發(fā)生碰撞質(zhì)點的位置,Qc為碰撞球體球心的位置,g是映射函數(shù)。本文考慮到布料自碰撞時的摩擦現(xiàn)象,本文將在碰撞質(zhì)點速度相反的方向施加摩擦力,減少碰撞次數(shù),提高布料運動的穩(wěn)定性。 本文實驗基于Windows 8 64位操作系統(tǒng),使用Unity3D開發(fā)平臺建立了布料仿真模型。硬件環(huán)境為:Intel Core i7 4790 3.60GHz,16 G RAM,顯卡為NVIDIA GeForce GTX 750 Ti。 如圖4所示,圖4(a)為未引入形變系數(shù)的效果圖,被固定的兩端明顯的過度拉伸,圖4(b)為本文引入形變系數(shù)的效果圖,符合實際布料的懸掛效果,由實驗結果可得,通過引入形變系數(shù)有效地解決了超彈現(xiàn)象增強了布料模擬的真實性。 圖4 超彈現(xiàn)象的實驗對比圖Fig.4 Experimental comparison chart of hyperelastic phenomenon 如圖5所示,圖5(a)為不同風場相同材質(zhì)(絲綢)布料與桌子之間的摩擦;圖5(b)為相同風場不同材質(zhì)(絲綢、錦緞、棉麻)的布料與桌子摩擦的效果(μ為不同材質(zhì)布料的摩擦系數(shù),摩擦系數(shù)影響公式(5)中庫倫摩擦力Fc的大小)。從圖中可以看出,在風場強度q的作用下,本文的方法不僅能夠正確模擬布料與剛體之間的摩擦而且避免了布料自碰撞所產(chǎn)生的穿透現(xiàn)象。 圖5 不同材質(zhì)和風場布料與圓桌交互效果圖Fig.5 Different materials and wind field cloth and round table interaction diagram 圖6分別展示了文獻[10]和本文的方法模擬的剛體與連衣裙摩擦交互效果,文獻采用的是庫倫摩擦模型,而本文采用的是雙向摩擦特性的Dahl摩擦模型來進行摩擦接觸處理,從視覺上可以看出,本文的方法更能夠準確地模擬變化的摩擦系數(shù)μ的效果。 圖6 人體模型與布料摩擦接觸效果圖Fig.6 Rubbing contact effect diagram between human body model and cloth 圖7為本文與文獻[14]的對比圖,在模擬布料與小球的碰撞實驗中,文獻所使用是改進的基元相交檢測算法與能量耗散的方法來處理布料與物體的碰撞問題,本文通過插值法的思想改進積分時間步長的二分法進行了碰撞響應處理,很明顯本文實驗效果更加逼真細膩。表1描述了兩個對比實驗場景中布料的屬性參數(shù)。在與文獻[12]對比時,文獻中只給出了頂點與接觸點的平均數(shù)目沒有給出面片數(shù),所以采用相同布料分辨率作為依據(jù),由于本文在實驗過程中整合了大量的計算,簡化了計算過程,所以迭代次數(shù)存在較大差距。在布料與小球碰撞實驗中,通過不同的方法模擬相同實驗對比得到,本文方法在實時性上更具有優(yōu)勢。 圖7 本實驗場景與文獻[14]的對比圖Fig.7 Comparison between the experimental scene and the literature [14] 表1 不同方法的實驗性能對比表 Tab.1 Comparison of experimental performance of different methods 本文提出了一種基于雙向摩擦特性的Dahl模型對布料摩擦接觸進行模擬仿真的方法,通過采用改進的Dahl模型和二分法使得本文不僅有效地處理了布料與剛體之間的碰撞問題,還降低了計算量,提高了仿真的速度,在人體與布料摩擦的試驗中幀率增長了47%,在布料與小球碰撞的實驗中幀率增長了10%。同時通過因為形變系數(shù)改善了布料的超彈現(xiàn)象,在超彈現(xiàn)象的實驗中明顯可以看出,改進后的布料仿真更具有真實感。 目前只考慮了各向同性的布料交互的情形,今后會繼續(xù)將本文的方法拓展到各向異性的布料,并實現(xiàn)各向異性布料的摩擦接觸。3 碰撞響應
3.1 時間步長優(yōu)化二分法的碰撞響應
3.2 碰撞響應中的力學模型
4 實驗結果與分析
5 結論