一种快速混合积分法的动态布料仿真
- 格式:doc
- 大小:33.50 KB
- 文档页数:6
柔性织物动态仿真的研究及实现鲁艳波;李英琳【摘要】介绍了一种毛衫织物动态仿真的方法.通过对影响织物动态仿真因素的综合分析,以毛衫织物为例,结合毛衫织物柔软、弹性好的特点,建立质点弹簧模型;利用二分法求解碰撞检测来降低运算的复杂度,以提高仿真速度;结合毛衫织物与球体碰撞时短暂“静止”的现象,以差别化求解碰撞响应方法计算质点受力、速度,从而实现了毛衫织物的仿真.实践表明采用该方法对毛衫织物进行动态仿真,效果比较逼真.【期刊名称】《天津工业大学学报》【年(卷),期】2013(032)005【总页数】5页(P6-10)【关键词】柔性织物;动态仿真;纺织CAD;质点弹簧;OpenGL【作者】鲁艳波;李英琳【作者单位】天津工业大学纺织学部,天津300387;天津工业大学纺织学部,天津300387【正文语种】中文【中图分类】TS941.26;TP391.7柔性织物动态仿真是纺织CAD的重要内容.在服装领域内,应用动态仿真技术可以让设计师与客户在计算机屏幕上直观地从各个方向和角度观察服装的穿着效果,并交互式地对服装款式、尺码进行修改、选择,极大提高了设计的效率;另外,在网上试衣、网络销售、3D动画电影及网络游戏等方面都有着广泛的前景.然而,织物仿真通常计算量大、复杂度高,在目前的普通PC机硬件平台上很难达到逼真、实时的效果,故降低计算量一直是织物仿真研究的重点.自1995年Provot[1]提出经典的质点弹簧模型以来,大量的研究都围绕着这个模型或其优化模型来试图降低运算量.也有大量学者在求解计算过程提出新的算法降低运算量,如Baraff等[2]采用隐式迭代把每次迭代的步长拉大,从而减少迭代的次数,降低了计算量;张宗国等[3]所研究的自适应库塔龙格方法,能够自动调整微分方程的步长进行求解,不仅减少了计算量也提高了精度.以上研究均注重于提高实时仿真速度,在模型设计及算法计算过程中没有考虑到不同织物结构给仿真过程带来的影响.本文根据毛衫织物弹性好、柔软的特点设计质点弹簧模型参数,利用二分法求解碰撞检测来降低运算量,并结合毛衫组织特点在碰撞响应时差别化求解质点的速度和受力.1 影响织物动态仿真效果的因素图1 织物仿真效果影响因素Fig.1 Influencing factors of clothing simulation 影响织物动态仿真效果的因素主要有建立织物运动的模型、碰撞处理、纹理贴图,如图1所示.在织物的运动过程中,纱线的非线性且各向异性的应力应变关系,使得柔性织物的运动规律不像刚体那样不易变形,也不像流体那样变化无约束.织物任何一部分的运动都会因针织物组织的相互串套影响其余部分的运动,影响程度也随距离和组织而变化.织物的不同组织结构、不同纱线种类等都会使织物模型有一定的不同,想要建立一个逼真的、能模拟出织物各部分真实运动的模型,而这个模型可以参数化以便适应不同特点的织物的情形是不可能的.这里,以毛衫为例根据毛衫具备的织物柔软、弹性好的特点设计质点弹簧模型的参数.在求解织物运动模型时必然涉及大量复杂的运算,尤其是在碰撞检测和碰撞处理求解时.如果不能及时进行碰撞检测,就会出现织物与场景中其他物体之间相互穿透和彼此重叠等失真现象.而且,碰撞检测和碰撞响应要在每时每刻进行,整个过程就需要大量的瞬时运算,运算量过大又会降低仿真过程的运行速度.整个碰撞检测与碰撞响应所需的运算时间通常占到整个仿真过程的40%以上.提高运算量取决于常微分方程组的求解方法,通常用的有欧拉法、中点积分法和高阶龙格库塔法及其优化方法.根据刘凌霞等[4]的研究,这里采用显式欧拉方法,因为考虑到仿真速度,质点受力除弹簧力和重力外其余都较小,这种情形可以保证较小的步长而不失系统的稳定性,速度也就越快.纹理贴图的优劣也决定着仿真效果的高低.织物纹理由二维的织物CAD软件设计得来,或来自真实织物的照片.其实质是一个二维空间里面存储的一些颜色信息,在纹理映射的过程中,确定织物表面的点与纹理空间中点的映射关系,按照一定的算法将纹理空间的纹理图案映射到织物的表面[5].纹理坐标和运动模型各个图元坐标的吻合程度和细分程度都影响着仿真效果,因为二维纹理都是以1个面图元为单位的映射,1个面又由3个点确定,而面中区域各点的颜色信息就根据这3点的颜色信息的线性插值而来.2 织物物理运动模型的建立为了方便起见,假定所研究的布料是矩形的,密度和厚度是均匀的,并忽略纱线受力各向异性带来的差异.一般布料厚度在视觉上与其长度和宽度相比可以忽略不计,这样布料就可假设为厚度为0的理想曲面.织物的运动可以分为拉伸运动、弯曲运动和剪切运动.因此模型可假设为:把织物划分成m×n的矩形网格,如图2所示.图2 毛衫织物的质点弹簧模型设计Fig.2 Mass-spring model of wool fabric图2中,每一个网格结点是一个虚拟质点,每个质点和其相邻的质点用一个弹簧相连,弹簧没有质量且长度不为0.质点直接通过弹簧以3种连接方式分别约束织物的拉伸变形、剪切变形和弯曲变形.连接质点(i,j)和(i+1,j+1)、连接质点(i+1,j)和(i,j+1)的弹簧叫剪切弹簧,约束织物的剪切变形;连接质点(i,j)和(i+2,j)、连接质点(i,j)和(i,j+2)的弹簧叫弯曲弹簧,约束织物的弯曲变形.连接质点(i,j)和(i+1,j)、连接质点(i,j)和(i,j+1)的弹簧叫结构弹簧,约束织物的拉伸变形.整块布料可以看作一系列均匀分布的离散点[6].通常结构弹簧弹性系数很大,用于阻止布料在经纬2个方向产生过度的拉压变形;剪切弹簧用于模拟面料内倾斜方向的作用力,弹性系数较大,以阻止斜向的过度变形;弯曲弹簧较特殊,连接的是经纬2个方向相隔的质点,用于模拟布料在弯曲或折叠时的抗弯曲性能,其弹性系数很小[1].但是毛衫织物柔软、弹性很好,织物运动时的弯曲形变和剪切形变也比较大,其质点弹簧模型的弯曲弹簧、剪切弹簧的弹簧系数也应较大.质点的数量也不是越多越好,质点数量越多,运算量越大,仿真效果也越好.通过多次试验比较,采用24×24=576个质点建立模型,各个质点的质量m=1 g,所受力为重力G=mg=9.8 N,3种弹簧的弹簧系数分别为:结构弹簧弹簧系数为10 N/mm,阻尼系数为0.5 Ns/mm;剪切弹簧弹簧系数为4 N/mm,阻尼系数为0.5 Ns/mm;弯曲弹簧弹簧系数为0.9 N/mm,阻尼系数为0.7 Ns/mm.3 二分法碰撞检测和差异化碰撞响应碰撞检测是发现碰撞并报告,碰撞响应是在碰撞发生后,根据碰撞点、质点在碰撞时刻的位置、速度、受力等参数,瞬时改变质点的速度及受力.采用质点弹簧模型,主要的碰撞检测是检测点、面之间的碰撞.通常的碰撞检测方法是利用沿坐标轴的包围盒方法,有AABB包围盒和ABB包围盒等[7].而采用球体作为碰撞对象,只需求得每个质点与碰撞球之间的距离r,然后与球体半径R比较,若r<R就表示质点已经渗透到了球体内.3.1 二分法检测的实现先设定一个阈值作为碰撞检测的允许误差,越小越好,这里选取0.001 mm,然后在任意时刻t计算所有质点在t+Δt时刻与所有碰撞面之间的距离d=r-R,当0<d<0.001 mm时,t+Δt时刻即为碰撞时刻及碰撞点;当d<0时,此时发生了质点渗透到碰撞点内部的情形,如图3所示.此时则需要调整Δt,使时间步长Δt 减半,即Δt=Δt/2再重新进行检测,如此不断循环[8].这样,运算效率较高且系统稳定.图3 二分法点面碰撞渗透处理Fig.3 Solution of point-face collision and permeation根据牛顿力学原理,质点(i,j)随时间运动的受力、加速度、速度和位移如式(1)所示:式中:Δt为时间间隔为质点(i,j)在任意时刻t所受到的合力,包括剪切弹簧力结构体弹簧力弯曲弹簧力、重力、阻尼力和其他力为质点(i,j)在任意时刻 t所受到的加速度为质点(i,j)在任意时刻 t的速度为质点(i,j)在任意时刻 t的位置;包括考虑风力、碰撞力和其他施加的人工作用力,在这里仅考虑碰撞力.在整个碰撞处理过程中要时刻求解常微分方程组(1),有效的数值积分法有欧拉积分法、中点积分法和高阶龙格库塔方法.根据文献[3]的研究,这里采用显示欧拉积分法求解.虽然方程组(1)是时间域上的二阶微分方程,但是欧拉法的思想是用差商代替微商,可以把二阶方程组降阶为一阶方程组.令Δt为时间步长,对于初始条件 x(t0)=x0,x在下一刻t+Δt的值为 x(t0+ Δt),欧拉方法对于 x(t0+ Δt)的计算公式为所以,质点在任意时刻的加速度、速度和位置均可依次推出.其局部截断误差考虑到运行效率,求二阶即可,即3.2 差异化碰撞响应的实现检测到碰撞发生后,就要及时进行碰撞响应,以避免发生穿越交叠等失真现象.所以碰撞响应就是要改变碰撞质点的速度大小和方向、受力的大小和方向.在以往的织物仿真中,通常是在碰撞面设置一个向量场或给织物质点施加一个向外的瞬时足够大的作用力,在碰撞后,把质点的受力与速度的改变按照同一算法进行处理[9],称之为质点速度、受力的一致性响应,如图4所示.图4 质点速度、受力一致性响应Fig.4 Consistency response of particle velocity and force这种作法会造成一定程度的不真实效果,在碰撞响应的瞬间会看到个别质点有“跳动”现象,这明显不符合毛衫织物的特点.毛衫织物弹性好,柔软度高,其与球体碰撞时,在碰撞之后会在织物内把弯曲的线圈拉直,这个过程虽然需要极短的时间,但是碰撞本身就很短,不能将其忽略.在碰撞的这一刻,毛衫织物不仅不会有“跳动”现象,反而会有短暂的“静止”现象.根据毛衫织物的这一特点,本文采用质点速度和受力的差别化响应方法,如图5所示.图5中,质点的速度按照动量守恒定律计算,而质点受力则完全大小相同,方向相反.图5 质点速度、受力差异化响应Fig.5 Differences in response of velocity and force4 织物的纹理映射为了达到较好、真实的效果,本文选取毛衫织物的实物照片进行纹理映射.为了能够进一步观察毛衫织物中线圈长度不同时的仿真效果,选取平针部分和移圈部分交替相间的阿兰花组织面料.其中,移圈部分又有明显的“孔洞”和纱线密集区,这两部分的线圈长度不一样,仿真时可比较观察.实物映射时,把整个纹理坐标划分为[0,1]之间的二维数组,分别对应于运动模型中纵横各个质点的坐标.实物图像的纹理信息通过OpenGL函数读入事先分配好的二维数组,假设把纹理图案放在一个正交坐标系中,纹理坐标的最大值是1,最小值是0,这样纹理任意一点的信息都可以被使用.在用OpenGL绘制时根据在该坐标点指定的纹理颜色进行绘制,而其余没有给定颜色的模型图元则按照线性插值求出其颜色数据.结合前面的质点弹簧模型共用576个质点,529个平面,其中每一个四元数(4个相邻质点)确定一个面,并应用对应的一部分纹理.5 织物仿真的实现基于Microsoft Visual C++6.0开发平台和OpenGL三维图形库[10].首先,建立织物参数设置模块,设定织物物理运动模型参数,如质点数量、质量、弹簧系数、阻尼系数和选择纹理等;其次,给织物添加初始力,此处仅为重力,织物开始运动;最后,循环计算织物在运动过程中受力、加速度、速度和位置的变化,时间间隔为Δt,Δt可以人为设定大小,也可按照最小值计算(即绘图函数每次调用的间隔).当有质点渗透到碰撞球内时,则调用Δt=Δt/2,再重新计算质点的参数;当碰撞发生时则立即调用碰撞响应函数对质点的受力、速度参数进行处理.整个过程不断循环,直至退出系统[11].其实现流程图如图6所示.每一个质点在任何一刻的速度大小和方向都各不相同,需要通过求解常微分方程组计算出任意时刻质点的受力、加速度和速度,并在Δt内求出下一刻的质点位置和受力、速度等.利用显示欧拉方法对整个常微分方程组进行求解.图6 织物仿真实现流程图Fig.6 Structure chart of clothing simulation6 仿真效果分析对于不同组织结构的毛衫织物,可以根据织物的力学运动差异,改变质点弹簧模型中各类弹簧的参数来模拟,但通常需要多次调整参数才能达到理想效果.图7为最终得到的毛衫织物运动仿真效果图.图7 织物动态仿真效果图Fig.7 Effect picture of dynamic clothing simulation 图7仿真效果表明,毛衫织物的质点弹簧模型中弯曲弹簧和剪切弹簧都应较大,但质点数量不能过大;利用二分法求解点、面的碰撞检测能够提高仿真速度,但是仅限于碰撞体表面简单、迭代步长小的情形;毛衫织物的模型质点速度、受力的差别化响应更能模拟出织物在碰撞时的真实情形.7 结束语本文所提出的织物动态仿真方法对于毛衫织物的仿真是一种可行的方法.毛衫织物中线圈长度较大,弯曲度高,在建立质点弹簧模型时要选取较大的弯曲弹簧系数和剪切弹簧系数.利用二分法求解较小步长且迭代简单的微分方程组可以提高仿真速度.毛衫织物柔软、弹性好的特点使其与球体碰撞时会有短暂“静止”现象,利用质点速度受力差异化响应的方法可获得更好的仿真效果.对于不同织物的仿真,应根据此类织物的受力运动特点,建立动态模型并应用不同优化算法才能达到更好的效果.参考文献:【相关文献】[1]PROVOT X.Deformation constraints in a mass-spring model to describe rigid cloth behavior[C]//Proceedings of Graphics Interfaces 95.Quebec:[s.n.],1995:147-154.[2]BARAFF D,WITKIN rge steps in cloth simulation[C]//Computer Graphics Proceeding(SIGGRAH).Orlando:[s.n.],1998:43-54.[3]张宗国,罗笑南.基于自适应龙格库塔方法的柔性织物仿真[J].计算机应用研究,2004(12):170-172.[4]刘凌霞,宋强.基于简化的质点弹簧模型织物变形仿真研究[J].计算机仿真,2011,28(5):406-409.[5]王跃存,李晓慧,刘丽杰.织物纹理与计算机仿真[J].天津工业大学学报,2006,25(5):21-24.[6]纪峰,李汝勤.基于粒子-弹簧系统的面料仿真模型[J].纺织学报,2004,25(2):42-44.[7]ERISON Christer.实时碰撞检测算法技术[M].刘天慧,译.北京:清华大学出版社,2010.[8]沈照功,潘振宽.基于质点弹簧模型的布料仿真及碰撞检测方法[J].计算机仿真,2006,26(3):284-287.[9]柳杨,孙守迁,徐爱国.织物物理模拟与三维服装实时仿真技术[J].纺织学报,2008,29(7):76-82.[10]吴梦熊.三维织物动态仿真真实感技术研究与实现[D].上海:东华大学,2008.[11]BOARD Review,SHREINER Dave,WOO Mason.OpenGL编程指南[M].徐波,译.北京:机械工程出版社,2008.。
研究与技术丝绸JOURNALOFSILK结合QEM的布料层次化动态模拟方法AhierarchicaldynamicsimulationmethodforfabricscombinedwithQEM马晓彤ꎬ祝双武ꎬ王世豪ꎬ李丑旦ꎬ马阿辉(西安工程大学纺织科学与工程学院ꎬ西安710048)摘要:在布料仿真过程中ꎬ基于位置的动力学方法(PositionBasedDynamicsꎬPBD)在布料模拟的效果及实时性方面展现了其优越的性能ꎬ但在布料网格精度提升时ꎬ为了加快其收敛速度而增加迭代计算次数ꎬ会导致模拟效率大幅降低及约束震荡现象的出现ꎮ为了解决以上问题ꎬ文章结合对位置动力学方法的研究ꎬ提出一种以多重网格思想为核心的布料模拟方法ꎬ采用基于二次误差度量(QuadricErrorMetricsꎬQEM)的网格简化法对布料多重网格进行构建ꎬ同时结合空间插值算法进行层与层之间的数据传递及位置矫正ꎬ可以构建出质量良好的三角网格结构ꎬ避免不规则多边形的出现ꎻ在布料层次化模拟的基础上ꎬ提出结合逐次超松弛迭代法(SuccessiveOverRelaxationꎬSOR)与Gauss ̄Seidel方法(GS)的混合平滑方案并验证了其有效性ꎮ经实验分析ꎬ布料层次化模拟方法提高了质点数目增加后的收敛速度ꎬ具有一定的稳定性ꎮ关键词:布料模拟ꎻ几何多重网格ꎻ二次误差度量ꎻ网格简化ꎻ迭代计算ꎻ虚拟仿真中图分类号:TS941.2㊀㊀㊀㊀文献标志码:A㊀㊀㊀㊀文章编号:10017003(2023)12006809引用页码:121109DOI:10.3969/j.issn.1001 ̄7003.2023.12.009收稿日期:20230222ꎻ修回日期:20231028基金项目:陕西省教育厅科研计划项目(18JS042)ꎻ中国纺织工业联合会科技指导性项目(2019057)作者简介:马晓彤(1997)ꎬ女ꎬ硕士研究生ꎬ研究方向为数字化纺织ꎮ通信作者:祝双武ꎬ教授ꎬ294082077@qq.comꎮ㊀㊀20世纪以来ꎬ对刚体㊁流体㊁布料及软体等可变形对象的模拟是计算机图形学领域的重要研究话题ꎮ与更为追求结果准确性的学科相比ꎬ基于物理的模拟领域主要关注的问题是稳定性㊁模拟速度及视觉上的合理效果ꎮ布料模拟主要应用于电影电视㊁计算机游戏㊁纺织服装设计等领域ꎬ模拟现实世界中布料在某一刻的运动形态ꎬ近几十年来宝贵的理论和技术方法层出不穷[1]ꎮ关于布料物理模型的建立ꎬ离散体模型采用离散质点进行布料建模ꎬ通过质点之间的相互作用力来维持布料在运动时的形态ꎬ典型方法如质点 弹簧模型[2]㊁粒子模型[3]ꎻ连续体模型将布料看作连续介质对其进行建模ꎬ典型方法如弹性变形模型㊁有限元方法[4]等ꎮ建立布料模型后ꎬ按照传统模拟流程需要对布料质点进行受力分析ꎬ根据牛顿力学公式计算质点的加速度ꎬ进而求出速度和位置ꎮ在时间积分法中ꎬ隐式欧拉积分[5]在求解时允许使用较大的时间步长对布料进行模拟并保证了系统的稳定性ꎬ但隐式积分涉及非线性方程的求解问题ꎬ计算较为复杂ꎻLiu等[6]将非线性系统的求解转化为最优化问题ꎬ将原方程的求解等价于最优化问题目标函数的极值求解ꎬWang等[7]提出了一种使用雅可比预处理和切比雪夫加速的新梯度下降方法ꎬ提高收敛速度的同时降低了计算成本ꎻBouaziz等[8]在文献[6]的基础上提出了投影动力学ꎬMüller等[9]提出了基于位置约束的动力学方法(PBD)ꎬ使用几何约束的概念来代替布料模型内部的弹性力ꎬ在每个时刻只需要访问质点位置ꎬ降低了内存访问的频率和计算成本ꎬ减少了数据之间的相互依赖ꎬ在固体㊁流体㊁布料等形变体方面都有对应的模拟方法[10 ̄11]ꎬ因此PBD广泛应用于游戏㊁仿真等领域ꎮ虽然PBD方法的计算过程较适合于实时模拟的场景ꎬ但其运行速度和布料整体模拟效果会受到网格分辨率及迭代计算次数的限制ꎮ当布料网格分辨率较低时ꎬ较少的迭代次数就可以使质点的位置快速矫正ꎬ运行速度较快ꎬ对于高分辨率网格而言运行效率则明显下降ꎮ为了提升PBD方法在高分辨率布料网格上的收敛速度ꎬ缓解其依赖约束求解顺序造成的收敛慢等问题ꎬ基于多重网格思想的层次化模拟方法[12]应运而生ꎮ多重网格是将原始精细网格逐步粗糙化ꎬ构建多层次㊁质点规模递减的网格序列ꎬ根据计算过程中的误差分量收敛特性ꎬ快速消除高频误差ꎬ将收敛较为缓慢的低频误差转移到粗网格中去消除ꎬ避免单层布料网格迭代次数的显著增加ꎮ86第60卷㊀第12期结合QEM的布料层次化动态模拟方法Müller[12]将多重网格方法引入到基于位置约束的模拟中(HierarchicalPositionBasedDynamicsꎬHPBD)ꎬ从精细网格中挑选质点子集作为下一层较粗糙网格的点ꎬ将精细层网格中的位置预测值自顶向下传递ꎬ再由粗糙网格迭代计算后向上一层较精细网格延伸ꎬ提升了PBD方法的模拟速度ꎮHPBD方法基于初始网格的信息在较粗糙网格上创建新约束ꎬ而没有直接在粗细网格之间进行约束的传递ꎬJeon等[13]提出了一种基于软约束的约束粗化方法并应用到隐式积分上ꎬ使得多重网格方法更好地应用于布料及服装模拟中ꎻXian等[14]提出了基于Galerkin多重网格法的仿真方法ꎬ采用最远点均匀采样法构建多重网格ꎬ使用分段常数权重由粗糙网格向较精细网格插值ꎬ可以使用不同的迭代计算方法及多重网格迭代模式ꎻ靳雁霞等[15]使用粒子群算法对布料表面进行搜索ꎬ优化了多精度布料的建模速度和精度ꎻ郑华等[16]对基于位置约束的层次化模拟进行了改进ꎬ使用决策函数法构建各层布料网格并提出一种关联模型来确定父子间的权值信息ꎬ其收敛速度可以使模拟效果较快地达到理想状态ꎬ具有一定的稳定性ꎮ这些文献皆对层次化布料模拟做出了贡献并各有侧重点ꎬ本文同样进行了层次化布料模拟方法的研究ꎬ采用基于二次误差度量的边折叠策略对布料几何多层网格进行构建ꎬ得到的层次网格模型可以维持稳定的约束效果ꎮ同时提出一种混合平滑方案ꎬ结合SOR法及GS法各自的优点来对布料系统进行迭代求解ꎮ由于质点受其周围相连拓扑结构的粒子信息影响ꎬ结合空间插值方法反距离加权(InverseDistanceWeightedꎬIDW)在层次网格间进行父子点权重信息的计算和矫正信息的传递ꎬ可以使待插值点获得较为平滑的结果ꎮ实验过程中采用布料自由落体后悬垂㊁与球体碰撞交互等方式进行了测试ꎬ均显示模拟效果良好ꎮ1㊀模拟方法概述1.1㊀多重网格方法在PBD方法中ꎬ质点的目标位置在多个约束的求解过程中不断受到影响ꎬ如果过度增加迭代次数会导致模拟效率降低ꎮ对单层网格粗化后进行迭代也可以提高收敛速度ꎬ却会降低网格精度ꎮ因此ꎬ在模拟中使用层次化的网格结构ꎬ提高布料分辨率的同时还可以提升计算速度ꎬ是一种高效可行的模拟方法ꎮ多重网格法(MultigridꎬMG)广泛地应用于数值计算领域[17]ꎬ核心思想是利用各粗细层次网格之间的连接关系来降低求解布料系统或其他问题时的计算量ꎮ在布料模拟过程中ꎬ较粗糙网格上的约束组成规模相对较小的方程组ꎬ采用Gauss ̄Seidel等迭代方法在层次网格之间进行计算ꎮ多重网格方法虽然增加了网格层数ꎬ并且需要为每一层网格单独建立约束ꎬ但因为迭代次数的减少ꎬ在达到同样的模拟效果时ꎬ总的计算量会少于单层网格ꎬ有效提高迭代算法的收敛速度ꎬ构建流程如图1所示ꎮ图1㊀布料多重网格结构Fig.1㊀Fabricmulti ̄gridstructure1.2㊀基于多重网格的层次化模拟将多重网格方法应用到布料模拟过程后ꎬ将原始网格定义为最精细的一层ꎬ通过在上一层较精细网格中挑选质点子集来构造下一层较粗糙网格ꎬ在挑选时要保证当前网格的每个质点在它的质点子集中至少有两个连接点ꎬ避免出现质点丢失或重复的情况ꎮ将为下一层网格挑选出的质点标记为coarseꎬ而fine则为要剔除的点ꎬ必须要保证质点子集内部的连通性ꎬ方便后续为其构建约束关系ꎬ还要在coarse点和fine点之间建立父子关系ꎬ用于传递矫正信息ꎮ文献[12]中以PBD原理为基础实现了层次化的位置动力学模拟ꎬ本文以质点的距离约束为例ꎬ位置矫正过程如下所述ꎮC(p1ꎬp2)=|p1-p2|-d(1)式中:C(p1ꎬp2)表示距离约束函数ꎬp1㊁p2为进行距离调整的质点位置ꎬ|p1-p2|为两点间的实际距离ꎬd为两点间的原长ꎮ当函数等于0不成立时ꎬ需要找到位移修正量Δp对质点的预测位置进行矫正ꎮ此外ꎬ模拟在三维空间中进行ꎬ求解约束方程时可能产生多个解ꎬ需要添加另外的约束来指定Δp的方向ꎮ将Δp限制在约束的梯度方向来使系统最快稳定ꎬ保持96Vol.60㊀No.12AhierarchicaldynamicsimulationmethodforfabricscombinedwithQEM系统的动量和角动量守恒ꎬ如下式所示ꎮΔp=λ∇pC(p)(2)式中:标量λ为缩放系数ꎬ用于控制梯度方向上的变化幅度ꎮ下一步对距离约束函数在点p1㊁p2处分别求梯度ꎬ如下式所示ꎮ∇p1C(p1ꎬp2)=p1-p2|p1-p2|(3)∇p2C(p1ꎬp2)=-p1-p2|p1-p2|(4)将式(3)(4)代入式(2)可求出距离约束中两点的修正量Δp1和Δp2ꎬ并将其施加到原位置即可完成矫正ꎬ如下式所示ꎮΔp1=-w1w1+w2(|p1-p2|-d)p1-p2|p1-p2|(5)Δp2=+w2w1+w2(|p1-p2|-d)p1-p2|p1-p2|(6)本文对文献[12]中方法进行了实践ꎬ布料进行悬垂㊁碰撞交互的模拟效果如图2所示ꎮ图2㊀层次化位置动力学模拟效果Fig.2㊀Hierarchicalpositiondynamicssimulationresults采用多重网格进行布料模拟ꎬ具体流程如下:①基础网格模型的建立ꎮ完成初始网格质点及其约束信息的建立过程ꎮ②确定层次间网格质点的简化规则ꎮ进行多层网格的粗化过程ꎬ决定质点是否剔除及剔除的先后顺序ꎬ标记出coarse点及fine点ꎮ③进行层次网格的构建ꎮ建立每层网格的约束信息集合ꎬ保持网格连通ꎬ避免出现孤立点ꎬ删除多余的连接边ꎮ④进行层次间信息传递ꎮ构建好各层网格之后ꎬ建立层次之间的连接关系ꎬ用于原始数据和矫正信息的传递ꎮ⑤选择迭代方法对层次网格系统进行求解ꎬ然后对原始网格质点位置进行矫正ꎮ2㊀基于二次误差度量策略的层次化方法按照前文模拟流程ꎬ下一层网格质点的选择及层次网格构建是解决这个问题的核心步骤ꎮ本文使用文献[12]方法对布料进行模拟时发现ꎬ当网格层数逐渐增加ꎬ为网格简化所挑选出的质点数目是不均匀的ꎬ在后续层次之间传递矫正信息时也会影响到函数执行效率ꎮ同时构造出的网格会有不规则多边形的出现ꎬ无法保证网格的全局三角结构ꎬ对布料进行约束求解时ꎬ网格整体的约束效果和理论状态会产生区别ꎬ那么在最终模拟效果的表现上就会与单层网格收敛状态有一定的误差ꎮ基于以上原因ꎬ构造高质量的布料网格是非常必要的ꎮ本文采用边折叠法ꎬ基于二次误差度量策略来构建多重网格ꎬ该方法在众多模型简化算法当中具有相对较高的计算速度和较小的内存消耗ꎮ将其引入到布料层次化模拟中ꎬ通过控制简化率来建立层次网格ꎬ可以在较短的时间内生成质量较好的三角网格ꎬ除简化布料规整模型外ꎬ也适合于三维服装模拟中层次网格的构建ꎬ较大程度地保留不规则模型的细节特征和质点分布情况ꎮ2.1㊀层次网格的构建边折叠方法[18]基于能量函数优化挑选网格中的边进行精简ꎬ将边折叠成一个顶点ꎬ并从网格中减去这条边相连的所有三角形ꎬ及时修改边折叠后周围的几何拓扑信息ꎮ可将其分为全边折叠与半边折叠ꎬ其中半边折叠的合并顶点位置是原边两个端点之一ꎬ简化后的网格模型中的顶点是原模型的子集ꎬ它可以更加快速地在层次网格之间传递矫正信息ꎬ相较于全边折叠只需要更少的存储空间ꎬ具有更高的网格构建速度ꎮ基于布料模拟实时性和高效率的要求ꎬ本文选择简化效率更高的半边折叠方法来完成粗细网格的建立ꎮ对边(v1ꎬv2)进行简化ꎬ顶点v1合并到v2的位置ꎬ并对周边拓扑信息进行修改ꎬ如图3所示ꎮ图3㊀半边折叠示例Fig.3㊀Anexampleofhalf ̄edgecollapse在边折叠算法中有两个问题需要关注ꎬ边折叠的顺序和新合并顶点的位置ꎮ新顶点的位置根据半边折叠规则确定ꎬ边折叠的顺序则依据二次误差度量策略[19]ꎬ进一步降低边折叠方法的时间复杂度ꎬ获得较优简化效果的同时提高计算效率ꎮ网格中每个顶点看作周围三角面所在平面的交集点ꎬ设plane(v)为点v关联的所有三角面集合ꎬ每个平面方程如下式所示ꎮax+by+cz+d=0(a2+b2+c2=1)(7)式中:p=[a㊀b㊀c㊀d]T代表平面方程的系数ꎮ每个三角网格所在平面拥有一个Kpꎬ表示为基本误差矩阵ꎬ如下式所示ꎮ07第60卷㊀第12期结合QEM的布料层次化动态模拟方法Kp=ppT=a2abacadabb2bcbdacbcc2cdadbdcdd2éëêêêêêùûúúúúú(8)网格中的每个顶点拥有一个4ˑ4误差矩阵Qꎬ对该顶点的所有Kp求和得到ꎬ如下式所示ꎮQ=ðpɪplane(v)Kp(9)将顶点的位置到它所有关联三角形面的距离平方和定义为折叠误差ꎬ首先初始化网格中所有点的误差矩阵Q和误差代价Δ(v)ꎮ统计所有参与折叠的边ꎬ在每条边(v1ꎬv2)的两个端点中选择代价较小的点ꎬ选作新合并点vꎬ后续将该边折叠到该点ꎮQ1㊁Q2分别为原两端点的误差矩阵ꎬ对合并顶点v的位置进行更新后ꎬ其误差矩阵更新为Δ(v)=Q1+Q2ꎬ折叠误差可以通过二次项表达式Δ(v)=vTQv重新计算得出ꎮ根据计算出的误差代价对所有边进行排序ꎬ构建最小堆ꎬ依次折叠当前误差代价最小的边ꎬ删除所有的退化边和三角形ꎬ并更新受该边影响的其余边的折叠误差及新合并顶点v的位置ꎬ直到满足该层网格简化条件ꎮ综合以上过程ꎬ本文将基于二次误差度量的网格简化和布料模拟流程进行了结合ꎬ对网格建立方案进行了分析和设计ꎬ构建流程如图4所示ꎮ图4㊀层次化构建流程示意Fig.4㊀Flowchartforahierarchicalbuild㊀㊀在简化过程中要避免网格重叠的问题ꎬ对边折叠前后三角所在平面的法向量进行计算ꎬ通过点积计算两个向量的夹角并判断当前两个向量的朝向ꎮ如果折叠前后的法向量点乘小于0ꎬ即两向量夹角大于90ʎꎬ则折叠该边后出现了网格重叠ꎬ呈现不合理的布料网格拓扑ꎬ会产生错误的计算结果进而影响模拟效果ꎬ需要进行法线翻转对网格结构进行调整ꎮ同时ꎬ注意不是所有的边都满足折叠条件ꎬ为了维持布料网格形状ꎬ在折叠时要进行边界判断ꎮ如果包含该边的三角面只有一个ꎬ则当前选中的待折叠边是网格边界ꎬ要进行边界保持ꎬ将位于布料网格边界的质点定义为保持点ꎬ保持点不可以折叠到布料网格内部ꎮ图5(a)(b)分别为网格折叠和未进行边界保持的错误构建效果ꎬ图5(c)(d)中则是布料悬挂状态下正确结果和错误结果的对比ꎮ通过以上分析ꎬ层次质点的选择和层次网格的重建在边折叠的过程中完成ꎬ采用以上方法进行三层布料网格构建的实验效果如图6所示ꎮ图5㊀错误简化效果示例Fig.5㊀Examplesofincorrectsimplifiedgraph17Vol.60㊀No.12AhierarchicaldynamicsimulationmethodforfabricscombinedwithQEM图6㊀基于QEM方法构建三层网格Fig.6㊀Constructionofthree ̄layergridbasedonQEMmethod2.2㊀层次网格的关联构建好布料多层网格后进行层次网格之间数据信息的传递ꎬ将与fine点相连的所有coarse点视为其父节点ꎬ此时需要确定fine点与其父节点之间的权重信息ꎬ并根据权重及父节点位置来更新fine点ꎬ如图7所示ꎮ图7㊀质点分布示例Fig.7㊀Anexampleofpointdistribution本文借鉴了反距离加权法的思想进行插值ꎬ它常用作大规模地形模型中数据的处理ꎬ假设网格中每个已知数据输入点对周围其余顶点都有局部的影响ꎬ且与距离相关ꎮ本文以图7为例ꎬ将当前层布料网格中的coarse点视为样本点ꎬ而fine点为待插值点ꎮ以样本点与待插值点间的距离为权重进行加权平均ꎬ距离待插值点越近的样本点分配的权重越大ꎬ即权重随距离的增大而减小ꎮ首先计算待插值点到所有影响它的样本点的距离di(i=1ꎬ2ꎬ ꎬn)ꎬ随后计算每个样本点的权重wiꎬ如下式所示ꎮwi=d-piðnj=1d-pj(10)式中:p为幂值ꎬ样本点的权重与反距离的p次幂成正比ꎬ它决定了权重的下降速度ꎮp值较大时ꎬ距离较远的样本点权重会迅速减小ꎬ待插值点更接近邻近样本点的值ꎻp值较小时ꎬ网格质点数据更加平滑ꎮ计算出权重后ꎬ根据下式对其位置进行加权计算ꎬ更新fine点位置ꎮP^(x0ꎬy0ꎬz0)=ðni=1wiP(xiꎬyiꎬzi)(11)3㊀混合平滑方式3.1㊀平滑方法的选择在几何多重网格的V ̄cycle过程中ꎬ预平滑首先用于改进模拟的初始值ꎬ旨在通过减小误差来降低后平滑所需的迭代次数ꎮ预平滑与后平滑常结合起来用于加速线性方程组的收敛ꎬ进一步降低网格中的残差ꎬ并增加迭代的稳定性ꎮSOR迭代法是GS法的改进ꎬ在迭代计算的基础上引入一个松弛因子wꎬ进行加权平均以求解方程组ꎬ松弛因子的取值会直接影响到算法的收敛性和速度ꎬ甚至可以使发散的迭代过程变得收敛ꎮ层次化模拟旨在改善网格分辨率增加后计算速度下降的问题ꎬ而SOR迭代法恰好适合在网格尺寸较大时使用ꎬ其简化计算公式如下式所示ꎮxk+1=xk+wrk(0<w<2)(12)式中:xk+1和xk分别为第k+1次和第k次的迭代结果ꎻrk为第k+1次迭代的修正量ꎻw为松弛因子ꎬ其最合适的取值需要在计算过程中具体分析[20]ꎮ3.2㊀不同方法的对比分析相比于GS和Jacobi作为预㊁后平滑方案ꎬSOR具有更好的局部平滑性和全局收敛性ꎬ能够更有效地消除数值误差ꎮ为了进一步验证SOR迭代的先进性ꎬ本文基于PBD方法ꎬ设置51ˑ51的布料网格ꎬ在只添加距离约束的情况下测试了采用Jacobi㊁GS㊁SOR三种不同的方法时布料收敛效果ꎬ如图8所示ꎮ图8㊀三种方法收敛速度对比Fig.8㊀Comparisonoftheconvergencerateofthreemethods27第60卷㊀第12期结合QEM的布料层次化动态模拟方法从图8可以看出ꎬJacobi法的收敛速度较慢ꎮ实验中设置w=1.9ꎬSOR法的相对误差在耗时1671ms与3300ms时ꎬ分别下降到10-2与10-3ꎬ相较于GS法其收敛速度提升了15 7%和25%ꎮ基于SOR方法的优点及实验结果对比ꎬ本文提出混合平滑方式ꎬ将SOR方法作为前平滑ꎬGS方法作为后平滑方案ꎮ在V ̄cycle的向下冲程中ꎬSOR法通过调整松弛因子可以更快地平滑误差并将其限制到较粗层次ꎬ而向上冲程中需要从较粗网格计算出较细网格上的解ꎬ使用GS法可以简化其实现步骤ꎮ4㊀模拟实验效果及对比本文实验在主频为3.30GHz的Intel(R)Core(TM)i7处理器和16GBRAM内存的Win10操作系统设备上进行ꎬ使用Unity3D引擎进行渲染ꎮ首先对布料层次化模拟结果进行实验ꎬ设置同样的网格质点数目ꎬ分别迭代计算3㊁5㊁9㊁27次ꎬ多重网格层数为3ꎬ重力采用-9.8N等条件ꎬ分别采用了PBD方法㊁文献[12]方法及本文方法ꎬ布料进行自由落体运动后悬垂效果如表1所示ꎮ表1㊀模拟效果对比Tab.1㊀Comparisonofthesimulationeffect35方法可以看出ꎬ质点数目在千级别时ꎬ层次化方法迭代10次以内就可以获得较好的模拟效果ꎬ而该方法整体表现出的拉伸性较强ꎬ布料局部位置没有较好地收敛ꎬ增加迭代次数至27次时才达到后两种层次化方法计算9次时的效果ꎬ且模拟速率相对较低ꎮ表1中本文方法则展现了较为出色的模拟结果ꎬ特别是在布料质点位置的快速有效收敛方面表现优异ꎮ可以看出ꎬ本文方法建立了较高质量的拓扑网格ꎬ如表1中小方框所标注ꎬ与前两种方法相比ꎬ在拉伸点处等关键位置对质点位置进行了更精确的约束处理ꎬ能够较好地模拟布料在拉伸情况下的形变行为ꎮ为了验证本文方法在分层模拟方面的有效性ꎬ在实验中与常见的布料模拟方法进行了对比研究ꎮ具体而言ꎬ首先为网格设置相同的质点数目并固定迭代次数及GS平滑方法ꎬ让布料模型从静止开始运动ꎻ其次分别使用了隐式积分法㊁PBD㊁文献[12]及本文方法对布料收敛速度及形变结果进行了对比ꎮ如图9(a)所示ꎬ只设置距离约束的条件下ꎬ由于约束数量较少所以分层模拟的优势并不明显ꎬ当误差下降到10-3时拉开差距ꎻ在图9(b)中ꎬ同时设置了距离约束和弯曲约束ꎬ可以看出多重网格方法开始发挥其优势ꎬ相对误差在10-2时ꎬ本文方法与PBD和文献[12]的方法相比收敛速度分别提升了26.5%和10.72%ꎬ误差下降到10-3时则分别提升了24%和15.7%ꎬ在模拟效果上也同样表现优异ꎮ37Vol.60㊀No.12AhierarchicaldynamicsimulationmethodforfabricscombinedwithQEM图9㊀三种不同方法收敛速度对比Fig.9㊀Comparisonoftheconvergencerateofthreemethods在前文的QEM层次化模拟的条件下ꎬ采用本文混合方案时布料系统的收敛性ꎬ如图10所示ꎮ同样X轴表示模拟耗时ꎬY轴表示每次平滑前后迭代中测量的相对残差ꎬ松弛因子w=1.1ꎮV(SORꎬGS)表示SOR用于预平滑㊁GS用于后平滑的情况ꎬ结果表明ꎬV(SORꎬGS)相较于其他两种混合平滑方案具有更快的收敛速度ꎬ得以更迅速地消除误差ꎮ图10㊀平滑方案对比Fig.10㊀Comparisonofsmoothingschemes通过分析实验结果并结合一些经验规则和启发式方法ꎬ发现本文所建立的层次网格中收敛速度与网格间质点数目的差异密切相关ꎮ若较粗网格中质点数是其上层细网格的1/2及以上时ꎬ可以较大程度地减小误差ꎬ若网格间数目差异过于大时则可能会引发布料系统的不稳定问题ꎬ因此在选择预平滑和后平滑方案时需要根据所求解系统的特点进行调整ꎮ在关注速度的同时ꎬ为了验证本文提出的层次网格构建方法及所采用的混合平滑方式可以模拟出稳定可靠的效果ꎬ在基础模拟效果上添加了风力作用及小球碰撞ꎬ观察其在外力作用下的表现ꎬ并从模拟结果中随机选择某一帧作为代表性样本进行分析ꎮ如图11所示ꎬ在风力作用下布料产生了自然的波动ꎬ与小球碰撞时未出现任何穿透和不稳定现象ꎬ因此表明本文方法在处理重力及拉力㊁风力等外部作用时均可保持模拟效果的稳定性ꎮ图11㊀布料模拟效果Fig.11㊀Clothsimulationeffect5㊀结㊀语针对传统基于位置的动力学模拟在布料网格精度提升时模拟速率会大幅降低ꎬ层次化位置动力学方法中随着网格层数的增加ꎬ网格质量不高㊁布料收敛状态不稳定等问题ꎬ本文采用基于二次误差度量策略的边折叠方法进行布料多重网格的构建ꎬ结合反距离加权法的思想进行层与层之间的数据传递及位置矫正ꎬ可以生成质量较好的布料三角网格模型ꎬ避免网格整体的约束结果出现较大的误差ꎬ同时采用提出的混合平滑方案进行误差的迭代ꎮ经实验验证ꎬ本文方法有效提高了布料模拟的收敛速度ꎬ单帧模拟耗时远小于单层网格方法ꎬ稳定性在测试中表现良好ꎬ提升了布料模拟的质量和效率ꎮ«丝绸»官网下载㊀中国知网下载47第60卷㊀第12期结合QEM的布料层次化动态模拟方法参考文献:[1]雍俊海ꎬ陈梓苗.基于物理的布料模拟研究综述[J].包装工程ꎬ2021ꎬ42(14):28 ̄39.YONGJunhaiꎬCHENZimiao.Reviewofphysics ̄basedclothsimulation[J].PackagingEngineeringꎬ2021ꎬ42(14):28 ̄39. [2]PROVOTX.Deformationconstraintsinamass ̄springmodeltodescriberigidclothbehaviour[J].GraphicsInterfaceꎬ1995:147 ̄154.[3]BREENDEꎬHOUSEDHꎬWOZNYMJ.Predictingthedrapeofwovenclothusinginteractingparticles[J].ACMConferencesꎬ1994ꎬ39(35):365 ̄372.[4]KIMT.Afiniteelementformulationofbaraff ̄witkincloth[J].ComputerGraphicsForumꎬ2020ꎬ39(8):171 ̄179. [5]BARAFFDꎬWITKINA.Largesepsinclothsimulation[J].PhysicalSimulationꎬ2023ꎬ2:767 ̄778.[6]LIUTTꎬBARGTEILAWꎬO BRIENJFꎬetal.Fastsimulationofmass ̄springsystems[J].ACMTransactionsonGraphicsꎬ2013ꎬ32(6):1 ̄7.[7]WANGHMꎬYANGY.DescentmethodsforelasticbodysimulationontheGPU[J].ACMTransactionsonGraphicsꎬ2016ꎬ35(6):1 ̄10. [8]BOUAZIZSꎬMARTINSꎬLIUTTꎬetal.Projectivedynamics:Fusingconstraintprojectionsforfastsimulation[J].ACMReferenceFormatꎬ2014ꎬ2:787 ̄797.[9]MÜLLERMꎬHEIDELBEGERBꎬHENNIXMꎬetal.Positionbaseddynamics[J].JournalofVisualCommunicationandImageRepresentationꎬ2007ꎬ18(2):109 ̄118.[10]MACKLINMꎬMÜLLERMꎬCHENTANEZN.XPBD:Position ̄basedsimulationofcompliantconstraineddynamics[C]//MIG 16:Proceedingsofthe9thInternationalConferenceonMotioninGames.CAꎬUSA:Burlingameꎬ2016:10 ̄12.[11]MACKLINMꎬMÜLLERM.Positionbasedfluids[J].ACMTransactionsonGraphicsꎬ2013ꎬ32(4):1 ̄12.[12]MÜLLERM.HierarchicalPositionBasedDynamics[C].Hlohovec:ProceedingsofVRIPHYSꎬ2008.[13]JEONIꎬCHOIKJꎬKIMTYꎬetal.Constrainablemultigridforcloth[J].ComputerGraphicsForumꎬ2013ꎬ32(7):31 ̄39. [14]XIANZYYꎬTONGXꎬLIUTT.Ascalablegalerkinmultigridmethodforreal ̄timesimulationofdeformableobjects[J].ACMTransactionsonGraphicsꎬ2019ꎬ38(6):1 ̄13.[15]靳雁霞ꎬ王贺ꎬ程思岳ꎬ等.融合QPSO算法的多精度布料仿真建模方法[J].计算机工程与应用ꎬ2019ꎬ55(1):154 ̄160.JINYanxiaꎬWANGHeꎬCHENGSiyueꎬetal.AdaptiveclothsimulationbasedonQPSOalgorithm[J].ComputerEngineeringandApplicationsꎬ2019ꎬ55(1):154 ̄160.[16]郑华ꎬ王美丽ꎬ李书琴.基于规则网格的层次化布料动态模拟方法[J].计算机应用研究ꎬ2019ꎬ36(6):1873 ̄1878.ZHENGHuaꎬWANGMeiliꎬLIShuqin.Clothsimulationbasedongrid ̄hierarchicaldynamicsimulationmethod[J].ApplicationResearchofComputersꎬ2019ꎬ36(6):1873 ̄1878.[17]徐小文.并行代数多重网格算法:大规模计算应用现状与挑战[J].数值计算与计算机应用ꎬ2019ꎬ40(4):243 ̄260.XUXiaowen.Parallelalgebraicmultigridmethods:State ̄of ̄theartandchallengesforextreme ̄scaleapplications[J].JournalonNumericalMethodsandComputerApplicationsꎬ2019ꎬ40(4):243 ̄260.[18]HOPPEH.Progressivemeshes[J].SeminalGraphicsPapers:PushingtheBoundariesꎬ1996ꎬ2:111 ̄120.[19]GARLANDMꎬHECKBERTPS.Surfacesimplificationusingquadricerrormetrics[C]//Proceedingsofthe24thannualconferenceonComputergraphicsandinteractivetechniques.NewYork:ACMPress/Addison ̄WesleyPublishingCo.ꎬ1997:209 ̄216. [20]薛丹ꎬ姚若侠.基于PSO算法的SOR最优松弛因子选取研究[J].计算机技术与发展ꎬ2020ꎬ30(12):15 ̄20.XUEDanꎬYAORuoxia.StudyonselectingSORoptimalrelaxationfactorwithparticleswarmoptimization[J].ComputerTechnologyandDevelopmentꎬ2020ꎬ30(12):15 ̄20.57。
一种快速混合积分法的动态布料仿真引言长期以来,研究人员一直寻求布料仿真的高效、稳定、实时的算法[1,2,3] ,目前已提出了多种模型来解决这一问题。
这些研究成果广泛应用于3D 电影、网络游戏虚拟现实等领域。
人物角色一直是网络游戏和虚拟现实中最重要的对象之一,而服装又覆盖人体90%区域以上,因此视觉上真实稳定的动态布料仿真对网络游戏和虚拟现实的重要性不言而喻,但具有高度真实感的布料仿真往往计算成本很高,实时性欠缺。
本文采用典型的质点- 弹簧模型,利用自适应混合积分方法来对微分方程求解,巧妙运用状态方程中的局部结构参数,计算得出自适应时间步长。
仿真实验表明,该方法在保证系统稳定性同时加速了求解过程。
1. 改进的质点- 弹簧模型目前研究人员提出了各种基于物理性能建模的图形表达。
代表性模型分为两大类,即粒子系统模型和连续介质模型。
本文中采用的布料模型与choi[4] 的模型相类似,是一种粒子系统模型。
这种模型的突出优点是对弯曲力和压缩力统一处理,因而得以避免了“后屈曲失稳”现象的发生,从而提供了很有吸引力的稳定本文将布料抽象为一个由m Kn个虚拟质点组成的网格,质点之间用无质量的、自然长度为零的弹簧相连接。
其连接关系有三种:“结构弹簧”,“剪切弹簧”,“弯曲弹簧”。
网格中每一个质点与其周围相邻的四个质点通过刚性的结构弹簧( Stretch spring )相连。
与其对角线上的质点之间则通过刚性较小的剪切弹簧( Shear Spring )相连。
最后,质点与其空间上间隔一点相邻的质点间则通过非线性的弯曲弹簧( bend spring )相连。
布料的物理模型是基于质点一弹簧模型的粒子系统,粒子间的连接是通过弹簧力。
布料的类型和运动取决于粒子间的弹簧力和布料的拓扑结构。
作用在粒子上的力可分为内力和外力,内力包括弹簧力,而外力则包括重力、风力等各种阻尼力。
1.1 内力分析用fi,y 表示质点i 和质点j 之间的弹簧作用在质点i 上的力,这里弹簧遵循hooke 定律,则有(1)这里xi,y=xi-xj ,L 是弹簧原长,ki,y 是弹簧的弹性系数该模型计算质点的受力非常简单直观,并且用三种弹簧模拟了三种力:拉伸力、剪切力和弯曲抗力。
基于质点弹簧模型的实时布料模拟余方姝;杨欣【摘要】随着计算机图形学和图形学硬件技术的发展,虚拟仿真中的布料模拟逐渐成为研究热点.随着虚拟仿真技术在电子游戏中的应用逐渐增多,用户对虚拟现实中布料模拟技术的要求也逐渐增加,在追求布料真实感的同时还强调实时性.在对布料进行模拟时,首先根据布料的物理特性构建弹簧质点模型,然后使用时间积分对模型质点弹簧进行计算.为了提高求解效率,采用预计算处理数据,求解隐式积分对模型进行求解,以模拟出布料真实感且达到实时效果.【期刊名称】《现代计算机(专业版)》【年(卷),期】2018(000)005【总页数】4页(P51-54)【关键词】布料模拟;弹簧质点;隐式积分【作者】余方姝;杨欣【作者单位】四川大学视觉合成图形图像技术国防重点学科实验室,成都 610065;四川大学计算机学院,成都 610065【正文语种】中文0 引言在虚拟现实技术日益发展的过程中,布料模拟已逐渐成为一个研究热点,模拟出的布料在电子游戏、影视动漫、服装设计等各方面展现了越来越多的应用[1]。
布料是日常生活中随处可见的物品,它具有高度的形变特性、延展性、整体性,且具备分布均匀的质量。
如何在计算机中正确模拟出布料的这些物理特性,一直以来都是科学家们研究的重点。
本文将布料模拟过程分成建模和计算两个方面来介绍。
1 布料建模目前,常用的布料模型构造方法有以下几种:基于几何的建模方法:几何方法不考虑布料根据动力学表现的运动特性,采用几何方程来表现布料褶皱、折叠等几何效果。
该方法计算开销小,但无法反映布料弹性,不够逼真。
基于物理的建模方法:根据布料的物理规律,使用质点来对布料进行模拟,将布料的质量分散到质点上,同时,使用质点间的相互作用来模拟布料的物理性质,有粒子系统和弹簧质点模型等方法。
基于混合特性的建模方法:这种方法结合了将几何建模和物理建模结合,使用几何方法模拟布料轮廓,然后用物理方法模拟细节,产生快速而精确的效果,但在真实性上还是低于物理方法。
布料动态仿真 python代码布料动态仿真是一种基于物理模型的仿真技术,可以模拟布料在不同环境下的运动和变形。
通过使用Python代码,我们可以实现布料的动态仿真,并展示出令人惊叹的效果。
我们需要定义布料的物理属性,如密度、弹性系数和摩擦力等。
这些参数将决定布料的运动方式和变形效果。
然后,我们可以通过数值解法,如显式欧拉法或隐式欧拉法,来模拟布料的运动过程。
在模拟过程中,我们可以将布料分割成许多小的单元,每个单元都具有一些基本属性,如位置、速度和受力等。
通过更新每个单元的状态,我们可以模拟布料在外力作用下的变形过程。
同时,我们还可以考虑布料与其他物体的碰撞和摩擦,以增加仿真的真实感。
除了基本的物理模型,我们还可以加入一些额外的效果,如风的影响、重力的作用和布料的撕裂等。
这些效果将使布料仿真更加逼真,并增加观赏性。
通过编写Python代码,我们可以实现布料动态仿真的过程。
首先,我们需要导入相关的库,如NumPy和Matplotlib,以处理数值计算和可视化。
然后,我们可以定义布料的物理属性和初始状态,并编写更新布料状态的函数。
最后,我们可以使用循环来模拟布料的运动过程,并将结果可视化出来。
在可视化的过程中,我们可以使用不同的颜色和纹理来表示布料的变形和运动轨迹。
通过调整参数和改变外力的作用方式,我们可以观察到不同的布料变化效果,并进行进一步的优化和改进。
总的来说,布料动态仿真是一项有趣而又具有挑战性的任务。
通过使用Python代码,我们可以实现高度逼真的布料仿真,并为观众呈现出令人惊叹的视觉效果。
无论是在电影特效还是虚拟现实领域,布料动态仿真都有着广泛的应用前景,将为人们带来更加真实和沉浸式的体验。
基于速度约束算法的动态布料模拟孙晓鹏;赵微巍;刘小丹【期刊名称】《计算机工程与应用》【年(卷),期】2008(44)31【摘要】针对三维布料动态模拟中质点-弹簧模型易发生超弹性现象的问题,基于速度过滤的思想,提出了质点速度约束方法.该方法建立了一个速度约束不等式,作为超弹性现象是否发生的判断依据;并对不满足约束条件的质点速度进行约束调整,进而避免了超弹性现象的发生.此外,对质点-弹簧模型的内力和外力进行了分析,并对外力中的风力模型进行改进,优化了计算流程,提高了计算速度.实验证明该方法易于实现,稳定性强,并产生了较好的视觉效果.【总页数】4页(P191-194)【作者】孙晓鹏;赵微巍;刘小丹【作者单位】辽宁师范大学,计算机与信息技术学院,辽宁,大连,116029;大连理工大学,机械工程学院,辽宁,大连,116024;浙江大学,CAD&CG国家重点实验室,杭州,310058;大连大学,辽宁省智能信息处理重点实验室,辽宁,大连,116622;辽宁师范大学,计算机与信息技术学院,辽宁,大连,116029;辽宁师范大学,计算机与信息技术学院,辽宁,大连,116029;大连理工大学,机械工程学院,辽宁,大连,116024;浙江大学,CAD&CG国家重点实验室,杭州,310058【正文语种】中文【中图分类】TP391.41【相关文献】1.基于速度跟踪算法的机械负载动态模拟 [J], 张思博;董春;李宗帅2.基于质点约束算法的窗帘动态模拟 [J], 韩丽;贾玥3.基于粒子约束的布料实时模拟 [J], 陆忠华;陈定方4.动态速度和代价约束的最短路径算法 [J], 原国伟;梅俊杰;刘蕻;王以松5.基于规则网格的层次化布料动态模拟方法 [J], 郑华;王美丽;李书琴因版权原因,仅展示原文概要,查看原文内容请购买。
一种快速混合积分法的动态布料仿真【摘要】针对布料动态模拟中快速稳定求解的瓶颈问题,提出了一种局部自适应的混合积分方法。
在每一时间步长布料网格中质点利用其模拟参数,求解一局部稳定的判断准则,据此自适应判定质点相连弹簧不同弹性力部分引起的运动方程采用何种数值积分求解,有效提高了模拟效率且可以并行计算。
此外,针对线性方程组的特点,用快速超松弛迭代法代替传统的共轭梯度法来求解,进一步提高了系统的性能表现。
实验表明该方法具有近似线性的复杂度,便于并行计算,并有良好的稳定视觉效果。
【关键词】局部自适应;布料模拟;质点-弹簧模型引言长期以来,研究人员一直寻求布料仿真的高效、稳定、实时的算法[1,2,3],目前已提出了多种模型来解决这一问题。
这些研究成果广泛应用于3D电影、网络游戏虚拟现实等领域。
人物角色一直是网络游戏和虚拟现实中最重要的对象之一,而服装又覆盖人体90%区域以上,因此视觉上真实稳定的动态布料仿真对网络游戏和虚拟现实的重要性不言而喻,但具有高度真实感的布料仿真往往计算成本很高,实时性欠缺。
本文采用典型的质点-弹簧模型,利用自适应混合积分方法来对微分方程求解,巧妙运用状态方程中的局部结构参数,计算得出自适应时间步长。
仿真实验表明,该方法在保证系统稳定性同时加速了求解过程。
1.改进的质点-弹簧模型目前研究人员提出了各种基于物理性能建模的图形表达。
代表性模型分为两大类,即粒子系统模型和连续介质模型。
本文中采用的布料模型与choi[4]的模型相类似,是一种粒子系统模型。
这种模型的突出优点是对弯曲力和压缩力统一处理,因而得以避免了“后屈曲失稳”现象的发生,从而提供了很有吸引力的稳定结果。
本文将布料抽象为一个由m×n个虚拟质点组成的网格,质点之间用无质量的、自然长度为零的弹簧相连接。
其连接关系有三种:“结构弹簧”,“剪切弹簧”,“弯曲弹簧”。
网格中每一个质点与其周围相邻的四个质点通过刚性的结构弹簧(Stretch spring)相连。
与其对角线上的质点之间则通过刚性较小的剪切弹簧(Shear Spring)相连。
最后,质点与其空间上间隔一点相邻的质点间则通过非线性的弯曲弹簧(bend spring)相连。
布料的物理模型是基于质点一弹簧模型的粒子系统,粒子间的连接是通过弹簧力。
布料的类型和运动取决于粒子间的弹簧力和布料的拓扑结构。
作用在粒子上的力可分为内力和外力,内力包括弹簧力,而外力则包括重力、风力等各种阻尼力。
1.1 内力分析用fi,y表示质点i和质点j之间的弹簧作用在质点i上的力,这里弹簧遵循hooke定律,则有(1)这里xi,y=xi-xj,L是弹簧原长,ki,y是弹簧的弹性系数该模型计算质点的受力非常简单直观,并且用三种弹簧模拟了三种力:拉伸力、剪切力和弯曲抗力。
但该模型的缺陷在于弯曲弹簧的处理,使得布料很难生成褶皱。
Choi采用了力矩平衡方程来求得弯曲抗力,成功解决了压杆稳定性问题,同时给布料带来的褶皱效果要比前者好的多,不过其计算相当复杂,这样在要求实时计算的条件下是不可取的,因此采用了更为简便的计算方式对弯曲抗力进行求解。
弯曲抗力的计算公式如下:(2)注意,上述弯曲力计算公式表明弯曲弹簧仅仅在弹簧被压缩(即弯曲发生)的时候才起作用。
这里的ki,y要比结构弹簧的刚度小的多,因此这个力对结构力的影响并不大,只用来产生布料的有效弯曲,即褶皱。
另外,考虑到结构弹簧和剪切弹簧的一致性,对其合并处理。
最终采取的模型表示方法,其弹簧连接关系与Choi一致,结构力和剪切力计算方法类似方程(1)。
这个模型结合了provot和Choi两种代表性质点弹簧模型的优点,一方面它保持了provot模型的计算简单的特点,另一方面它采用了choi模型的方法,大幅提高了布料的稳定特性,可有效生成各种褶皱。
1.2 外力分析以上给出了布料模型和内力的计算方法。
但这是一个理想化的模型,它忽略了布料运动过程中能量的耗散。
现实的布料运动会受到一些外力的影响,比如空气阻力、摩擦力等等。
为了使布料仿真具有足够真实感的动态表现,布料物理模型必须考虑到这些外力的影响。
为了让布料运动更具真实性,在布料的运动模拟中添加一个阻尼模型是有必要的。
阻尼力是用来抵抗粒子之间剪切弹簧引起的平面内运动,该力取决与相互作用粒子间的相对运动速度,我们采用的阻尼模型如下:(3)这里fd是连接质点i,y之间的阻尼力,Cd是阻尼系数,vi,vy是两质点的运动速度。
这个阻尼模型在布料的模拟中广为采用,在应用上也取得了良好的效果,有效地提高了算法的稳定性,增强了布料模拟的真实感。
2.数值积分布料受到的作用力与其运动状态的关系可以由动力学方程来描述。
一般来说,布料粒子系统的二阶动力学方程可以表示为:(4)这里,M是弹簧一质点系统的质量矩阵,向量x包括了系统中所有质点的位置。
F代表了所有的非保守力,比如摩擦力、约束力等外力。
表示了所有的保守力,比如重力、结构力、剪切力等,每种保守力都关联着一种势能,比如重力能、弹性能等。
基于物理的布料变形动画可以归结为沿时间轴求解布料动力学方程的初值问题。
动力学方程中位置和速度都是时间的未知函数,然而根据位置、速度和力三者之间的物理关系,我们可以将上述具有位置二阶偏导的动力学方程分解为两个具有一阶偏导的运动方程,即:(5)这里f代表合力,为了获得布料粒子系统在每一帧的位置和速度,我们需要利用数值积分方法对上式进行求解。
一般来说,只要已知当前t时刻的布料系统中所有粒子的运动状态(xt,vt),并由方程构造显式、隐式或半隐式积分式,那么就可以计算出一个时间步长h后布料系统的运动状态(xt+h,vt+h),在每个时间步长内,显式方法直接计算,而隐式方法需要迭代求解。
由于布料物理模型的数值积分求解是影响布料仿真系统性能的一个重要因素,因此对数值积分求解器进行改进和优化始终是快速布料动画研究的一个重要内容。
2.1 混合积分目前已有布料仿真的实践中,显式方法存在通常稳定性问题,所有提到的隐式求解方法只有一阶,因此精度较差,容易导致运动缓慢并可能丢失褶皱等细节。
其他方法甚至不对系统求解,只是给出一些合理的近似。
当然,我们不是只有显式和隐式两种积分方法可以选择,我们也可以把两种方法结合到一起同时运用,这就是混合积分法。
混合积分法的核心思想就是将常微分方程系统解耦为刚性部分和非刚性部分,对于刚性部分使用隐式的方法,对于非刚性部分则使用显式的方法,从而把隐式法的求解稳定性和显式法的计算简单性很好的结合起来。
我们将方程(1)所示系统的力拆分为线性部分和非线性部分,考虑到布料在空间运动的刚性特征,线性力同布料的刚性特征密切相关,以隐式方法求解;非线性力部分则直接采用显式解法。
针对布料的质点—弹簧模型,我们对结构弹簧进行隐式求解,而剪切或弯曲弹簧则显式求解。
不妨将系统合力f解耦为f=gI+gH,gI代表刚性部分,gH代表非刚性部分,则有:(6)由上述方程知系统的刚性部分运用后向欧拉法计算而非刚性部分则采用前后向欧拉法计算。
半隐式积分法中每一时间步长都需要进行系统的单步牛顿迭代计算,因而显著降低了每一时间步长的计算效率。
混合积分法中不再需要显式的计算相邻质点间的系数矩阵Jacobian矩阵。
更重要的是,Jacobian矩阵是巨型稀疏矩阵,导致矩阵的向量积计算相对于共轭梯度法的巨大计算成本降低了很多。
2.2 自适应混合积分法针对目前布料仿真领域广泛使用的半隐式计算框架,在混合积分的基础上,我们对其做进一步改进,提出了一种新的数值求解方法,即自适应混合积分法。
我们不再费力分析推测对系统的哪一部分应用何种积分求解,相反我们依赖当前模拟参数和一定的稳定性判断准则迅速自主灵活决定积分方法的运用。
另外,在空间上参数局部变化的区域,则依赖弹簧的连接类型来确定。
与其他方法不同,我们的方法没有牺牲准确性。
与混合积分方法相比,该法计算简单,降低了计算成本,改善了系统的稀疏性。
一般说来我们对弯曲弹簧显式求解,但是弯曲弹簧刚度变化范围幅度通常很大。
当模拟布料对象具有较小的弯曲刚度时,这种显式求解方法的结果很不错。
但是当模拟的布料对象具有大刚度特征时,这种处理方法就显得不合时宜了,此时隐式求解就显得更加合理。
设定一剪切或弯曲弹簧,定义其刚度为ks、阻尼系数为kd,原始长度为L。
理想状态下我们期待建立一个稳定性准则使我们能够在模拟过程中自动确定合适的时间步长如何对系统进行解耦。
另外,针对自适应模拟技术,即每一空间网格间距h是变化的,或者说局部网格参数m,L,ks,kd均是可变的,我们需要一个在时间、空间上局部均可用的判断准则。
提出的一个自适应的时间步长计算方法如下:(7)在任一时间步长,利用当前空间网格间距h和m,ks,kd取值,我们计算某一类型弹簧连接的一对粒子作用在其上的力时,我们利用上式进行判断,如果判断为真,则跳过相关Jacobian矩阵的计算,否则就如往常一样,计算相应的Jacobian 矩阵。
这样我们就可以主动控制系统的解耦计算而不是被动决定。
此外,该准则仅对线性化结构或剪切弹簧有效,对小刚度的弯曲弹簧,我们一般用显式方法处理,不会遇到稳定性问题。
实验结果表明,我们的自适应混合积分法是稳定的,这一点和标准的半隐式积分法几乎不分上下。
比较这两种算法的计算效率,自适应混合积分法大约降低了20%左右的计算时间,且随着网格质点数增多计算成本节约更多。
3.实验结果和分析基于上述方法,在Windows XP sp2操作系统和Intel pentium 4 2.4G处理器的软硬件环境下,在Visual C++ 6.0平台并结合Open GL图形库,对布料进行模拟。
为了测试本文局部自适应混合积分方法和其他常用数值积分方法对计算速度的提升差异,我们利用一10×10布料网格做单摆运动仿真实验,实验中分别应用显式龙格-库塔法(Runge-Kutta法)、半隐式欧拉法结合共轭梯度法(CG法)以及本文方法各自模拟100帧,记录总的计算时间,从而求出生成每帧的平均计算时间,利用这个参数来衡量不同数值方法的计算速度。
另外根据仿真中总步长数还可以求解得到平均单步计算时间。
实验结果如图(2)所示。
由实验结果可知,尽管显式方法单步计算时间比本文方法要小,但考虑到本文方法在时间步长上要远大于它,因此本文方法的速度还是会达到超过显示方法,布料规模越大这种实时性能提升的效果越明显。
图3给出了16×12个质点,1014根弹簧构成的布料旗帜在风力作用下效果。
实验结果表明,自适应混合积分法保持了很好的数值稳定性,仿真系统始终保持稳定,无散乱失真现象。
通过仿真过程中自适应混合积分方法的使用,能够有效而逼真地动态仿真织物,不仅保证了精度,同时提高了计算效率。