一種快速準(zhǔn)確的非光滑多體碰撞仿真動(dòng)畫方法
【專利摘要】本發(fā)明涉及一種快速準(zhǔn)確的非光滑多體碰撞仿真動(dòng)畫方法,其步驟包括:檢測出剛體多體碰撞過程的所有碰撞接觸點(diǎn);計(jì)算每個(gè)物體作為整體在碰撞過程中受到的不含摩擦的總接觸沖量,進(jìn)而對其進(jìn)行分解,得到在每個(gè)接觸點(diǎn)上的法向接觸沖量分布;通過庫倫摩擦定律求解出每個(gè)接觸點(diǎn)產(chǎn)生的切向摩擦沖量;將法向接觸沖量與切向摩擦沖量進(jìn)行耦合計(jì)算,得到總接觸沖量,進(jìn)而利用該總接觸沖量進(jìn)行速度和位置積分,以更新物體的速度和位置;循環(huán)進(jìn)行上述步驟,生成多體碰撞的每一時(shí)間步的動(dòng)畫。本發(fā)明可以以較低的時(shí)間開銷對剛體多體接觸碰撞的大規(guī)模場景進(jìn)行仿真與動(dòng)畫生成,能夠得到快速、準(zhǔn)確且穩(wěn)定的仿真結(jié)果。
【專利說明】一種快速準(zhǔn)確的非光滑多體碰撞仿真動(dòng)畫方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于計(jì)算機(jī)圖形學(xué)【技術(shù)領(lǐng)域】,具體涉及一種快速準(zhǔn)確的非光滑多體相互碰 撞的計(jì)算機(jī)仿真動(dòng)畫方法。
【背景技術(shù)】
[0002] 基于物理學(xué)原理的計(jì)算機(jī)仿真動(dòng)畫是圖形學(xué)領(lǐng)域的一個(gè)重要分支,其中剛體動(dòng)力 學(xué)仿真問題是最為困難的問題之一。一般來說,大規(guī)模剛體場景的計(jì)算機(jī)仿真難以做到既 準(zhǔn)確又快速,因?yàn)閯傮w仿真需要保證嚴(yán)格的非穿透約束。同時(shí),剛體仿真的結(jié)果對接觸點(diǎn)的 信息非常敏感,因此一個(gè)微小的變化就有可能破壞整個(gè)非穿透約束。而當(dāng)摩擦力被加進(jìn)剛 體動(dòng)力學(xué)仿真系統(tǒng)中后,在保證非穿透約束的前提條件下準(zhǔn)確地求解作用于物體之上的摩 擦力更是一件十分困難的事情。
[0003] 剛體仿真領(lǐng)域,最開始采用的是懲罰力算法[HAHN,J. K. 1988. Realistic animation of rigid bodies. SIGGRAPH Comput.Graph.22,4(June),299 - 308·]。懲罰 力算法通過兩個(gè)物體的穿透深度計(jì)算懲罰力,以此將兩個(gè)相交的物體分開。這個(gè)算法非 常直觀,但是缺乏穩(wěn)定性。當(dāng)為整個(gè)系統(tǒng)施加懲罰力時(shí),非穿透約束往往難以保證。目前 最常用的方法是將整個(gè)剛體系統(tǒng)建模成一個(gè)線性互補(bǔ)規(guī)劃(LCP)問題[BARAFF,D. 1989. Analytical methods for dynamic simulation of non-penetrating rigid bodies. SIGGRAPH Comput. Graph. 23, 3 (July),223 - 232.],并使用諸如投影高斯-賽德爾法 (PGS)或雅各布法(Jacobi-based)等迭代算法對其進(jìn)行求解[MURTY,K. 1988. Linear complementarity, linear and nonlinear programming. Sigma series in applied mathematics. Heldermann.]。然而這些迭代求解算法非常耗時(shí)。為了能對大規(guī)模場景進(jìn)行 快速仿真,許多研究者對LCP模型進(jìn)行了改進(jìn)。除此之外,快速非光滑動(dòng)力學(xué)(FFD)是另一 種用于剛體仿真的算法[KAUFMAN, D. M.,EDMUNDS, T.,AND PAI, D. K. 2005. Fast frictional dynamics for rigid bodies. ACM Trans. Graph. 24, 3 (July), 946 - 956.]。它將每個(gè)物體的 接觸問題建模成一個(gè)二次規(guī)劃(QP)問題并求解,得到了快速且穩(wěn)定的結(jié)果。但是FFD在計(jì) 算物體上每個(gè)接觸點(diǎn)的沖量分布時(shí)采用了錯(cuò)誤的算法,由此得到的摩擦力是存在問題的。 因此,F(xiàn)FD無法仿真出一些由于摩擦力引起的細(xì)節(jié)現(xiàn)象,甚至?xí)霈F(xiàn)一些嚴(yán)重錯(cuò)誤的仿真結(jié) 果。舉例來說,F(xiàn)FD計(jì)算出的由于相對運(yùn)動(dòng)所導(dǎo)致的摩擦力與現(xiàn)實(shí)存在嚴(yán)重差異。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明針對上述問題,提出一種新型的剛體多體碰撞的計(jì)算機(jī)仿真動(dòng)畫方法。在 一個(gè)由大量物體彼此同時(shí)相互運(yùn)動(dòng)和碰撞的仿真動(dòng)畫場景中,該方案從一個(gè)物體整體所受 到的總接觸沖量出發(fā)(不含摩擦),設(shè)計(jì)一個(gè)用于計(jì)算其表面每個(gè)接觸點(diǎn)上沖量分布情況 的沖量分解算法;在此基礎(chǔ)上計(jì)算每個(gè)接觸點(diǎn)的摩擦沖量,最后再求解每個(gè)接觸點(diǎn)所受到 的接觸沖量和摩擦沖量的耦合,從而完整獲得物體所受到的外力并進(jìn)而求出其新的速度和 位移。該算法能夠得到快速、準(zhǔn)確且穩(wěn)定的仿真結(jié)果,可以對多種具有摩擦(包括靜摩擦和 動(dòng)摩擦)作用的剛體多體接觸碰撞所產(chǎn)生的細(xì)節(jié)現(xiàn)象進(jìn)行仿真。與采用PGS的LCP模型相 t匕,該算法速度上更快,并且更加易于并行。
[0005] 具體來說,本發(fā)明采用的技術(shù)方案如下:
[0006] -種非光滑多體多點(diǎn)接觸碰撞的計(jì)算機(jī)仿真動(dòng)畫方法,其步驟包括:
[0007] 1)對剛體多體碰撞過程進(jìn)行碰撞檢測,檢測出所有的碰撞接觸點(diǎn);
[0008] 2)計(jì)算每個(gè)物體作為整體在碰撞過程中受到的不含摩擦的總接觸沖量;
[0009] 3)對步驟2)得到的物體總接觸沖量進(jìn)行分解,得到在每個(gè)接觸點(diǎn)上的法向接觸 沖量分布;
[0010] 4)通過庫倫摩擦定律求解出每個(gè)接觸點(diǎn)產(chǎn)生的切向摩擦沖量;
[0011] 5)將步驟3)得到的法向接觸沖量與步驟4)得到的切向摩擦沖量進(jìn)行耦合計(jì)算, 得到總接觸沖量;
[0012] 6)利用步驟5)得到的含摩擦的總接觸沖量進(jìn)行速度和位置積分,以更新物體的 速度和位置;
[0013] 7)循環(huán)進(jìn)行上述步驟,生成多體碰撞的每一時(shí)間步的動(dòng)畫。
[0014] 進(jìn)一步地,步驟2)所述總接觸沖量的計(jì)算方法是:
[0015] 2. 1)對于整個(gè)剛體多體碰撞體系中的第i個(gè)物體的第k個(gè)接觸點(diǎn),根據(jù)FFD方法 為其twist構(gòu)建一個(gè)se (3)空間中約束空間T,T根據(jù)所有接觸點(diǎn)的法向和速度構(gòu)建而成:
【權(quán)利要求】
1. 一種快速準(zhǔn)確的非光滑多體碰撞仿真動(dòng)畫方法,其步驟包括: 1) 對剛體多體碰撞過程進(jìn)行碰撞檢測,檢測出所有的碰撞接觸點(diǎn); 2) 計(jì)算每個(gè)物體作為整體在碰撞過程中受到的不含摩擦的總接觸沖量; 3) 對步驟2)中得到的物體總接觸沖量進(jìn)行分解,得到在每個(gè)接觸點(diǎn)上的法向接觸沖 量分布; 4) 通過庫倫摩擦定律求解出每個(gè)接觸點(diǎn)產(chǎn)生的切向摩擦沖量; 5) 將步驟3)得到的法向接觸沖量與步驟4)得到的切向摩擦沖量進(jìn)行耦合計(jì)算,得到 總接觸沖量; 6) 利用步驟5)得到的含摩擦的總接觸沖量進(jìn)行速度和位置積分,以更新物體的速度 和位置; 7) 循環(huán)進(jìn)行上述步驟,生成多體碰撞的每一時(shí)間步的動(dòng)畫。
2. 如權(quán)利要求1所述的方法,其特征在于,步驟2)所述總接觸沖量的計(jì)算方法是: 2. 1)對于整個(gè)剛體多體碰撞體系中的第i個(gè)物體的第k個(gè)接觸點(diǎn),根據(jù)FFD方法為其 twist構(gòu)建一個(gè)se (3)空間中的約束空間T,T根據(jù)所有接觸點(diǎn)的法向和速度構(gòu)建而成:
其4
是第i個(gè)物體上第k個(gè)接觸點(diǎn)的法向,Μ是整個(gè)剛體系統(tǒng)的質(zhì)量矩陣,d k 是該點(diǎn)在完全非彈性碰撞條件下,兩個(gè)物體所達(dá)到的共同速度,C(q)代表其所有接觸點(diǎn)的 集合;通過強(qiáng)制所有接觸點(diǎn)的速度不小于dk,約束空間T中的所有twist都滿足非穿透約 束; 2. 2)將物體i的碰撞前twist1 Φ_投影到約束空間T上,得到其碰撞后的twist1 Φ + :
通過對碰撞前后的twist作差求出不含摩擦的總接觸沖量,
3. 如權(quán)利要求2所述的方法,其特征在于,步驟3)對物體整體受到的總接觸沖量進(jìn)行 分解的方法是: 3. 1)設(shè)立接觸沖量分布的正確性標(biāo)準(zhǔn),即:對于一組接觸點(diǎn)上的法向接觸沖量X,如果 它們的和V等于已知的總接觸沖量8卩Y = y,則認(rèn)為X是該總接觸沖量在所有接觸點(diǎn) 上的一個(gè)合理分布; 3.2)根據(jù)上述標(biāo)準(zhǔn)進(jìn)一步對沖量分布進(jìn)行計(jì)算,對于接觸點(diǎn)k,使用ak來表示該點(diǎn)處 法向接觸沖量的大小,進(jìn)而可以得到如下方程:
3. 3)根據(jù)Y的定義,抽象出系數(shù)矩陣C以將已知量和未知量分開,C是已知量,而X是 未知的待求量:
其中η。是接觸點(diǎn)的個(gè)數(shù); 3. 4)根據(jù)步驟3. 2)和步驟3. 3的公式,將步驟3. 1)的正確性標(biāo)準(zhǔn)的方程推導(dǎo)成如下 形式:Cx = 從而求解得到X,即求出每個(gè)接觸點(diǎn)的法向沖量。
4. 如權(quán)利要求3所述的方法,其特征在于,步驟4)計(jì)算每個(gè)接觸點(diǎn)產(chǎn)生的摩擦沖量的 方法是: 4. 1)對于接觸點(diǎn)k,將在該點(diǎn)兩個(gè)物體的相對速度
用作計(jì)算摩擦沖量的方向sk,sk 通過將^投影到切平面上以計(jì)算得出,即
4. 2)計(jì)算物體上一個(gè)點(diǎn)在給定作用力方向時(shí)所表現(xiàn)出來的等效質(zhì)量:
然后采用等效質(zhì)量來獲得能夠盡可能抵消相對運(yùn)動(dòng)的最大摩擦沖量:
4. 3) a k為接觸點(diǎn)的法向沖量,μ為摩擦系數(shù),第i個(gè)物體上第k個(gè)接觸點(diǎn)實(shí)際受到的 摩擦沖量大小為:I I fk I Leal = min (I I fk I I,μ a k); 4. 4)對算出的每個(gè)點(diǎn)的摩擦沖量進(jìn)行求和,得出總摩擦沖量:
5. 如權(quán)利要求4所述的方法,其特征在于,步驟5)對步驟3)中計(jì)算出的法向接觸沖量 與步驟4)中計(jì)算出的切向摩擦沖量進(jìn)行耦合計(jì)算時(shí),采用快速投影算法來對其進(jìn)行近似 求解;首先將摩擦沖量T投影到約束空間T中,得到最終的摩擦沖量 然后將各個(gè)部分的和相加,可以得到物體最終的twist :
其中ε e [〇,1]代表碰撞的恢復(fù)系數(shù);通過上面的投影操作,將限定在了約束空 間T中,以滿足非穿透約束,獲得較高的穩(wěn)定性。
【文檔編號】G06T13/00GK104217453SQ201410498253
【公開日】2014年12月17日 申請日期:2014年9月25日 優(yōu)先權(quán)日:2014年9月25日
【發(fā)明者】張?zhí)煜? 李勝, 汪國平 申請人:北京大學(xué)