一種基於能量平衡的柔性體碰撞處理方法
2023-12-11 15:36:57 3
專利名稱:一種基於能量平衡的柔性體碰撞處理方法
技術領域:
本發明涉及柔性體碰撞仿真技術領域,尤其涉及一種基於能量平衡的柔性體碰撞 處理方法。
背景技術:
碰撞問題是柔性體仿真的關鍵問題之一。柔性體碰撞包括兩種類型一類是柔性 體與外界物體的碰撞,如衣服與身體的碰撞,桌布與桌子的碰撞;另外一類是由於其柔軟的 特性所致,柔性體的不同部分之間有不同運動,不同部分之間會產生自碰撞。而柔性體碰撞問題,特別是柔性體自碰撞問題一直以來都是研究的熱點問題,在 近幾年的Siggraph等頂級會議期刊中都有相應論文對碰撞的穿透、修復,全局檢測等方面 進行了深入的研究。該問題受到研究人員關注的原因有兩個方面,一方面碰撞檢測和處理 是柔性體模擬速度的瓶頸,在每一個時間步都要對全部的質點進行碰撞判斷。另外一方面, 柔性體的柔軟特性決定了不僅要判斷外界碰撞,同時要處理自碰撞的問題。碰撞問題主要由兩大部分組成1.判斷物體之間是否發生碰撞,即碰撞檢測問題。在碰撞檢測過程中同時存在著 如何進行加速的問題。2.檢測到碰撞的存在,採取相應的措施避免,即碰撞響應問題。在計算機圖形動畫、基於物理模型的仿真和機器人規劃等領域,碰撞問題受到了 研究人員的廣泛關注,針對上述兩個方面的研究也得到了一些研究成果。針對柔性體仿真 領域,也存在一系列被廣泛引用的研究成果。Provot針對碰撞的基本元素進行研究,提出通過空間劃分來加速碰撞檢測;將碰 撞的基本元素分為「點_面」碰撞和「線_線」碰撞,並提出了碰撞影響域的概念,通過將一 塊碰撞的區域作為一個剛體進行處理,有效處理了自碰撞的一部分問題。本發明的碰撞系統即是在此基礎上進行改進。在此之後,BridSon提出了採用衝 量(Impulse)進行處理的思想,同時對於Provot論文中的影響域進行改進,並採用了細分 曲面的方法對柔性體進行進一步細分建模,得到了較好的效果。本發明實施方式綜合了這 種剛體碰撞域的碰撞響應和採用衝量的碰撞響應。對於碰撞問題,本發明的方法首先進行空間劃分預處理,採用了空間層次包圍盒 的方法,將空間劃分為各子區域,在每個子區域內進行碰撞檢測。所有的碰撞檢測都可以分 為兩類基本類型,「點一面」檢測以及「線一線」檢測。針對點面檢測,本發明採用了 Provot 的方法,將檢測問題轉化為向量積,通過求解方程求得碰撞發生的時間。針對「線--線」檢測,傳統的方法是將兩條線是否相交轉化為向量積之後轉化為 一個三次方程的求解。採取此方法針對一般的方程需要採用窮舉或迭代的方法進行,計算 複雜低效。本發明針對此基本問題進行改進,提出了基於相對運動,將線線檢測問題轉化為 線和四面體相交的問題,從而只需使用經典的線面相交判斷算法就可以獲得線線檢測,而 不需求解三次方程。針對碰撞響應問題,本發明綜合採用了約束、衝量以及碰撞影響域的三種碰撞響應處理機制。本發明提出了一種新穎的處理方式,用能量作為平衡控制的元素,使用平衡控制 思想,能夠有效抑制碰撞過程中發生的能量突變,增強系統穩定性。通過以上幾種措施,本發明柔性體仿真系統能夠較好地處理碰撞。
發明內容
為了克服上述缺陷,本發明提出了一種基於能量平衡的柔性體碰撞處理方法,所 述方法包括在空間層次包圍盒內部依次進行基於向量積的「點-面」碰撞檢測和基於四面體 的「線-線」碰撞檢測;當檢測到碰撞時,判斷碰撞發生的類型如果是柔性體與模擬環境中的剛體模型碰撞,則進行約束碰撞響應處理,在線性 系統中添加碰撞之間的約束;如果是柔性體之間的碰撞,將所檢測到的臨近碰撞數量與預定值進行比較,如果 所檢測到的臨近碰撞的數量小於預定值,則進行衝量碰撞處理;如果所檢測到的臨近碰撞 的數量大於等於預定值,則將鄰近的多個碰撞作為統一的剛體域處理,並將剛體域作為一 個碰撞與剛體域外的其它碰撞同時進行衝量碰撞處理;利用能量平衡來控制碰撞響應;所述利用能量平衡來控制碰撞響應具體包括通過能量函數判斷線性系統是否處於平衡狀態;當線性系統處於平衡狀態時,針對壓縮彈簧計算擾動位移;進行狀態變量的設定,通過碰撞擾動狀態變量來管理擾動;根據狀態變量,設置線性系統約束的控制矩陣S矩陣和Z矩陣,使用隱式求解方 法,將擾動加入線性系統方程。其中,所述包圍盒為基於六面體的包圍盒,所述基於六面體的包圍盒為能夠包圍 碰撞體且邊平行於坐標軸的最小六面體。其中,基於六面體的包圍盒的構造方法為沿碰撞體局部坐標系統的軸向(X,Y, Z),按照由上至下的遞歸細分方式形成基於包圍盒的二叉樹;在每一次遞歸過程中,要求取最小的包圍盒,沿所選擇的剖分面將碰撞體分為正 負兩半,並將所對應的原始幾何元素分別歸屬正、負兩邊;遞歸細分一直進行到每一個葉子節點只包容一個原始幾何元素為止,具有n個原 始幾何元素的包圍盒樹包含n個非葉子節點和n個葉子節點。其中,基於六面體的包圍盒的相交檢測方法為兩個樹A和B之間雙重遞歸遍歷的 過程對兩棵樹A和B,若發現樹A根節點的包圍盒與樹B內部節點的包圍盒不相交,則 停止向下遍歷;如果遍歷能達到樹B的葉節點,再用該葉節點遍歷樹A ;如果能到達樹A的 葉節點,則進一步進行基本元素之間的相交測試;根據兩個包圍盒相交若且唯若它們在三 個坐標軸上的投影區間均相交這一特性,可以將三維求交問題轉化為一維求交問題。其中,基於六面體的包圍盒的更新方法為當模擬的柔性體發生移動、旋轉和變形
5之後,需要對包圍盒進行更新,根據包圍盒樹的定義,可以獲得包圍盒六面體的8個頂點, 對這8個頂點進行相應旋轉和平移變化,並根據變化後的頂點計算新包圍盒。其中,碰撞響應機制包括基於約束的碰撞響應,基於衝量的碰撞響應以及基於剛 體動力學影響域的碰撞響應。其中,基於約束的碰撞響應將碰撞檢測得到的結果以約束方式加入到線性系統方 程中,限制質點的運動,從而避免了碰撞的產生。其中,基於衝量的碰撞響應通過對碰撞檢測得到的節點施加衝量,影響節點速度, 避免碰撞的產生。其中,基於剛體動力學影響域的碰撞響應包括將多個節點合成一個大的區域,在 此區域內的節點互相影響,作為一個統一的剛體進行處理。其中,基於四面體的「線_線」碰撞檢測為,根據運動的相對性原理,將碰撞檢測轉 化為直線與四面體相交的判斷。
下面通過參考附圖來描述本發明的實施方式,其中圖1為本發明實施方式中的碰撞檢測的基本元素;圖2為本發明實施方式中的邊邊檢測過程中形成的四面體;圖3為本發明實施方式中的碰撞部分處理流程;圖4為本發明實施方式中的碰撞部分處理流程;
具體實施例方式根據本發明具體實施方式
利用空間層次包圍盒來進行碰撞檢測。針對剛體的碰撞 問題,主要包括劃分空間區域、三角面片檢測和響應等方法。現有技術中,最基本的碰撞檢測方法要遍歷所有的基本點面,速度很慢。在實際處 理中為了提高速度,對最原始的方法進行了簡化,總體上分為空間分解法和層次包圍盒法。 這兩種方法的基本思想都是「分而治之」。本發明中採用了層次包圍盒的方法。包圍盒方法的基本步驟是通過建立對象的包圍盒層次來逐漸逼近對象的幾何模 型,從而用體積略大而形狀簡單的包圍盒代替複雜的幾何對象參加碰撞檢測,先對物體的 包圍盒進行粗略檢測,當包圍盒相交時其包圍的幾何體才有可能相交;若包圍盒不相交,其 包圍的幾何體一定不相交。利用層次包圍盒法可以排除大量不可能相交的幾何體和幾何部 位,從而快速找到相交的幾何部位。包圍盒按照其結構形狀可以分為球型的包圍盒以及立方體的包圍盒。具體又 包括包圍球、沿坐標軸的包圍盒(Axis-Aligned Bound ing Box)、沿任意方向包圍盒 OBB (Oriented Bounding Box)、k_D0P 散方向包圍盒(Discrete Orientation Polytope)。球形包圍盒法(spheres)是一種最簡單的碰撞檢測法,它是用球形來近似地表示 物體或物體的一部分,然後再判斷這些包圍球是否相交。這樣僅需要測試兩個球體中心的 距離是否小於它們的半徑和,當小於半徑時表示發生了碰撞。如果用中心點距離的平方與 半徑和的平方進行比較,效果更好,這樣就可以在計算距離時除去拙劣的開方運算。但是, 簡單的運算也導致了精確度的降低。
本發明實施方式基於六面體的包圍盒進行碰撞檢測,即沿坐標軸包圍盒AABB(axis-aligned bounding boxes)。本發明所採用的方法簡單有效,不需要進行複雜運 算就能夠高效獲得劃分。定義包圍盒為能夠包圍碰撞體且邊平行於坐標軸的最小六面體, 因此描述一個包圍盒僅需六個標量。首先進行包圍盒的構造在構造包圍盒時,需沿著碰撞體局部坐標系統的軸向 (X,Y,Z)構造,所以所有的包圍盒都有一致的方向。而由此形成的樹是基於包圍盒的二叉 樹,按照由上至下的遞歸細分方式構造生成。在每一次遞歸過程中,要求取最小的包圍盒, 需沿所選擇的剖分面將碰撞體分為正負兩半,並將所對應的原始幾何元素(如三角面)分 別歸屬正、負兩邊,整個遞歸過程類似於空間二叉剖分,只是每次剖分的對象是包圍盒,而 不是空間區域。遞歸細分一直要進行到每一個葉子節點只包容一個原始幾何元素為止,所 以具有η個原始幾何元素的包圍盒樹具有η個非葉子節點和η個葉子節點。然後執行相交檢測樹之間的碰撞檢測是一個雙重遞歸遍歷的過程。對兩棵樹A 和B,若發現樹A根節點的包圍盒與樹B內部節點的包圍盒不相交,則停止向下遍歷。如果 遍歷能達到樹B的葉節點,再用該葉節點遍歷樹Α。如果能到達樹A的葉節點,則進一步進 行基本元素之間的相交測試。根據兩個包圍盒相交若且唯若它們在三個坐標軸上的投影區 間均相交這一特性,可以將三維求交問題轉化為一維求交問題。而對一維求交問題,則可採 用Axes Test)法。SAT無需求交計算,只需比較兩個包圍盒分別在三個軸 向上投影的重疊情況,即可得出相交測試結果,非常簡單,最多只需要六次比較運算就可以 完成相交檢測。最後進行包圍盒更新當模擬的柔性體發生移動、旋轉和變形之後,需要對包圍盒 進行更新,根據其包圍盒樹的定義,可以獲得其六面體的8個頂點,對這8個頂點進行相應 旋轉和平移變化,並根據變化後的頂點計算新包圍盒。當模擬柔性體發生變形時,需要重新 計算發生變形的葉節點的包圍盒,之後利用變形葉節點新的包圍盒來重新計算其父類節點 白勺包圍盒。父節點包圍盒白勺求法為設 XmaxI 『 Xminl 『 Ymaxl' Yminl 『 Zmaxl, Zminl 禾 Π Xmax2 , Xmin2, Ymax2, Yfflin2, Zfflax2, Zfflin2分別是兩個變形葉結點的包圍盒,則父節點的包圍盒為max (Xmax 1, Xmax2),min (Xminl,Xmin2),max (Ymax 1, Ymax2),min(Yminl, Ymin2), (6-1)max (Zmaxl, Zmax2),min (Zminl, Zmin2)。在對包圍盒的更新中,只需要六次比較即可,效率高於重新構建包圍盒樹。根據本發明具體實施方式
來進行碰撞檢測。本發明針對「線_線」檢測提出了基於 線段與四面體相交判斷的新方法。本發明的柔性體仿真系統中採用質點和彈簧進行連接, 這意味著也提供了模型的三角網格表示。而無論針對自碰撞檢測還是與剛體的碰撞檢測, 在實現中,最終歸結為兩種類型的檢測,即「點_面」檢測和「線_線」檢測,這兩種類型的 碰撞如圖1所示。在本發明的柔性體仿真系統中,為了加速碰撞,採用了上述討論的層次包圍盒方 法,排除了大量不可能發生相交的基本幾何元素。僅需要對包圍盒相交的點、三角形以及 「線-線」進行檢測。同時利用曲率的特徵,假設當近鄰的三角形夾角較小時,不可能發生 碰撞,只有角度超過閾值才可能碰撞。本實施方式採用的「點_面」檢測技術以及提出的 「線-線」檢測方法。
本發明具體實施方式
碰撞檢測包括基於向量積的點面檢測。Provot最早提出 「點_面」的檢測方法,之後Bridson在其文章中採用了三角形投影的方法來進行「點_面」 檢測。本發明也同樣採用了這種「點-面」檢測的處理方法。其基本思路如下所述。設P(t)是一個移動的點,其中A(t),B(t),C(t)是三角形, 對應於圖1的右側子圖。設
是它們相應的在[t。、t。+At]時間 內的常量速度。可以獲得 如果存在碰撞,則點P (t)在三角形ABC (t)內,可獲得 但是這個方程是一個非線性的系統。為了求解這個系統,使用另外一種P在三角 形ABC內的表達,
通過表示三角形的法向,即
而尺⑴垂直於三角形ABC所在的平面,因此當發生碰撞時 (6-5)式是一個必要但不充分條件,它只意味著A,B, C和P共面。為了檢驗是否 發生了碰撞,可以將其代回到方程(6-4),而此時該方程已經是一個線性系統。如果求解得 到多組t,u,V,則只有時間最近的是所需要的結果,以上是「點-面」檢測的基本原理,在實 現時可以使用Br ids on給出的方法。此方法能夠設定相應的碰撞厚度h,從而使系統更具
魯棒性。檢查一個點。4是否與一個法線為三角形
的距離小於厚度h的方法 如下首先檢查點與三角形所在平面的距離
是否小於h。如果是,則將該 點投影到這個平面上,並計算三角形的重心坐標W1, W2,W3
W1+W2+W3=1
方程的目的是在平面上找到一個與^4最近的點
。如果平面上的重心坐標都在區間[_δ、1+δ]內,而且
重心和;的距離小於h,則可以判定點麼與三角形& 的距離小於厚度h。其中的設 定是由三角形變長決定的。由此,可以通過求解相應的方程獲得系統的求解。本發明具體實施方式
碰撞檢測包括基於基於四面體的「線-線」檢測。「線-線」檢測作為碰撞的基本元素,Provo t根據與「點-面」檢測的思想給出了 「線-線」檢測的方法,但是此方法需要求解一個三次方程,效率不高。本發明將提出一種更 加高效穩定的「線_線」檢測方法。本發明提出了一種新的「線-線」檢測方法。將碰撞檢測問題轉化為簡單的四面體 判斷問題。由於直線和平面的相交是圖形學中的基本操作,算法成熟,而且效率較高,因此 考慮將此問題轉化為直線和平面的相交問題。需要說明的是,改進的線線檢測方法適用於 動力學過程的碰撞檢測,已知當前時刻位置和下一時刻的位移,來判斷下一步的碰撞情況。圖2顯示了兩條線的位置關係。AB,⑶是當前時刻t的位置,判斷下一個時刻t+At
時AB與⑶是否相交。設t+At時AB點位置變為H,⑶點位置變為⑨。對於線線碰撞,
關鍵在於判斷t時刻AB與⑶的相對位置、t+At時刻I與⑩的相對位置,以及在兩條 線段在該時間步內位置變化的過程中可能產生的交叉。根據運動的相對性原理,可以將⑶做為系統的參考系,則AB、⑶之間的相對運動 可以合成為⑶相對靜止,其中A' B'是相對於⑶在t+At時的位置,AB運動到A' B'。線段的位移可以表示為平移和旋轉的組合,減去⑨相對於CD的平移,並反
向旋轉後,即可得到A' B'的位置。在實驗中模型的預設彈簧長度相等(此時線段之間 的相對旋轉可以表示為頂點位移差的形式),此時A'和B'的位置可以簡化為以下公式計 算A' = A+A' C' -AC,(6-6)B' = B+B' D' -BD。(6-7)此處,它們運動的路徑在一個時間步內假設為最短的路徑。如圖2中,A沿直線 AA'運動到A',B沿直線BB'運動到B'。而判斷AB和⑶是否在Δ t時間內碰撞的問題 就轉化為⑶與AB,A' B'運動過程是否相交。AB,A' B'的端點相連接可以構成一個四 面體,如圖2所示。因此問題轉化為直線與四面體的相交判斷問題。如果CD在ABA' B' 外部,相互之間無相交,則AB和⑶必無碰撞。如果⑶在ABA' B'內部,除了以下幾種例 外情況,其他情況CD必然與四面體ABA' B'的兩個面相交。幾種特殊情況如下⑶在四面體的一個面上(可以無碰撞,不處理)
⑶從一條邊經過(如果經過邊A 『 B或AB 『,則必無碰撞;其他情況有碰撞)⑶過頂點(必有碰撞) ⑶在四面體內部(可以不予處理,因為與⑶連續相接的其他邊一定會有一個與 ABA' B'有關係)因而判斷CD與哪兩個面是否相交即轉化為判斷CD是否與AB相交。CD與ΔΑΒΑ'禾Π ΔABB'相交,此時CD與AB必定相交。CD與ΔΑ' B' A禾ΠΔΑ' B' B相交,此時CD與AB必定相交。CD與ΔΑΑ' B禾ΠΔΑΑ' B'相交,此時CD與AB必定相交。CD與ΔΒΒ' A禾ΠΔΒΒ' A'相交,此時CD與AB必定相交。CD與ΔΑΒ' A'和ΔΑΒ' B相交,此時CD與AB可以不相交。(首先A —A',之 後B —B',可繞過)CD與ΔΑ' BA和ΔΑ' BB'相交,此時CD與AB可以不相交。(首先B —B',之 後A —A',可繞過)這樣可以通過基本的「線-面」相交判斷得到線線碰撞檢測的結果。而作為柔性 體碰撞檢測操作的基本元素,採用本發明方法中提出的線面相交檢測則只需做六次基本判 斷,將提高碰撞檢測的效率。根據本發明具體實施方式
來進行碰撞響應。一般的碰撞響應是對檢測得到的碰撞 進行處理,以免發生實際碰撞。本發明將目前已有的三種方法綜合應用到碰撞響應中,同時 提出了一種基於能量平衡的控制機制,以減小碰撞時發生的能量突變,增強穩定性。目前有以下四種碰撞響應的方法。基於約束的碰撞響應基於懲罰力的碰撞響應基於衝量的碰撞響應剛體動力學的碰撞響應本發明系統採用了基於約束的碰撞響應,基於衝量的碰撞響應以及剛體動力學影 響域的碰撞響應,並引入了平衡控制機制。本發明實施方式提供基於本發明的柔性體仿真系統的碰撞響應機制。基於約束和懲罰力的碰撞響應1.基於約束的碰撞響應,即是將碰撞檢測得到的結果加入到線性系統方程中,限 制質點的運動,從而避免了碰撞的產生。本發明的柔性體仿真系統中採用了這種方法,優點 是不會添加額外的剛度,而且沒有額外的阻尼產生。但是從廣義上講這種方法也存在一定 的不足,只能處理點_面的碰撞,無法處理線_線碰撞,因此僅僅通過此方法無法處理自碰 撞檢測。需要維護系統的約束,對於大範圍模擬的魯棒性不強。2.基於懲罰力的方法,根據檢測結果和實際狀態,對檢測到會發生碰撞的質點施 加懲罰力,通過修正質點對的速度避免碰撞發生。Terzopouls,Baraff和Bridson採取了 這種方法。這種力在一對柔性體片接近到一定程度時發生作用,針對所有類型的檢測都可 以使用。但是這種方法的缺點是魯棒性不強,無法精確調節碰撞程度,有可能會產生施加力 過大而穿透失穩的現象,因此本發明系統中沒有採用這種方法。3.基於衝量方法的碰撞響應
基於衝量的方法考慮所有的運動軌跡,檢測相應的碰撞,之後應用衝量方法。本發 明採用了這種方法,通過對碰撞檢測得到的節點施加衝量,影響其速度,避免碰撞的產生, 其缺點是有可能收斂速度較慢。採用衝量進行處理是因為在計算過程中無法直接顯式地修改每一個質點的速度, 相反可以通過線性插值來設置插值點的速度。假設在一個三角形I1I2I3內部插值
點的速度是
如果一個點在邊上的比例係數
是a,則這點的速度為
由此可以確定與碰撞相關的點的速度。
對於衝量的計算,如果在方向巧上需要施加碰撞響應,則通過施加衝量到相應的三角形的 邊和質點,之後通過插值來修改其內部其他點的坐標。對於點三角形的情況,假設三角形內部的點x4,其關於三角形的權重係數為Wl,w2, W3,對三角形施加的衝量是I,該點質量為m,/)是需要施加碰撞響應的方向。則可以獲得 由此可以通過插值來獲得其它點的速度。問題的求解轉變為如何求得衝量的問 題。衝量可以採用如下計算方法 其中,
是在方
向f/上的彈簧力,m是質點的質量。衝量可以串行或並行添加,並行添加的缺點是會導致產 生過多的非彈性碰撞。3.基於剛體影響域的碰撞響應碰撞響應的另一個思路是使用剛體動力學進行求解。Provot首次提出了剛體影響 域的概念。即當出現碰撞時,有可能出現連鎖反應,即在某一個區域內出現多個碰撞,而系 統如果處理不當則會產生不穩定甚者穿透的現象。剛體影響域的思路是將多個節點合成一 個大的區域,在此區域內的點互相影響,作為一個統一的剛體進行處理。將多個節點合併成一個影響域進行計算。初始影響域的中心
其中f^y是中心的位置, \-Λ 是中心的速度,取各個方向速度的平均。之後節 點的角度衝量可以表示為 其內部3X3張量為 角動量為
,因此新的質點速度為
「01271 然後求得系統的最終狀態和位置。由此方法可以將多個碰撞區域內的點合成為一 個區域,並統一按照剛體方式進行處理。本發明系統中綜合採用了約束、衝量以及剛體影響域的碰撞響應方式,能夠很好 地處理檢測到的碰撞。但是仿真系統的能量分析顯示,以上幾種方式處理碰撞時會產生一 個突變的能量峰值,而能量會影響系統的穩定性,較大突變能量將使系統處於發散不穩定 的危險。本發明實施方式提供柔性體碰撞處理總體流程以及能量平衡控制方法。圖3顯示 了本發明柔性體仿真系統中碰撞部分的處理流程,給出碰撞處理的層次關係以及能量平衡 控制機制的主要過程。首先,碰撞處理的所有操作都是以空間層次包圍盒為組織基礎,在其內部依次進 行基於向量積的「點_面」碰撞檢測和基於四面體的「線_線」碰撞檢測。當檢測到碰撞後,需要判斷碰撞發生的類型如果是柔性體與模擬環境中的剛體 模型碰撞,則進行約束碰撞響應處理,在線性系統中添加碰撞之間的約束。如果是柔性體之間的碰撞,將所檢測到的臨近碰撞的數量與預定值進行比較,所 述預定值可以取5-10,本發明實施方式以預定值為5進行描述。如果所檢測到的臨近碰撞 (臨近的碰撞為在一個子包圍盒內所檢測到的碰撞)的數量小於預定值,則直接進行衝量 碰撞處理。例如,當檢測到臨近碰撞的數量為0-4(碰撞數量較少)中的一個時,由於碰撞 數量小於預定值5,則將上述碰撞直接進行衝量碰撞處理。如果所檢測到的臨近碰撞的數量 大於預定值,則將鄰近的多個碰撞作為統一的剛體域處理,並將剛體域作為一個碰撞與剛 體域外的其它碰撞同時進行衝量碰撞處理。例如,當檢測到的臨近碰撞的數量為8 (碰撞數 量較多)時,由於碰撞數量大於預定值5,則首先將這8個碰撞中距離較近的碰撞組成統一的剛體域,然後與剛體域外的其它碰撞同時進行衝量碰撞處理。針對碰撞響應,對碰撞和模擬過程進行了平衡分析和控制。在碰撞處理中也引入了能量平衡機制,目的在於消除動力學模擬過程中由於碰撞所引起的突變能量,而這是系 統不穩定的重要原因之一。在檢測到碰撞之後,通過能量準則判斷系統是否處於平衡狀態, 當系統處於不平衡狀態時,對碰撞的點施加約束,利用擾動的原理在系統中添加約束。使其 能量從一個突變的狀態穩定地進行下降,達到減小能量突變的目的。研究過程中,對不使用 能量平衡控制的方法與使用本發明方法在本發明柔性體仿真系統中進行測試,結果表明, 不使用此方法會產生系統能量的增加,而使用本方法則會使能量平緩的變化。能量平衡控制的主要思想是根據系統的勢能判斷系統所處的狀態,若系統相對於 其所處狀態的任何可能偏離都將違背某個物理定律,則該系統不可能產生任何偏離,即系 統是穩定的。當系統的總勢能取極小值時,相應地它所處的平衡狀態是穩定的。因此可以 使用能量的變化率來判斷系統所處的狀態。如圖4所示,能量平衡控制碰撞響應主要包括4個主要步驟,通過能量函數判斷系 統是否處於平衡狀態,當線性系統處於平衡狀態時,針對壓縮彈簧計算擾動位移,進行狀態 變量的設定,通過碰撞擾動狀態變量來管理擾動,根據狀態變量,設置系統約束的控制矩陣 S矩陣和Z矩陣,使用隱式求解方法,將擾動加入線性系統方程。S矩陣和Z矩陣分別是系 統約束中的控制矩陣。在實現上採用與屈曲控制相似的方法,利用狀態變量表示系統各狀態,通過能量 函數判斷系統是否處於平衡狀態,設置約束矩陣S和ζ將擾動加入到系統。由於同時存在 多個碰撞,碰撞能量控制的特殊之處是需要維護管理多個狀態變量,而在屈曲模型中則只 使用一個狀態變量即可添加擾動。細節上我們設置平衡控制的閾值,即同時最多操作發生 碰撞質點的個數。動態管理各個狀態的釋放,其中碰撞狀態變量i如表1所示。初始時該 狀態變量未被使用而設為狀態0,當檢測到最早的碰撞時,將其加入到狀態變量,存儲其相 應的質點編號j,按照屈曲模型中的方法計算擾動位移,同時添加相應約束。在之後的時間 步計算系統能量是否達到平衡,如果系統達到平衡則釋放該碰撞點的約束以及相應狀態變 量。通過這種方式可以管理多個碰撞的平衡,此方法的缺點是由於對能量進行控制,增加系 統穩定性的同時增加了計算量。但是對於目前的硬體條件而言,系統穩定性佔據了更重要 的位置。表 權利要求
一種利用能量平衡機制來處理柔性體碰撞的方法,所述方法包括在空間層次包圍盒內部依次進行基於向量積的「點-面」碰撞檢測和基於四面體的「線-線」碰撞檢測;當檢測到碰撞時,判斷碰撞發生的類型如果是柔性體與模擬環境中的剛體模型碰撞,則進行約束碰撞處理,在線性系統中添加碰撞之間的約束;如果是柔性體之間的碰撞,將所檢測到的臨近碰撞的數量與預定值進行比較,如果所檢測到的臨近碰撞的數量小於預定值,則進行衝量碰撞處理;如果所檢測到的臨近碰撞的數量大於等於預定值,則將鄰近的多個碰撞作為統一的剛體域處理,並將剛體域作為一個碰撞與剛體域外的其它碰撞同時進行衝量碰撞處理;利用能量平衡來控制碰撞;所述利用能量平衡來控制碰撞具體包括通過能量函數判斷線性系統是否處於平衡狀態;當線性系統處於平衡狀態時,針對壓縮彈簧計算擾動位移;進行狀態變量的設定,通過碰撞擾動狀態變量來管理擾動;根據狀態變量,設置線性系統約束的控制矩陣S矩陣和Z矩陣,使用隱式求解方法,將擾動加入線性系統方程。
2.根據權利要求1所述的方法,其中,所述包圍盒為基於六面體的包圍盒,所述基於六 面體的包圍盒為能夠包圍碰撞體且邊平行於坐標軸的最小六面體。
3.根據權利要求1和2所述的方法,其中,基於六面體的包圍盒的構造方法為沿碰 撞體局部坐標系統的軸向(X,Y,Z),按照由上至下的遞歸細分方式形成基於包圍盒的二叉 樹;在每一次遞歸過程中,要求取最小的包圍盒,沿所選擇的剖分面將碰撞體分為正負兩 半,並將所對應的原始幾何元素分別歸屬正、負兩邊;遞歸細分一直進行到每一個葉子節點只包容一個原始幾何元素為止,具有η個原始幾 何元素的包圍盒樹包含η個非葉子節點和η個葉子節點。
4.根據權利要求2所述的方法,其中,基於六面體的包圍盒的相交檢測方法為兩個樹A 和B之間雙重遞歸遍歷的過程對兩棵樹A和B,若發現樹A根節點的包圍盒與樹B內部節點的包圍盒不相交,則停止 向下遍歷;如果遍歷能達到樹B的葉節點,再用該葉節點遍歷樹A ;如果能到達樹A的葉節 點,則進一步進行基本元素之間的相交測試;根據兩個包圍盒相交若且唯若它們在三個坐 標軸上的投影區間均相交這一特性,可以將三維求交問題轉化為一維求交問題。
5.根據權利要求2所述的方法,其中,基於六面體的包圍盒的更新方法為當模擬的柔 性體發生移動、旋轉和變形之後,需要對包圍盒進行更新,根據包圍盒樹的定義,可以獲得 包圍盒六面體的8個頂點,對這8個頂點進行相應旋轉和平移變化,並根據變化後的頂點計 算新包圍盒。
6.根據權利要求1所述的方法,其中,碰撞處理包括基於約束的碰撞處理,基於衝量的 碰撞處理以及基於剛體動力學影響域的碰撞處理。
7.根據權利要求6所述的方法,其中,基於約束的碰撞處理將碰撞檢測得到的結果以約束方式加入到線性系統方程中,限制質點的運動,從而避免了碰撞的產生。
8.根據權利要求6所述的方法,其中,基於衝量的碰撞處理通過對碰撞檢測得到的節 點施加衝量,影響節點速度,避免碰撞的產生。
9.根據權利要求6所述的方法,其中,基於剛體動力學影響域的碰撞處理包括將多個 節點合成一個大的區域,在此區域內的節點互相影響,作為一個統一的剛體進行處理。
10.根據權利要求1所述的方法,其中基於四面體的「線-線」碰撞檢測為,根據運動的 相對性原理,將碰撞檢測轉化為直線與四面體相交的判斷。
全文摘要
公開了一種利用能量平衡機制來處理柔性體碰撞的方法,方法包括在空間層次包圍盒內部依次進行基於向量積的「點-面」碰撞檢測和基於四面體的「線-線」碰撞檢測;當檢測到碰撞時,判斷碰撞發生的類型,分別對柔性體與模擬環境中的剛體模型碰撞和柔性體之間的碰撞進行碰撞處理;利用能量平衡來控制碰撞響應通過能量函數判斷系統是否處於平衡狀態;當系統處於平衡狀態時,針對壓縮彈簧計算擾動;進行狀態變量的設定,通過擾動狀態變量來管理擾動;根據狀態變量,設置系統約束的控制矩陣S矩陣和Z矩陣,使用隱式求解方法,將擾動加入線性系統方程。本發明適用於屈曲生成,能夠更加有效的提高系統穩定性,處理碰撞並產生柔軟體仿真褶皺。
文檔編號G06F17/50GK101866386SQ20101020918
公開日2010年10月20日 申請日期2010年6月25日 優先權日2010年6月25日
發明者苑維然, 陳玉君 申請人:杭州維肖軟體科技有限公司