一種衣物自碰撞檢測(cè)高層裁剪優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種衣物自碰撞檢測(cè)高層裁剪優(yōu)化方法,屬于虛擬衣物仿真技術(shù)領(lǐng) 域。
【背景技術(shù)】
[0002] 在衣物動(dòng)態(tài)仿真過(guò)程中,碰撞檢測(cè)是最耗時(shí)的部分。碰撞檢測(cè)過(guò)程中,首先需要檢 測(cè)出所有發(fā)生碰撞的三角形對(duì),然后對(duì)每個(gè)三角形對(duì)分配基元對(duì)進(jìn)行后續(xù)基本相交測(cè)試。 在每個(gè)時(shí)間步長(zhǎng)內(nèi),需要判斷網(wǎng)格的頂點(diǎn)與三角形、邊與邊之間的碰撞情況,對(duì)于N個(gè)頂點(diǎn) 的衣物網(wǎng)格,進(jìn)行自碰撞檢測(cè)的時(shí)間復(fù)雜度是〇(N 2)。碰撞檢測(cè)成為衣物動(dòng)態(tài)仿真過(guò)程中的 主要瓶頸,為了對(duì)自碰撞檢測(cè)進(jìn)行優(yōu)化,研宄者們提出一系列優(yōu)化方法,分為三角形層面的 高層裁剪方法和基元對(duì)層面的低層裁剪方法。
[0003] 在以往的研宄工作中,最常用的高層裁剪方法是層次包圍盒算法,對(duì)物體建立層 次包圍盒,通過(guò)層次包圍盒的相交測(cè)試,裁剪掉包圍盒不想交的三角形對(duì)。為了減少層次包 圍盒遍歷過(guò)程中的包圍盒相交測(cè)試次數(shù),許多研宄者提出自碰撞檢測(cè)的裁剪優(yōu)化方法,用 來(lái)裁減掉不存在碰撞三角形對(duì)的區(qū)域,即不可能發(fā)生自碰撞區(qū)域。Volino利用網(wǎng)格的拓?fù)?和連接性,通過(guò)輪廓測(cè)試判斷網(wǎng)格的自碰撞狀態(tài)。Provot基于網(wǎng)格曲率,提出法向量錐的方 法,可以有效的裁剪掉不發(fā)生自碰撞的區(qū)域,該方法只適用于離散碰撞檢測(cè)。Tang將法向量 錐方法擴(kuò)展到連續(xù)碰撞檢測(cè),計(jì)算整個(gè)時(shí)間步長(zhǎng)內(nèi)的連續(xù)法向量錐信息。Wong進(jìn)行基于骨 骼驅(qū)動(dòng)的放射視角裁剪。Schvartzman等人提出基于星形輪廓的輪廓測(cè)試方法,該方法用于 離散自碰撞檢測(cè),由于輪廓測(cè)試的投影和相交操作的復(fù)雜性,在自碰撞檢測(cè)中通常忽略。
[0004] 以往自碰撞檢測(cè)高層裁剪方法主要存在以下問(wèn)題:
[0005] (1)由于鄰接三角形對(duì)的包圍盒相交,層次包圍盒算法裁剪效率較低。
[0006] (2)連續(xù)法向量錐的有效裁剪區(qū)域較小。
[0007] (3)基于骨骼驅(qū)動(dòng)的放射視角裁剪,通過(guò)計(jì)算頂點(diǎn)的骨骼權(quán)重對(duì)網(wǎng)格進(jìn)行分簇,實(shí) 現(xiàn)較為復(fù)雜,影響碰撞檢測(cè)的效率。
[0008] 針對(duì)以上問(wèn)題,本發(fā)明對(duì)虛擬衣物仿真技術(shù)和自碰撞檢測(cè)高層裁剪方法做了進(jìn)一 步的研宄,一種基于衣物自碰撞檢測(cè)高層裁剪優(yōu)化方法,其核心內(nèi)容可以總結(jié)為:高層裁剪 階段,第一步,結(jié)合層次包圍盒算法和連續(xù)法向量錐信息進(jìn)行基本的高層裁剪。為了提高裁 剪效率,第二步,在基本高層裁剪的基礎(chǔ)上,進(jìn)行基于放射視角的高層裁剪優(yōu)化,得到所有 可能發(fā)生碰撞的候選三角形對(duì)。最后一步,在基本高層裁剪及放射視角優(yōu)化的基礎(chǔ)上,進(jìn)行 基于孤立集的裁剪優(yōu)化,通過(guò)建立孤立集,裁剪掉候選三角形對(duì)中所有的鄰接三角形對(duì),進(jìn) 一步提尚自碰撞檢測(cè)的效率。
【發(fā)明內(nèi)容】
[0009] 本發(fā)明要解決的技術(shù)問(wèn)題是:克服現(xiàn)有技術(shù)的不足,提供一種衣物自碰撞檢測(cè)高 層裁剪優(yōu)化方法,針對(duì)虛擬衣物仿真這一具體應(yīng)用給出一種全新的自碰撞檢測(cè)優(yōu)化方法。
[0010] 本發(fā)明采用的技術(shù)方案:首先結(jié)合層次包圍盒算法和連續(xù)法向量錐信息實(shí)現(xiàn)基本 的高層裁剪,裁剪掉包圍盒不相交的區(qū)域和三角形對(duì)。在此基礎(chǔ)上,進(jìn)行基于放射視角的高 層裁剪優(yōu)化,通過(guò)放射視角測(cè)試,裁剪掉簇內(nèi)不可能發(fā)生碰撞的三角形對(duì),得到所有可能發(fā) 生碰撞的候選三角形對(duì)。最后,進(jìn)行基于孤立集的高層裁剪優(yōu)化,通過(guò)建立孤立集,裁剪掉 候選三角形對(duì)中的鄰接三角形對(duì),進(jìn)一步提高自碰撞檢測(cè)的效率。
[0011] 該方案實(shí)現(xiàn)的步驟:
[0012] (1)結(jié)合層次包圍盒算法和連續(xù)法向量錐信息實(shí)現(xiàn)基本的高層裁剪,裁剪掉包圍 盒不相交的區(qū)域和三角形對(duì);
[0013] (2)進(jìn)行基于放射視角的高層裁剪優(yōu)化,通過(guò)放射視角測(cè)試,裁剪掉簇內(nèi)不可能發(fā) 生碰撞的三角形對(duì),得到所有可能發(fā)生碰撞的候選三角形對(duì);
[0014] (3)進(jìn)行基于孤立集的高層裁剪優(yōu)化,通過(guò)建立孤立集,裁剪掉候選三角形對(duì)中的 鄰接二角形對(duì),進(jìn)一步提尚自碰撞檢測(cè)的效率;
[0015] 本發(fā)明與現(xiàn)有技術(shù)相比的有益效果是:
[0016] 本發(fā)明的高層裁剪優(yōu)化方法能夠有效的裁剪掉不發(fā)生碰撞的區(qū)域和三角形對(duì),提 高了自碰撞檢測(cè)和高層裁剪的效率,并且提高了衣物動(dòng)態(tài)仿真的仿真幀率。
【附圖說(shuō)明】
[0017] 圖1 一種衣物自碰撞檢測(cè)高層裁剪優(yōu)化方法步驟示意圖;
[0018] 圖2基本尚層裁剪實(shí)驗(yàn)結(jié)果不意圖;
[0019] 圖3基于放射視角的高層裁剪優(yōu)化實(shí)驗(yàn)結(jié)果示意圖;
[0020] 圖4基于孤立集的高層裁剪優(yōu)化實(shí)驗(yàn)結(jié)果示意圖。
【具體實(shí)施方式】
[0021] 下面結(jié)合附圖及【具體實(shí)施方式】對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。
[0022] (1)結(jié)合層次包圍盒算法和連續(xù)法向量錐信息實(shí)現(xiàn)基本的高層裁剪,裁剪掉包圍 盒不相交的區(qū)域和三角形對(duì);
[0023] 第一步,預(yù)處理階段,采用自頂向下的方法對(duì)衣物網(wǎng)格建立AABB層次包圍盒。
[0024] 網(wǎng)格所有三角形面片的集合記為S,包圍盒樹(shù)中每個(gè)節(jié)點(diǎn)對(duì)應(yīng)S的一個(gè)子集Sv。從 根節(jié)點(diǎn)開(kāi)始建立層次包圍盒BVH的步驟如下:
[0025] 1、計(jì)算節(jié)點(diǎn)對(duì)應(yīng)三角形集合S^AABB包圍盒b(Sv)。通過(guò)遍歷57中的三角形,得 到所有頂點(diǎn)位置在三個(gè)坐標(biāo)軸方向的最大值和最小值,構(gòu)成AABB包圍盒。
[0026] 2、確定分割平面和分割點(diǎn),對(duì)三角形集合的元素進(jìn)行劃分。本文選取的分割平面 垂直于包圍盒的最長(zhǎng)邊,分割點(diǎn)取該邊的中點(diǎn)8。根據(jù)每個(gè)三角形在包圍盒最長(zhǎng)邊方向上 投影的中點(diǎn)mid與分割點(diǎn)S的相對(duì)位置,將三角形集合\劃分成兩個(gè)不相交的子集,分別 對(duì)應(yīng)該節(jié)點(diǎn)的左右子節(jié)點(diǎn)。
[0027] 3、迭代的對(duì)左右子節(jié)點(diǎn)執(zhí)行步驟1、2,直至到達(dá)葉子節(jié)點(diǎn),葉子節(jié)點(diǎn)的S#包含一 個(gè)三角形。
[0028] 第二步,碰撞檢測(cè)階段,每個(gè)時(shí)間步長(zhǎng),采用自底向上的方法對(duì)層次包圍盒進(jìn)行更 新,包括節(jié)點(diǎn)的包圍盒信息和連續(xù)法向量錐信息。
[0029] 首先更新葉子節(jié)點(diǎn)的AABB包圍盒,對(duì)于連續(xù)自碰撞檢測(cè),需要計(jì)算整個(gè)時(shí)間步長(zhǎng) 內(nèi)三角形的包圍盒。由于步長(zhǎng)內(nèi)速度恒定,三角形在步長(zhǎng)內(nèi)的位置可以通過(guò)線性插值得到, 根據(jù)三角形在步長(zhǎng)起點(diǎn)處和步長(zhǎng)終點(diǎn)處的位置,計(jì)算出葉子節(jié)點(diǎn)的包圍盒。父節(jié)點(diǎn)的包圍 盒由左右子節(jié)點(diǎn)的包圍盒合并得到,自底向上合并直至得到根節(jié)點(diǎn)的包圍盒。
[0030] 同節(jié)點(diǎn)AABB包圍盒的計(jì)算方式相同,父節(jié)點(diǎn)的連續(xù)法向量錐信息由左右子節(jié)點(diǎn) 的法向量錐信息合并得到,合并過(guò)程如下:
[0031] 1、由左右子節(jié)點(diǎn)的錐軸向量計(jì)算當(dāng)前節(jié)點(diǎn)的錐軸向量
[0032] axis = axis_left+axis_right (3. 8)
[0033] 2、計(jì)算出左右子節(jié)點(diǎn)錐軸向量的夾角0
[0034] 3、由左右子節(jié)點(diǎn)的半錐角a