基于位置的流體模擬控制方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及的是一種計(jì)算機(jī)圖形學(xué)領(lǐng)域的技術(shù),具體是一種通過對(duì)流體粒子應(yīng)用 三種非線性約束使得流體的模擬形態(tài)與快速變化的目標(biāo)形態(tài)相匹配,同時(shí)又保持流體本身 的細(xì)節(jié)和物理特性的方法及系統(tǒng)。
【背景技術(shù)】
[0002] 流體模擬已經(jīng)成為計(jì)算機(jī)圖形學(xué)領(lǐng)域研究中越來越熱門的話題,許多自然界的相 關(guān)現(xiàn)象諸如水、煙霧、火焰等等,皆與流體模擬息息相關(guān)。為此,業(yè)界人員提出了許多有效的 算法來模擬逼真的流體效果。
[0003] 目前,模擬流體效果的相關(guān)算法已經(jīng)比較成熟,無論是基于網(wǎng)格的歐拉方法或是 基于粒子的拉格朗日方法,都可以比較準(zhǔn)確的模擬流體效果。但是隨著人機(jī)交互的不斷發(fā) 展,人們對(duì)于流體模擬控制的要求越來越高。尤其是在計(jì)算機(jī)動(dòng)畫領(lǐng)域,控制流體模擬變形 為用戶設(shè)定的目標(biāo)形態(tài)的需求越來越多。
[0004] 經(jīng)過對(duì)現(xiàn)有技術(shù)的檢索發(fā)現(xiàn),中國專利文獻(xiàn)號(hào)CN102402791A,公開日2012 -04 -04 提供了一種"基于GHJ的三維流體模擬"。該方法提出了一種基于GPU的三維流體模擬方法, 主要包括:1)采集三維流體的數(shù)據(jù)信息;2) CPU對(duì)獲得的三維流體的數(shù)據(jù)信息進(jìn)行預(yù)處理, 之后采用GPU對(duì)獲得的預(yù)處理結(jié)果進(jìn)行流體模擬,從而獲得加速后的流體模擬的結(jié)果;3) 將所獲得的模擬結(jié)果進(jìn)行渲染,獲得渲染后的三維流體的最終效果。該技術(shù)利用了 GPU進(jìn) 行并行加速,并可以達(dá)到實(shí)時(shí)的模擬效果。但是該方法僅采用了基本的Smoothed particle hydrodynamics (SPH)流體模擬方法,無法在模擬過程中控制流體的形態(tài)。
[0005] 中國專利文獻(xiàn)號(hào)0附03714575六公開(公告)日2014.04.09,公開了一種3?!1與動(dòng) 態(tài)表面網(wǎng)格相結(jié)合的流體模擬方法。該方法使用追蹤粒子對(duì)流體表面進(jìn)行采樣,之后將表 面追蹤粒子轉(zhuǎn)化成三角網(wǎng)格,并在模擬過程中自動(dòng)處理網(wǎng)格的拓?fù)渥兓3秩切尉W(wǎng)格 的質(zhì)量。該方法解決了傳統(tǒng)SPH流體模擬不易展現(xiàn)流體細(xì)節(jié)的問題。但是該方法同樣只能 模擬流體自然情況下的狀態(tài),無法在模擬過程中控制流體的形狀和運(yùn)動(dòng)路徑,使流體形成 用戶期望的狀態(tài)。
[0006] A. Treuille 和 A. McNamara 等人在《SIGGRAPH》上發(fā)表的《Keyframe Control of Smoke Simulations》(2003年)中提出了一種基于關(guān)鍵幀的流體控制方法。該方法利用一 個(gè)類似于風(fēng)力的外力來驅(qū)動(dòng)整個(gè)流體的形態(tài)變化,使之與用戶設(shè)定的關(guān)鍵幀形態(tài)相匹配。 該方法可以有效地控制基于歐拉方法的流體模擬,但是由于方法中的風(fēng)力計(jì)算涉及最優(yōu)化 方程的求解,使得整個(gè)算法的計(jì)算非常耗時(shí),只能適用于小規(guī)?;蛘叨S流體模擬的控制。
[0007] 為了解決控制算法耗費(fèi)大量計(jì)算資源和時(shí)間的問題,N. Thiirey和R. Keiser等人 在《Graphical Models》上發(fā)表的《Detail - Preserving Fluid Control》(2〇〇9 年)中提 出了一種對(duì)基于拉格朗日流體模擬框架的控制方法。該方法利用吸引力來驅(qū)使流體達(dá)到目 標(biāo)形狀,同時(shí)利用速度力來控制流體的流動(dòng)速度,為了避免人工引入的控制力破壞流體的 細(xì)節(jié)特性,該方法將整個(gè)流體速度場分解成高頻和低頻兩部分,并將控制力只作用到低頻 部分,這樣使得流體細(xì)節(jié)在一定程度上被保留下來。該方法在一定程度上解決了基于歐拉 流體模擬控制方法中耗時(shí)耗資源的問題,但是由于引入的控制力是線性的,與流體物理方 程的非線性特征不一致,無法施加較大控制力,否則會(huì)造成流體模擬的不穩(wěn)定,因此該方法 不能控制流體跟蹤和匹配快速移動(dòng)的目標(biāo)。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明針對(duì)現(xiàn)有技術(shù)存在的上述不足,提出了一種基于位置的流體模擬控制方法 及系統(tǒng),本方法基于拉格朗日流體模擬框架,通過對(duì)流體粒子應(yīng)用三種非線性約束來使得 流體的模擬形態(tài)與快速變化的目標(biāo)形態(tài)相匹配,同時(shí)保持流體細(xì)節(jié)和物理特性。另外,本發(fā) 明采用基于位置物理模擬框架,允許使用任意大的時(shí)間步長,因此可以實(shí)現(xiàn)實(shí)時(shí)的流體模 擬與控制。
[0009] 本發(fā)明是通過以下技術(shù)方案實(shí)現(xiàn)的:
[0010] 本發(fā)明涉及一種基于位置的流體模擬控制方法,采用基于流體密度的約束力驅(qū)動(dòng) 流體匹配物體形態(tài);同時(shí)通過添加彈性約束力,將流體粒子緊緊貼合匹配物體的形態(tài),使得 整個(gè)流體的模擬過程不會(huì)因?yàn)槠ヅ湮矬w的快速形變或者移動(dòng)而產(chǎn)生粒子無法跟隨匹配的 情況。
[0011] 本發(fā)明具體包括以下步驟:
[0012] 步驟一,用戶自行設(shè)置控制流體的目標(biāo)形狀3D模型,同時(shí)設(shè)置用于表示目標(biāo)形狀 運(yùn)動(dòng)的 Biovision hierarchical data(BVH)文件。
[0013] 步驟二,對(duì)用戶設(shè)置的目標(biāo)物體模型進(jìn)行體素化得到控制粒子位置;用戶設(shè)定對(duì) 物體進(jìn)行形變的控制點(diǎn)位置;計(jì)算控制點(diǎn)對(duì)體素點(diǎn)的影響權(quán)重,具體為:
[0014] 2. 1)對(duì)目標(biāo)物體模型進(jìn)行三角網(wǎng)格細(xì)分;然后采用均分三角形算法對(duì)細(xì)分后的 物體模型進(jìn)行體素化,即落在體素化網(wǎng)格之內(nèi)的頂點(diǎn)即為該體素化網(wǎng)格的控制粒子位置。
[0015] 當(dāng)有多個(gè)頂點(diǎn)落在同一個(gè)體素化網(wǎng)格之內(nèi),將這些頂點(diǎn)的位置求平均值來作為控 制粒子的位置。對(duì)所有頂點(diǎn)進(jìn)行這樣的操作,從而得到整個(gè)物體模型對(duì)應(yīng)的流體控制粒子。
[0016] 所述的三角網(wǎng)格細(xì)分是指:當(dāng)一個(gè)三角網(wǎng)格的邊長大于一個(gè)體素化網(wǎng)格時(shí),將該 三角網(wǎng)格分成兩個(gè)更小的三角網(wǎng)格。
[0017] 所述的三角網(wǎng)格是指:目標(biāo)物體模型本身的三角面片。
[0018] 所述的體素化網(wǎng)格是指:將物體所在的三維空間平均劃分而得到的若干單位立方 體。
[0019] 所述的流體控制粒子是指:用于控制流體粒子運(yùn)動(dòng)的粒子。
[0020] 2. 2)在體素化后的結(jié)果上手動(dòng)設(shè)置控制點(diǎn)的位置,并計(jì)算控制點(diǎn)對(duì)體素點(diǎn)的歸一 化后的影響權(quán)重信息。具體為:
[0021 ] 2. 2. 1)手動(dòng)設(shè)直控制點(diǎn)的彳λα直。
[0022] 2. 2. 2)通過Djikstra算法計(jì)算每個(gè)體素 j和對(duì)應(yīng)的控制點(diǎn)i之間的最短距離為 d) ;. 1 ,
[0023] 2. 2. 3)計(jì)算每個(gè)控制點(diǎn)i對(duì)體素點(diǎn)j的權(quán)重影響,A = (mypyngfr,其 中:Ct是用于控制形變平滑程度的參數(shù)。 wlJ
[0024] 2. 2. 4)對(duì)%進(jìn)行歸一化處理得到歸一化之后的權(quán)重,M k
[0025] 步驟三,使用步驟一設(shè)置的BVH文件以及步驟二得到的歸一化后的影響權(quán)重,對(duì) 當(dāng)前時(shí)間步的控制粒子的位置進(jìn)行更新,然后通過控制粒子對(duì)流體粒子施加約束力,驅(qū)動(dòng) 流體粒子形成目標(biāo)形狀,具體為:
[0026] 3. 1)對(duì)流體粒子應(yīng)用密度約束,得到流體粒子在密度約束下的位置變化量,具體 為:
[0027] 3. I. 1)計(jì)算每個(gè)控制粒子i周圍流體粒子的密度,A 其中: J Pi表示第i個(gè)控制粒子的位置,P _j表示第j個(gè)流體粒子的位置,m 表示第j個(gè)流體粒子的 質(zhì)量,H表示控制粒子的支持半徑,W為SPH方法中Ploy6平滑函數(shù)。
[0028] 每個(gè)控制粒子i的密度約束定義為:…,仏)=#-1,其中:0表示流體 Po " 粒子未受控制情況下的密度值。
[0029] 3. 1. 2)計(jì)算控制粒子i的密度約束強(qiáng)度
其中 ε用于防止除零情況發(fā)生,Ci表示約束C i對(duì)位置p ^求梯度。
[0030] 3. 1. 3)計(jì)算每個(gè)流體粒子i在密度約束下的位置變化量, 丑〉,其中:▽妒為函數(shù)W對(duì)位置?]求梯度。
[0031] 通過上述密度約束的位置更新,每個(gè)控制粒子會(huì)自動(dòng)維持其周圍流體粒子的密 度,當(dāng)周圍的流體粒子密度過小時(shí),控制粒子對(duì)周圍流體粒子產(chǎn)生吸引作用,增大其周圍的 流體密度;相反,則對(duì)周圍流體粒子產(chǎn)生排斥作用,減小其周圍的流體密度。
[0032] 3. 2)當(dāng)目標(biāo)物體運(yùn)動(dòng)或形變較快時(shí),單純密度約束會(huì)使得流體粒子遠(yuǎn)離了控制粒 子的控制范圍,使得控制方法失效。為了處理這種情況,在流體粒子和控制粒子之間添加一 種彈性約束,使流體粒子在距離控制粒子較遠(yuǎn)時(shí),彈性約束會(huì)將流體粒子重新拉回控制粒 子位置,進(jìn)而保證流體始終處于控制范圍內(nèi)。具體為:
[0033] 3. 2. 1)對(duì)每一個(gè)流體粒子尋找離其最近的控制粒子,并在他們之間添加一個(gè)彈 簧。
[0034] 3. 2. 2)設(shè)置彈簧的生命為時(shí)間t,它的值會(huì)隨模擬不斷減小,當(dāng)其減少到0時(shí),將 該彈簧銷毀。
[0035] 3. 2. 3)若彈簧生命t不為0,則計(jì)算該流體粒子i在彈性約束下位置的變化 量,A其中:函數(shù)f為機(jī)器學(xué)習(xí)中的常用的邏輯回歸函數(shù): /(.〇 = ·其中a,b為控制函數(shù)形狀的調(diào)節(jié)參數(shù),e為自然常數(shù)。 .1 + e
[0036] 根據(jù)f函數(shù)的特性,本步驟所使用的彈性約束僅當(dāng)流體粒子與流體控制粒子之間 的距離較大時(shí)產(chǎn)生作用,若流體粒子處在控制粒子的較近范圍內(nèi),彈性約束非常小,不會(huì)破 壞流體的細(xì)節(jié)特性。
[0037] 3. 3)對(duì)每個(gè)流體粒子i應(yīng)用速度約束,得到每個(gè)流體粒子在速度約束下的位置的 變化量,以實(shí)現(xiàn)對(duì)流體的速度控制,具體為:
[0038] 3. 3. 1)對(duì)每個(gè)流體粒子i,計(jì)算它周圍控制粒子的平均速度,
其中A表示第j個(gè)控制粒子的速度。
[0039] 3. 3. 2)計(jì)算流體粒子i在速度約束下的位置變化量,△/^_ =叫屯-Vi),其中: A t表示模擬的時(shí)間步長,V1表示第i個(gè)流體粒子的速度。
[0040] 3. 4)計(jì)算每個(gè)流體粒子i的在3個(gè)控制約束下總的位置變化量,并將流體粒子移 至新位置,P1 = P 4 Δ PldOTSlty+Λ P廣Λ P1V^'從而完成當(dāng)前時(shí)間步內(nèi)的流體模擬的所 有計(jì)算,之后進(jìn)入下一時(shí)間步的循環(huán),重復(fù)執(zhí)行上述步驟三。
[0041] 步驟四,當(dāng)模擬時(shí)間滿足一定條件或模擬狀態(tài)滿足一定條件時(shí),整個(gè)流體控制過 程結(jié)束。
[0042] 本發(fā)明涉及一種實(shí)現(xiàn)上述方法的系統(tǒng),包括:流體控制粒子生成模塊、控制點(diǎn)影響 權(quán)重計(jì)算模塊、密度約束模塊、彈性約束模塊和速度約束模塊,