440 likes | 574 Views
柔性织物动态仿真 关键技术研究. 报告人:刘 真 2008 年 9 月. 内容提纲. 选题背景与选题意义 织物仿真相关问题的研究 基于图形硬件的织物仿真与碰撞检测. 选题背景与选题意义. 选题背景与选题意义. 在人们的日常生活中,织物随处可见,服装更占据着人们生活中的重要地位。 对织物进行逼真模拟以及对具有更广泛意义的柔性物体的动态仿真技术的深入研究,必将带动其他相关领域的发展,如电脑动画,电脑娱乐等。
E N D
柔性织物动态仿真 关键技术研究 报告人:刘 真 2008年9月
内容提纲 • 选题背景与选题意义 • 织物仿真相关问题的研究 • 基于图形硬件的织物仿真与碰撞检测
选题背景与选题意义 • 在人们的日常生活中,织物随处可见,服装更占据着人们生活中的重要地位。 • 对织物进行逼真模拟以及对具有更广泛意义的柔性物体的动态仿真技术的深入研究,必将带动其他相关领域的发展,如电脑动画,电脑娱乐等。 • 研究三维织物动态仿真技术时,不仅要考虑织物的几何形变,而且要考虑到其物理性能,同时,还要融合计算机图形学,计算机动画,计算几何,微分方程数值解,弹性力学等多门专业学科的知识和技术,对这一问题的研究已不仅仅是单纯的学科应用问题,更是对学科理论的实践与证明。
选题背景与选题意义 • 柔性织物的动态仿真技术研究将对数字时代人们的生活产生深远的影响。
织物仿真相关问题的研究 • 模拟仿真技术是指遵循相似原理(几何、环境及性能相似),用模型(物理模型或数学模型)代替实际系统进行试验和研究。 • 用于建立织物模拟仿真模型的方法很多,这些方法可主要可以分为: (1)几何方法 (2)物理方法 (3)混合方法
织物模型的简单说明 (弹簧—质点模型) • 弹簧—质子模型的基本思想主要是把一块织物划分为 m x n的矩形网格,每个网格结点是一个虚拟质点,每个质点用弹簧相连,弹簧无质量且其长度不能为零。 • 相邻质点的连接有三种方式。连接质点[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]的弹簧,叫做“结构弹簧”。这三种“弹簧”结构,分别对应了,三种在织物运动中的作用力。
对动力学求解的说明 • 在质点—弹簧模型中,根据牛顿动力学原理,质点[i , j]随时间运动的加速度、速度、位移可以表示如下: • 式中 为时间间隔, 为质点[i , j]在任意时刻t所受到的合力, • 为质点在任意时刻t的加速度,Vi,j(t)为质点在[i , j]在任意时刻t的速度, • 为质点[ i , j]在任意时刻t的位置。 • 织物动感模拟过程中,初始状态已知,方程求解过程就成为数值求解中的常微分方程的初值问题。
常用求解方法 • 对于常微分方程有一套成熟经典的求解方法 (1)欧拉法; (2)中值法; (3)四阶龙格—库塔法。
欧拉法:这种方法数值求解简单,精度不够,其局部截断为O(h2),实际效率低。欧拉法:这种方法数值求解简单,精度不够,其局部截断为O(h2),实际效率低。 • 中值法:这种方法的局部截断误差达到了O (h3)。每次迭代都需要通过两次力学求导获得与时间步长有关的二次精确解。该方法还需建立两个存储结构来存储状态向量。 • 四阶龙格—库塔法:其局部截断误差达O (h5)。在数值求解中,尽管每一步的计算量大,但因为允许采用较大步长,总的计算量反而减小。四阶龙格一库塔法精度高,稳定性能好,在实际中得以广泛应用。
系统设置如下:结构弹簧刚性常数4,结构弹簧阻尼0.6;剪切弹簧常数4,剪切弹簧阻尼0.6;弯曲弹簧常数2.4,弯曲弹簧阻尼0.8,仿真步长0.01。
质子—弹簧模型的超弹性问题 • 所谓超弹性问题,把仿真的织物上约束点固定住,然后将其自然下垂,将会发现约束点处的弹簧会拉得很长,甚至会超过100%,这种过度拉伸的现象就是织物动感模拟中的“高弹性”效应。事实上,真实的织物是不会这样拉伸的,拉得超出一定的限度就会被撕裂。 • 质子—弹簧模型假定质子之间的力学关系为简单的线性关系,在这个模型中,弹簧的力学关系是简单的线性。真实的织物不但不存在“高弹性”效应,它们的变形产生的弹力是非线性的,当变形加大时,弹力会急剧增加。一般来织物的形变不会超过10%,亚麻、粗斜纹棉布等织物变形率还应更小。
在本文中采用了一种较为简单的校正策略,采用非线性的力学公式来近似织物的非线性力。 • 这里K为弹簧的弹性系数,Dist为弹簧两端的粒子之间的距离,restLen为弹簧的自然长度。
同时,调整弹簧两端的质子速度,将质子在沿弹簧方向上的分量和设为零。以避免弹簧的“高弹性”问题进一步发生。同时,调整弹簧两端的质子速度,将质子在沿弹簧方向上的分量和设为零。以避免弹簧的“高弹性”问题进一步发生。
10X10质子—弹簧网格。结构弹簧刚性常数4,结构弹簧阻尼0.6;剪切弹簧常数4,剪切弹簧阻尼0.6;弯曲弹簧常数2.4,弯曲弹簧阻尼0.8;仿真步长0.01;求解方法为,四阶龙格库塔法。10X10质子—弹簧网格。结构弹簧刚性常数4,结构弹簧阻尼0.6;剪切弹簧常数4,剪切弹簧阻尼0.6;弯曲弹簧常数2.4,弯曲弹簧阻尼0.8;仿真步长0.01;求解方法为,四阶龙格库塔法。 • 不难看出质点—弹簧模型中的“超弹性”问题已经得到明显改善。
计算机图形学,从诞生的那天起,就与硬件有着紧密的联系。由于图形学的高计算量要求,图形硬件的早期研究主要集中于专有硬件设备的研制。计算机图形学,从诞生的那天起,就与硬件有着紧密的联系。由于图形学的高计算量要求,图形硬件的早期研究主要集中于专有硬件设备的研制。 • 随着图形硬件的发展,图形硬件的功能早已经今非昔比,并已经具备了可编程的能力。
目前可编程的两个点就是顶点处理和片元处理。目前可编程的两个点就是顶点处理和片元处理。 • 顶点处理涉及在各个顶点发生的操作,尤其是变换和光照。 • 片元是各个像素的数据结构,是通过图形图元的栅格化创建的。片元包含了更新帧缓冲区中的一个单独位置所需要的全部数据。片元处理是由在各个片元基础上发生的操作,尤其是在从纹理内存读取和在各个片元上应用于纹理值的操作组成。
采用图形硬件来做通用计算以下的主要优势: (1)高效的并行性。 (2)高密集的运算。GPU通常具有128位 或256位位宽. (3)超长图形流水线。
图形处理单元通用计算的一般步骤: • (1)将需要运算的数据以一定方式转化为纹理数据。 • (2)编写顶点、片元着色器代码。 • (3)绘制简单几何模型,触发GPU运算。 • (4)读取GPU渲染(GPU的渲染过程,就是GPU的运算过程)后的纹理数据,得出结果。
基于GPU的织物动态仿真实现 • 1967年,Verlet在研究Lennard-Jones液体的性质时提出了著名的Verlet算法. • 对每一个粒子之间的运动使用Verlet方法来作求解方式。在Verlet方法中每一个粒子的新位置在固定的时间间隔 内, • 其中 是粒子在时刻的位置, 是在时刻时受到的合力,m为粒子的质量.
利用Verlet方法求解织物运动方程,其中不出现质点速度信息,是一个时间与位置的推导关系。其表述了离散点随时间的位置变化关系。速度是隐式得出的,算法稳定。利用Verlet方法求解织物运动方程,其中不出现质点速度信息,是一个时间与位置的推导关系。其表述了离散点随时间的位置变化关系。速度是隐式得出的,算法稳定。 • Verlet方法中间的交换信息少,易于GPU实现.
假定连接各个质点之间的弹簧有着无限的刚性,也就是说,质子之间的距离是相对固定的。假定连接各个质点之间的弹簧有着无限的刚性,也就是说,质子之间的距离是相对固定的。 使用松驰法技术来调整织物中每个质子的距离。质子和之间的距离调整用下式表示:
下面给出整个GPU仿真的步骤: • 在每一个仿真时间步长 内。 • (1)对于所有质子,如果其不是固定质子,则根据下式计算新的位置。 • for(迭代次数) • { • (2)然后对,新生成的质子位置,进行松弛法调整。 • P1: • P2: • (3)最后调整质子与约束几何之间的位置,如果有质子进入到约束几何体内部则将其位置,校正到几何体表面。 • } ____________________________________________ • 对于第二步和第三步可以进行互换,调整顺序不影响校正效果。可以对(2)(3)组合进行多次。但会影响仿真速度。
将织物质子的位置存入三个大小为的纹理中,这三个纹理循环使用。一个纹理存储老的位置信息,一个用于存放当前的位置,第三个用于记录计算后的新位置,分别记为:texture_old ,texture_cur,texture_new。
三个纹理循环使用。对于约束计算由于有9种约束,分别为:质点和碰撞球体;质点和周围质点之间的八个方向上的距离约束;再加上进行Verlet积分运算,计算一帧数据,至少要进行10遍绘制。每一次绘制进行一次相应的GPU运算,下一次的运算,以当前新产生的纹理作为输入,进行下一步的运算,如此反复迭代10次。三个纹理循环使用。对于约束计算由于有9种约束,分别为:质点和碰撞球体;质点和周围质点之间的八个方向上的距离约束;再加上进行Verlet积分运算,计算一帧数据,至少要进行10遍绘制。每一次绘制进行一次相应的GPU运算,下一次的运算,以当前新产生的纹理作为输入,进行下一步的运算,如此反复迭代10次。
基于图形硬件的织物碰撞检测 • 碰撞检测的基本思想 1)判断运动的路径中是否有物体。 2)是否有其它物体占有了相同的空间。
OpenGL提供3 种操作模式: 渲染模式、选择模式和反馈模式 其中渲染模式是OpenGL 的正常模式。在渲染模式下,所要绘制的几何图元被光栅化,并在计算成位图像素后,被送到帧缓存中。 选择模式下,用户定义选择视景体,OpenGL 将落在这个视景体之内的物体名称存储在一个堆栈中。通过返回这个堆栈中的物体名称,可以确定拾取到的物体。此时, OpenGL不发送光栅化的图像到帧缓存,而只是根据用户定义的特殊视景体,把绘制的物体生成拾取记录.由于没有执行光栅化,该模式下运行效率很高。 反馈模式下,OpenGL 需要将绘制的几何图元反馈到一个反馈内存中,比如图元的顶点坐标、颜色等。
下面给出对织物质点网格本文所述算法进碰撞检测的具体过程:下面给出对织物质点网格本文所述算法进碰撞检测的具体过程: • 1) 定义观察点和选择视景体。 • 选定一个织物网格在t时刻的一个质点的坐标为观察点的坐标,记为P ( X0 , Y0 , Z0 ) ,质点在t时刻的速度为V(V_x ,V_y , V_z),以这个观察点为中心定义一个截面积为0. 0001 ×0. 0001,前后截面位于观察点两侧各为1.0 的选择视景体。视景体的前后截面定义在观察点两侧,可以从2个方向观察目标多面体模型。注意要定义一个截面积远小于模型三角片大小的视景体,尽量拾取到较少的三角片,通常保证只拾取到一个三角片。
2) 创建名称堆栈 • 将约束模型的所有三角片放到已定义的视景体中进行渲染。建立的视景体用模型视点矩阵和投影矩阵对场景中约束模型的顶点进行变换,同时裁剪掉任何位于视景体之外的图元。由于目标多面体模型的三角片数目较大,为三角片命名时适宜采用指向三角片对象的指针。指针的值代表所指对象的实际存储空间的地址,具有惟一性,而且通过该指针可以直接找到所指对象,便于以后查询该三角片。 • 3) 命中信息的获取 • 与视景体相交的三角片将导致一次选择命中。命中记录由三项组成,依次为命中记录发生时名称堆栈中的名称数,记录的命中的所有顶点的最大和最小窗口Z坐标, 以及命中发生时名称堆栈的内容。
选择缓存区从选择模式切换回绘图模式时,函数返回该选择缓存区拾取记录的数目,即: hits =glRender(GL_RENDER); • 当hits不为0,就表明视景体与目标多面体模型三角片相交。因此通过查看各命中记录的三角片名,即可确定相交的三角片,一般只有一个三角片被命中,这样就得到了沿观察方向距离观察点最近的目标三角片。
分别计算点在t时刻与 到平面的有符号距离。如果与同号,则说明质点在的运动时间内没有与任合约束模型的三角面片相碰撞;如果与异号则说明质点在的运动时间内与约束模型的三角面片相碰撞。 • 如果发生碰撞,则要记录下当前质点的编号与当前面片的三个顶点的坐标,为下一步的织物碰撞响应做准备。在碰撞响应中,将会根据记录下来的信息,对发生碰撞的的质点作位置和速度上的调整,以使其的运动满足动力学方程与空间约束的要求。
织物网格碰撞仿真总时间要比单质点的时间与质点数相乘的时间要长,这主要是因为在碰撞检测后,需要对质点的位置与速度重新进行计算,花费了一定时间。织物网格碰撞仿真总时间要比单质点的时间与质点数相乘的时间要长,这主要是因为在碰撞检测后,需要对质点的位置与速度重新进行计算,花费了一定时间。 • 与传统的碰撞检测方法相比,采用这种方法对于织物与约束模型之间的碰撞检测,最大的优势就是,无论约束模型是否为凸体都可以适用,并且不需要对模型进行预处理,具有较强的通用性,可应用于织物与任意约束模型间的碰撞检测。