倪雪飛 秦富春
【摘要】計(jì)算機(jī)三維動(dòng)畫是現(xiàn)在計(jì)算機(jī)的研究重點(diǎn),其中,人體運(yùn)動(dòng)仿真技術(shù)被引用到了各個(gè)領(lǐng)域中。本文提出了一種基于“采樣數(shù)組”的方法計(jì)算耦合面信息。耦合面的數(shù)量很大,在交互時(shí)使矩陣計(jì)算的復(fù)雜度較高,這種方法的解決辦法是在交互面上構(gòu)建一組數(shù)組,對(duì)通過碰撞檢測(cè)的耦合面進(jìn)行采樣過濾,降低矩陣計(jì)算的復(fù)雜度,最后以插值計(jì)算的方式計(jì)算出沒有通過采樣的耦合面信息。
【關(guān)鍵詞】人體運(yùn)動(dòng)系統(tǒng) ?耦合面 ?插值計(jì)算 ?流體仿真
耦合面[1](Couple faces)指用于使人體流體發(fā)生交互,傳遞參數(shù)的數(shù)據(jù)結(jié)構(gòu)。本文沒有采樣用原有的方法,而是在原有的耦合面?zhèn)鬟f方法上進(jìn)行改進(jìn),采用了一種基于采樣數(shù)組的方法降低耦合面的傳輸量與計(jì)算量,再通過插值計(jì)算出未通過采樣的耦合面,用降低計(jì)算的精確度為代價(jià)換取運(yùn)算性能的提升的優(yōu)化策略,提高了仿真效率。
耦合面數(shù)據(jù)結(jié)構(gòu)
Struct CoupleFaces
{
Vec3 ? ?vn; ? // 法線向量
Float ? ?fp; ? // 流體壓力的數(shù)值大小
Float ? ?fa; ? // 人體對(duì)流體的加速度的數(shù)值大小
Mesh ? ms; ? // 耦合面對(duì)應(yīng)的流體網(wǎng)格
Int ? ? sign; ?// 耦合面對(duì)應(yīng)的人體子鏈ID
Float ? ?fs; ? // ?耦合面面積大小
Pair
因?yàn)轳詈厦孀鳛橹虚g層負(fù)責(zé)傳送雙方的數(shù)據(jù),還需要保存一些預(yù)處理數(shù)據(jù),它的結(jié)構(gòu)較為復(fù)雜。其中最為重要的數(shù)據(jù)為耦合面法線向量[3]、流體壓力值和傳遞的加速度值。
流體仿真首先取得耦合面對(duì)應(yīng)的流體模型網(wǎng)格[2],然后將網(wǎng)格的加速度與網(wǎng)格質(zhì)量相乘得到壓力值,最后將壓力值與法線信息保存進(jìn)參數(shù)與。人體在得到壓力后經(jīng)過矩陣計(jì)算,得到每個(gè)耦合面的加速度,這里的加速度是人體在耦合面這個(gè)位置上的實(shí)際加速度,最后人體仿真將加速度保存進(jìn)參數(shù)。如果每一個(gè)耦合面需要大約12個(gè)浮點(diǎn)數(shù)來儲(chǔ)存,共需要24000個(gè)浮點(diǎn)數(shù)約96K。對(duì)數(shù)據(jù)的讀取可以達(dá)到實(shí)時(shí)性,下面考慮數(shù)據(jù)的運(yùn)算性能。
在計(jì)算耦合面信息時(shí)會(huì)設(shè)計(jì)到3個(gè)矩陣運(yùn)算,即存在:
(1)兩個(gè)矩陣維度與矩陣維度相乘;
(2)一個(gè)矩陣維度與矩陣維度相乘;
(3)一個(gè)矩陣維度與矩陣維度相乘;
為耦合面數(shù)量,為自由度數(shù)量,計(jì)算3個(gè)矩陣方程的復(fù)雜度為,因?yàn)檫h(yuǎn)遠(yuǎn)大于,所以復(fù)雜度等同為。當(dāng)時(shí),方程計(jì)算量為次浮點(diǎn)數(shù)相乘,浮點(diǎn)數(shù)做乘法的消耗較大,數(shù)量巨大的浮點(diǎn)數(shù)相乘必然會(huì)影響仿真效率。
構(gòu)建采樣數(shù)組
采樣數(shù)組(Sampling Array)的作用是:映射子鏈上的耦合面并對(duì)其采樣。數(shù)組的每個(gè)元素由耦合面ID、子鏈ID和采樣標(biāo)記等信息組成。由于要求將三維空間的耦合面映射到二維空間的采樣數(shù)組,需要對(duì)應(yīng)的坐標(biāo)映射公式。坐標(biāo)轉(zhuǎn)換公式(1)。
(1)
公式(1)將三維空間中位于以某點(diǎn)為中心的耦合面映射到基于角度的坐標(biāo)系中,由于角度值域,我們需要將其轉(zhuǎn)換到數(shù)組大小的整數(shù)坐標(biāo)中。轉(zhuǎn)換公式(2)。
(2)
經(jīng)過公式(2)的轉(zhuǎn)換,坐標(biāo)代表耦合面映射到數(shù)組中的坐標(biāo)??梢灾溃蓸訑?shù)組的第一列元素為子鏈最右端的一列網(wǎng)格,如果從做向右掃描數(shù)組的每一列,那么相當(dāng)于以子鏈最右端為起始,逆時(shí)針掃描子鏈上的所有網(wǎng)格。
子鏈的包圍盒有球體、長(zhǎng)方體、膠囊體。球體包圍盒符合上面的映射公式;膠囊體由半球與圓柱組成,半球符合映射公式(2),圓柱體的映射公式于上面公式基本類似,在這里不做多余闡述;長(zhǎng)方體的映射公式(2)不同,其公式比較復(fù)雜,考慮到效率和公式的一致性問題,本文用球體映射公式替代長(zhǎng)方形映射。
耦合面采樣
在遍歷數(shù)組尋找耦合面時(shí),不需要遍歷整個(gè)數(shù)組,因?yàn)檫@樣將退化成遍歷所有的耦合面。我們?cè)O(shè)定每隔2個(gè)單位對(duì)數(shù)組采樣,取得數(shù)組單元后再判斷是否含有耦合面,如果有則進(jìn)一步計(jì)算。
數(shù)組邊緣單位需要全部采樣,直到找到存在耦合面的單位。因?yàn)椴蓸雍蟮鸟詈厦娌皇侨狂詈厦?,在進(jìn)行遞歸運(yùn)算時(shí),可以防止沒有找到耦合面的特殊情況。
在對(duì)數(shù)組采樣后,只將通過采樣的耦合面?zhèn)鬟f給人體計(jì)算,對(duì)沒有采樣到的耦合面進(jìn)行插值計(jì)算。耦合面的計(jì)算量縮小至少為原來的,矩陣計(jì)算復(fù)雜度為。插值計(jì)算過程如下:
(1)遍歷所有數(shù)組網(wǎng)格,找到第一次沒有計(jì)算的耦合面;
(2)以自身為坐標(biāo)中心,遞歸周圍網(wǎng)格,在4個(gè)象限里分別找到一個(gè)已經(jīng)計(jì)算過的。
(3)進(jìn)行插值計(jì)算,插值與耦合面加速度值與距離本耦合面的距離有關(guān),其表達(dá)式為公式(3)。
(3)
(4)將計(jì)算完的耦合面標(biāo)記到數(shù)組中;
(5)返回(1),直到遍歷完數(shù)組。
本文基于采樣耦合面的傳遞方法,對(duì)傳統(tǒng)的傳遞方式進(jìn)行了改進(jìn),該方法對(duì)需要交互的耦合面進(jìn)行適當(dāng)采樣,以降低矩陣運(yùn)算量,然后在通過插值計(jì)算得到為能通過采樣的耦合面信息,改進(jìn)的方法在交互性能上提高了,數(shù)值的精確度達(dá)到,交互數(shù)量上穩(wěn)定的保持在倍。
【參考文獻(xiàn)】
[1]陳學(xué)文,丑武勝,劉靜華等.基于包圍盒的碰撞檢測(cè)算法研究.計(jì)算機(jī)工程與應(yīng)用,2005,41(5):46-50.
[2]Niewmeyer.Frank, Wilke.hans-Joachim, Schmidt.Hendrik. Geometry strongly influences the response of numerical models of the lumbar spine-A probabilistic finite element analysis [J]. Journal of Biomechanics, 2012, 45(8):1414-1423.
[3]Chouvatut. Varin, Madarasmi. Suthep, Tucerya.Mihran. 3D face and motion from feature points using adaptive constrained minimal[C]. IEICE Transactions on Fundamentals of Electronics, Communications and Computer Sciences, 2011:2207-2219.