专利名称:一种改进的柔性织物碰撞处理方法
技术领域:
本发明涉及一种改进的柔性织物碰撞处理方法,属于柔性织物仿真技术领域。
背景技术:
织物自碰撞、织物与不规则物体的碰撞检测与响应,是柔性织物仿真中的一个重 要研究内容。织物自身各部分之间的碰撞,称为自碰撞;织物与外界其他物体的碰撞,如与 桌子、人体等的碰撞,称为他碰撞。碰撞处理的过程分为粗略检测阶段、精确检测阶段和碰 撞响应阶段。在以往的研究工作中,Provot在粗略检测阶段,提出了法向量锥法与包围盒树结 合的方法,用于在大范围上剔除不可能相交的区域。基元的精确检测阶段,研究者们提出了不同的检测策略。在一个碰撞步长内, Provot只做一次连续碰撞检测(CXD),使用共面条件计算出碰撞时刻,若该碰撞时刻在步 长内,且又符合相交条件,即谓检测到了碰撞。Bridson做了改进,在步长起点处,先做一次 逼近检测(Proximity),一旦检测到基元对之间最小距离小于织物厚度,即作弹开处理,该 方法在检测的准确性上优于Provot。Selle等人又在Bridson的基础上,提出了新的策略, 先是把碰撞步长分成k份(k为8 16),在做连续碰撞检测前,做k次逼近检测和运动积 分,以图放大逼近检测效率高的优势,另外加入了穿透检测,进一步提高了检测准确性。针对碰撞响应,研究者们采用了不同的响应方式进行计算。Provot在检测到碰撞 后,即简单处理,直接修改相关质点的速度法向上,作非弹性碰撞处理,即法向速度反向且 有一定损耗;切向上,等效库伦摩擦,对切向速度作直接修改。Bridson采用了冲量补偿的 形式进行修改,即对逼近或已经发生碰撞的基元对施加具有排斥(R印ulsion)效果的冲量 (Impulse),并把该冲量按一定的坐标分配规则分配到基元对相关的质点上,根据动量定理 修改质点的速度;同样模拟摩擦效果也采用等效的冲量补偿形式。Selle的方法由于加入 了穿透检测,对于穿透的情况,采用吸引冲量的形式进行补偿。传统碰撞处理方法主要存在以下一些问题(1)法向量锥法结合四叉包围盒树的应用上,没有完全利用空间连续性,每次检测 只检测父节点的法向量锥角。而由于四叉树两两子节点各自包含的三角面片区域之间是相 邻的,只要相邻即可以应用法向量锥法进行剪枝,否则,判断相邻区域的轨迹包围盒肯定是 相交的,而事实上它们不一定发生了碰撞,这样就造成了冗余的检测。(2)传统的法向量锥法中,自底向上的由子节点计算父节点的锥轴和锥角的方法 上有一定的错误,没有考虑子节点的半锥角大于等于n/2的情况;而且没有考虑到三角面 片的运动连续轨迹。(3)在一个碰撞步长内,对可能碰撞的基元对作精确检测,目前已有的检测策略各 有利弊,Provot和Bridson的方法效率较高,但正确性不高,多有穿透发生,Selle方法保证 了正确性,牺牲了效率。考虑到效率与正确性的平衡,需要一套更为合理的检测策略。(4)碰撞响应形式上,原有的方法在对碰撞基元进行处理时,或者直接修改质点速
3度,或者以冲量补偿的形式对其速度进行修改,均没有对碰撞表面基元的受力(支持力和 摩擦力)进行直接模拟。原有的响应方法对摩擦力的模拟并不明显,不能满足某些特殊仿 真场景的需要。针对以上问题,本发明提出了一种改进的柔性织物碰撞处理方法,其核心内容可 以总结为在粗略检测阶段,采用适用于四叉包围盒树的连续法向量锥法,借助两两子树间 计算法向量锥信息用于剪枝的方法,进行不可能相交的区域的进一步过滤;精确检测阶段, 采用一套合理的步长内基元检测策略,有效地保证碰撞检测的正确性;碰撞响应阶段,结合 冲量补偿模型和接触面受力模型计算碰撞响应,能够逼真的模拟非弹性碰撞和库伦摩擦的 效果。
发明内容
本发明要解决的技术问题是克服现有技术的不足,提供一个适应柔性织物自碰 撞、织物与不规则物体碰撞检测与响应的方法,提高碰撞处理的正确性和仿真的效率。本发明采用的技术方案对织物三角网格根据空间关系建立四叉包围盒树,使用 AABB包围盒;在粗略检测阶段,结合四叉包围盒树,使用改进的连续法向量锥法,较传统方 法进一步剔除掉不可能相交的区域;在精确检测阶段,对于一个步长内可能相交的基元对 实施一套合理的基元检测策略,并在检测过程加入了穿透检测和处理,尽可能的提高正确 率,保证无穿透;在碰撞处理方式上,采用冲量补偿模型和接触面受力模型两种方式进行处 理。该方案实现的步骤,如图1所示(1)对织物三角网格根据空间关系建立四叉包围盒树;(2)结合四叉包围盒树,使用改进的连续法向量锥法,剔除掉不可能相交的区域;(3)对于一个步长内可能相交的基元对,实施一套合理的基元检测策略,并在检测 过程加入了穿透检测和处理;(4)采用冲量补偿模型和接触面受力模型结合的方式计算碰撞响应。本发明与现有技术相比的有益效果是提高仿真效率,通过采用适用于四叉树的连续法向量锥法,过滤掉了更多未发生 碰撞的碰撞对,从而减轻后续精确检测阶段的负担。通过一套合理的基元精确检测策略,在 较高的运算效率上保证了碰撞处理的准确性,仿真过程中基本无穿透现象发生。碰撞响应 上,直接对支持力和摩擦力的模拟,使得库伦摩擦的仿真效果更为明显,满足了特殊仿真场 景的要求。
图1 一种改进的柔性织物碰撞处理方法步骤示意图;图2连续法向量锥示意图;图3由子节点法向量锥计算父节点法向量锥示意图;图4a和图4b夹角大于等于n的情况示意图;图5织物自碰撞仿真示意图;图6粗略检测阶段检测出的碰撞对数对比图;图7织物-不规则物体碰撞仿真示意图8a、图8b、图8c织物-转动球体碰撞仿真示意图。
具体实施例方式下面结合附图及具体实施方式
对本发明进一步详细说明。(1)利用织物几何基元的空间位置关系,构建结构紧密的四叉包围盒树;采用自上而下的方法递归建立四叉树。用四叉树描述层次包围体结构,将织物按 照4X4分割,一直分割到三角面片为止,即叶子结点为三角面片。(2)结合四叉包围盒树,使用改进的连续法向量锥法,剔除掉不可能相交的区域;第一步,计算三角面片的法向量锥,采用连续法向量锥法,计入整个步长内三角面 片法向量的变化轨迹,如图2所示,nO和nl为三角面片在步长起、终点的法向,其围成的圆 锥即三角面片的法向量锥。第二步,更新包围盒树的法向量锥信息,自底向上的计算树节点的锥轴和锥角。当 子节点的半锥角小于n/2时,仍按传统计算方法计算,如图3所示,由子节点的锥轴向量normal」和n0rmal_2计算出父节点的锥轴向量;normal = normal_l+normal_2公式 1再计算出normal_l和normal_2的夹角3 ;最后,由夹角0计算出父节点的半锥角。a =旦 /2+max ( a ” a2)公式 2当子节点的半锥角大于或等于Ji/2时,如图表4所示,(a)图表示理想情况下nl、 n2夹角刚好等于Ji,公式1已无法计算出父节点的锥轴向量n(结果为0向量),而且在三 维坐标下,即使使用垂直条件,也无法确定其方向为n还是n'、!1〃…(均与!!“!^垂直)。 而(b)图中夹角大于Ji的情况,如果按公式1,将得到错误结果n',正确的方向与织物开 口向相反n = -n'。由于无法确定父节点锥向量的方向,即不必继续计算父节点的锥轴,令 其半锥角值等于大于n/2的某数,如此不会影响检测的结果。第三步,检测过程,在四叉树中使用法向量锥法,为每个节点额外增设其子节点两 两间的法向量锥信息属性,每次检测前进行计算更新;检测时,对两两子节点进行检测时, 先检测其法向量锥半锥角值是否大于等于n /2,如果是,说明可能碰撞,继续检测,如果不 是,停止检测。算法伪代码如下1 SelfCollisionRoughDetection(A)2 If A is not leaf then3 If A. alpha >= ji /2then4 For allchildren A[i]do5SelfCollisionRoughDetection (A[i])6For all children A[i],A[j](i ! = j) do7If A. childAlpha[i] [j] >= Ji/2then8BoundingVolumeIntersectionTest(A[i], A[j])9End if10 End ifllEnd if
5
(3)对于一个步长内可能相交的基元对,实施一套合理的基元检测策略,并在检测 过程加入了穿透检测和处理;第一步,步长起点处,做一次当前位置的逼近检测,并处理。第二步,连续性碰撞检测,检测步长内发生的碰撞,并处理。第三步,步长终点处,为防止误差造成的意外穿透,做一次逼近检测,并处理。第四步,步长终点处,做一次略宽范围的逼近检测(即判断是否逼近的距离阈值 比一、三步骤所用的略大),并对符合逼近条件的基元相关质点计算其所受支持力和摩擦 力,用于下一步长的运动积分。以上处理过程均采用高斯_赛达尔迭代,即每对基元对被碰撞处理修改速度后, 立即用新的数据替代旧数据,后续的其他基元对的碰撞检测运算均使用更新后的数据(基 元之间可能共享点)。另外,本文在检测过程中加入穿透检测,在处理前(可以在第一步的逼近检测时) 先纪录下基元的相对位置信息,然后在以后的碰撞时刻或逼近时刻(第二步、第三步),计 算此时碰撞基元对的相对位置,与历史纪录相对比,若相同,则仍用补偿排斥冲量处理,若 不同,说明已穿透,则用补偿吸引冲量的方式处理,使得基元对相互吸引运动,回归到原来 的相对位置,从而起到修补穿透的效果。(4)采用冲量补偿模型和接触面受力模型结合的方式计算碰撞响应。在上述(3)节步骤一、二、三的检测后,使用冲量补偿模型计算碰撞响应。一是排 斥冲量,对于织物_织物自碰撞,采用完全非弹性碰撞,处理结果是彼此几乎无相对运动; 织物_固定物体碰撞,非弹性碰撞,但冲量补偿只作用在织物上,物体保持不动。二是吸引 冲量,自碰撞,采用相当于基元对两者交换法向速度的冲量补偿,使之恢复到不会穿透的状 态;织物_固定物体碰撞,物体不动,对织物补偿两倍原相对冲量的负数,相当于以原速度 反向运动。冲量的分配采用按坐标分配原则。如(3)节步骤四所述,检测后,使用支持力和摩擦力模型计算碰撞响应。在步长终 点处,做逼近检测,满足逼近条件的可以视为发生了接触,对接触面上的基元的受力进行了 直接的模拟,并且以显示的形式将质点所受的支持力和摩擦力,都作为质点受到的外力参 与到下一步长的仿真运动积分。由于织物所受内力弹力、阻尼力均为隐式形式表示参与积分,因此在计算相关质 点支持力时,忽略其他力(弹力、阻尼力、弯曲力等),取重力在接触表面法向上的分量,反 向,即为支持力Fn,摩擦力大小Ff = y *Fn,方向为相对运动方向的反向。将支持力与摩擦力作为质点所受外力的一部分参与到下一步长的仿真运动积分, 可以直接影响到下一步长积分的结果,即质点在下一步长的速度大小和方向。使得相关质 点在支持力和摩擦力作用下的运动行为的仿真效果,比仅仅只在碰撞步长内做补偿性的速 度修改模拟出的效果更为明显,这在某些仿真场景中是非常有必要的。如此,通过结合以上两种模型计算碰撞响应,逼真的模拟出织物与织物间、织物与 不规则物体间的非弹性碰撞和库伦摩擦的效果。改进的适用于四叉树的法向量锥法实验本实验的仿真场景如图表5所示,模拟 布料前后两片的自碰撞现象,织物的面片数为512,仿真步长为0. 01。取仿真过程中自碰撞发生最密集的几帧,统计本文改进方法和未改进方法每帧在粗略检测阶段检测出的可能发生逼近/碰撞的三角面片对数。如图表6所示,可以看出,本 文方法获得的碰撞对数量明显减少,即改进方法可过滤掉更多未发生碰撞的碰撞对,从而 减轻后续精确检测阶段的负担,提高仿真效率。步长内基元检测策略实验为了验证本文基元对检测策略的准确性和效率,本实 验设计了如图表7所示的仿真场景,模拟一块织物在重力下水平下落,与一个不规则物体 (兔子)发生碰撞,最后覆盖在兔子表面。织物的面片数为512,兔子模型的面片数为5110, 仿真步长为0. 002。首先,准确性比较上,本实验统计了 Pr0V0t、Brids0n、Selle和本文方法在仿真场 景中从第1帧到第1000帧发生穿透的次数,然后,本实验对各方法的效率作了比较,统计了 相应的平均仿真帧率,统计结果如下表所示。
权利要求
一种改进的柔性织物碰撞处理方法,其特征在于通过以下步骤实现(1)对织物三角网格根据空间关系建立四叉包围盒树;(2)结合四叉包围盒树,使用改进的连续法向量锥法,剔除掉不可能相交的区域;(3)对于步长内可能相交的基元对,实施基元检测策略,并在检测策略中加入穿透检测和处理;(4)对检测到的碰撞对,采用冲量补偿模型和接触面受力模型结合的方式计算碰撞响应。
2.根据权利要求1所述的一种改进的柔性织物碰撞处理方法,其特征在于所述步骤(2)中的结合四叉包围盒树,使用改进的连续法向量锥法,剔除掉不可能相交的区域方法如 下(2. 1)计算三角面片的法向量锥,采用连续法向量锥法,计入整个步长内三角面片法向 量的变化轨迹;(2. 2)更新包围盒树的法向量锥信息,自底向上的计算树节点的法向量锥信息,当子节 点的半锥角小于n/2时,按Provot方法计算;当子节点的半锥角大于或等于ji/2时,即不 必继续计算父节点的锥轴;(2. 3)检测过程,在四叉树中使用法向量锥法,为每个节点额外增设其子节点两两间的 法向量锥信息属性,每次检测前进行计算更新;检测时,对两两子节点进行检测时,先检测 其法向量锥半锥角值是否大于等于n /2,如果是,说明可能碰撞,继续检测,如果不是,停止 检测。
3.根据权利要求1所述的一种改进的柔性织物碰撞处理方法,其特征在于所述步骤(3)中的对于步长内可能相交的基元对,实施基元检测策略,并在检测过程加入穿透检测和 处理,方法如下(3. 1)在步长起点处,做一次当前位置的逼近检测,并处理; (3. 2)做一次连续性碰撞检测,检测步长内发生的碰撞,并处理; (3. 3)在步长终点处,为防止误差造成的意外穿透,做一次逼近检测,并处理; (3. 4)步长终点处,做一次略宽范围的逼近检测,并对符合逼近条件的基元相关质点计 算其所受支持力和摩擦力,用于下一步长的运动积分;在3. 1,3. 2,3. 3所述的检测过程中,加入穿透检测和处理;3.1,3. 2,3. 3所述的处理过程,均采用高斯-赛达尔迭代。
4.根据权利要求1所述的一种改进的柔性织物碰撞处理方法,其特征在于所述步骤(4)中的对检测到的碰撞对,采用冲量补偿模型和接触面受力模型结合的方式计算碰撞响 应,方法如下(4. 1)对检测到的碰撞对计算碰撞响应,使用冲量补偿模型,包括排斥冲量和吸引冲量;(4. 2)对在步长终点处最后检测到的满足逼近条件的基元对,视为发生了接触,对接触 面上的基元对采用支持力和摩擦力模型,计算碰撞响应;(4. 3)通过结合冲量补偿模型和接触面受力模型两种模型,计算碰撞响应,模拟出织物 非弹性碰撞和库伦摩擦的效果。
全文摘要
一种改进的柔性织物碰撞处理方法,其特点在于对织物三角网格根据空间关系建立四叉包围盒树,使用AABB包围盒;在粗略检测阶段,结合四叉包围盒树,使用改进的连续法向量锥法,较传统方法进一步剔除掉不可能相交的区域;在精确检测阶段,对于一个步长内可能相交的基元对实施一套合理的基元检测策略,并在检测过程加入了穿透检测和处理,尽可能的提高正确率,保证无穿透;在碰撞响应方式上,采用冲量补偿模型和接触面受力模型两种方式进行处理。其步骤是(1)对织物三角网格根据空间关系建立四叉包围盒树;(2)结合四叉包围盒树,使用改进的连续法向量锥法,剔除掉不可能相交的区域;(3)对于步长内可能相交的基元对,实施基元检测策略,并在检测策略中加入穿透检测和处理;(4)对检测到的碰撞对,采用冲量补偿模型和接触面受力模型结合的方式计算碰撞响应。
文档编号G06F17/50GK101984443SQ201010540130
公开日2011年3月9日 申请日期2010年11月10日 优先权日2010年11月10日
发明者何兵, 宋健, 王莉莉, 赵沁平, 郝爱民 申请人:北京航空航天大学