柔性织物动态仿真 关键技术研究

44
柔柔柔柔柔柔柔柔 柔柔柔柔柔柔 报报报 报 报 2008 报 9 报

description

柔性织物动态仿真 关键技术研究. 报告人:刘 真 2008 年 9 月. 内容提纲. 选题背景与选题意义 织物仿真相关问题的研究 基于图形硬件的织物仿真与碰撞检测. 选题背景与选题意义. 选题背景与选题意义. 在人们的日常生活中,织物随处可见,服装更占据着人们生活中的重要地位。 对织物进行逼真模拟以及对具有更广泛意义的柔性物体的动态仿真技术的深入研究,必将带动其他相关领域的发展,如电脑动画,电脑娱乐等。 - PowerPoint PPT Presentation

Transcript of 柔性织物动态仿真 关键技术研究

Page 1: 柔性织物动态仿真                       关键技术研究

柔性织物动态仿真 关键技术研究

报告人:刘 真

2008年 9 月

Page 2: 柔性织物动态仿真                       关键技术研究

内容提纲

选题背景与选题意义

织物仿真相关问题的研究

基于图形硬件的织物仿真与碰撞检测

Page 3: 柔性织物动态仿真                       关键技术研究

选题背景与选题意义

Page 4: 柔性织物动态仿真                       关键技术研究

选题背景与选题意义 在人们的日常生活中,织物随处可见,服装更占

据着人们生活中的重要地位。

对织物进行逼真模拟以及对具有更广泛意义的柔性物体的动态仿真技术的深入研究,必将带动其他相关领域的发展,如电脑动画,电脑娱乐等。

研究三维织物动态仿真技术时,不仅要考虑织物的几何形变,而且要考虑到其物理性能,同时,还要融合计算机图形学,计算机动画,计算几何,微分方程数值解,弹性力学等多门专业学科的知识和技术,对这一问题的研究已不仅仅是单纯的学科应用问题,更是对学科理论的实践与证明。

Page 5: 柔性织物动态仿真                       关键技术研究

选题背景与选题意义

柔性织物的动态仿真技术研究柔性织物的动态仿真技术研究将对数字时代人们的生活产生将对数字时代人们的生活产生深远的影响。深远的影响。

Page 6: 柔性织物动态仿真                       关键技术研究

织物仿真相关问题的研究

Page 7: 柔性织物动态仿真                       关键技术研究

织物仿真相关问题的研究 模拟仿真技术是指遵循相似原理(几何、环境及

性能相似),用模型(物理模型或数学模型)代替实际系统进行试验和研究。

用于建立织物模拟仿真模型的方法很多,这些方法可主要可以分为:

( 1 )几何方法( 2 )物理方法( 3 )混合方法

Page 8: 柔性织物动态仿真                       关键技术研究

织物模型的简单说明 (弹簧—质点模型)

弹簧—质子模型的基本思想主要是把一块织物划分为

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] 的弹簧,叫做“结构弹簧”。这三种“弹簧”结构,分别对应了,三种在织物运动中的作用力。

Page 9: 柔性织物动态仿真                       关键技术研究

对动力学求解的说明

在质点—弹簧模型中,根据牛顿动力学原理,质点 [i , j] 随时间运动的加速度、速度、位移可以表示如下:

式中 为时间间隔, 为质点 [i , j] 在任意时刻 t 所受到的合力,

为质点在任意时刻 t 的加速度, Vi,j(t) 为质点在 [i , j] 在任意时刻 t 的速度 ,

为质点 [ i , j] 在任意时刻 t 的位置。 织物动感模拟过程中,初始状态已知,方程求解过程就成为数

值求解中的常微分方程的初值问题。

tttvtPttP

ttttvttv

tFm

tt

jijiji

jijiji

jiji

)()()(

)()()(

)(1

)(

,

_

,

_

,

_

,

_

,

_

,

_

,

_

,

_

t )(,

_

tF ji

ji,

_

)(,

_

tP ji

Page 10: 柔性织物动态仿真                       关键技术研究

常用求解方法

对于常微分方程有一套成熟经典的求解方法

( 1 )欧拉法;( 2 )中值法;( 3 )四阶龙格—库塔法。

Page 11: 柔性织物动态仿真                       关键技术研究

欧拉法:这种方法数值求解简单,精度不够,其局部截断为 O(h2),实际效率低。

中值法:这种方法的局部截断误差达到了 O (h3)。每次迭代都需要通过两次力学求导获得与时间步长有关的二次精确解。该方法还需建立两个存储结构来存储状态向量。

四阶龙格—库塔法 : 其局部截断误差达 O (h5)。在数值求解中,尽管每一步的计算量大,但因为允许采用较大步长,总的计算量反而减小。四阶龙格一库塔法精度高,稳定性能好,在实际中得以广泛应用。

Page 12: 柔性织物动态仿真                       关键技术研究
Page 13: 柔性织物动态仿真                       关键技术研究

积分方法 10X10质点网格所需时间(S)

20X20质点网格所需时间(S)

欧拉积分 31.28 46.03

中点积分 39.20 59.33

四阶龙格库塔积分 42.70 67.42

系统设置如下:结构弹簧刚性常数 4 ,结构弹簧阻尼 0.6 ;剪切弹簧常数 4 ,剪切弹簧阻尼 0.6 ;弯曲弹簧常数 2.4, 弯曲弹簧阻尼 0.8, 仿真步长 0.01 。

Page 14: 柔性织物动态仿真                       关键技术研究

质子—弹簧模型的超弹性问题 所谓超弹性问题,把仿真的织物上约束点固定住,然后将

其自然下垂,将会发现约束点处的弹簧会拉得很长,甚至会超过 100% ,这种过度拉伸的现象就是织物动感模拟中的“高弹性”效应。事实上,真实的织物是不会这样拉伸的,拉得超出一定的限度就会被撕裂。

质子—弹簧模型假定质子之间的力学关系为简单的线性关系,在这个模型中,弹簧的力学关系是简单的线性。真实的织物不但不存在“高弹性”效应,它们的变形产生的弹力是非线性的,当变形加大时,弹力会急剧增加。一般来织物的形变不会超过 10%,亚麻、粗斜纹棉布等织物变形率还应更小。

)( 01 LLkF

Page 15: 柔性织物动态仿真                       关键技术研究

在本文中采用了一种较为简单的校正策略,采用非线性的力学公式来近似织物的非线性力。

这里K为弹簧的弹性系数, Dist 为弹簧两端的粒子之间的距离, restLen 为弹簧的自然长度。

))0.1/(9.0tan( restLenDistkF

Page 16: 柔性织物动态仿真                       关键技术研究

同时,调整弹簧两端的质子速度,将质子在沿弹簧方向上的分量和设为零。以避免弹簧的“高弹性”问题进一步发生。

A质点

B质点

Va

Vb

Va’

Vb’

Page 17: 柔性织物动态仿真                       关键技术研究

10X10 质子—弹簧网格。结构弹簧刚性常数 4 ,结构弹簧阻尼 0.6 ;剪切弹簧常数 4 ,剪切弹簧阻尼 0.6 ;弯曲弹簧常数 2.4, 弯曲弹簧阻尼 0.8 ;仿真步长 0.01 ;求解方法为,四阶龙格库塔法。

不难看出质点—弹簧模型中的“超弹性”问题已经得到明显改善。

Page 18: 柔性织物动态仿真                       关键技术研究

基于图形硬件的织物仿真与碰撞检测

Page 19: 柔性织物动态仿真                       关键技术研究

计算机图形学,从诞生的那天起,就与硬件有着紧密的联系。由于图形学的高计算量要求,图形硬件的早期研究主要集中于专有硬件设备的研制。

随着图形硬件的发展,图形硬件的功能早已经今非昔比,并已经具备了可编程的能力。

Page 20: 柔性织物动态仿真                       关键技术研究

( 几何对) 象

应用程序内存

( ) 像素

图元组装 裁剪投影视口消隐

( 几何对) 像

栅格化

( ) 像素像素解码

像素传输

片元处理 帧缓冲区操作

纹理内存 帧缓冲区

像素编码

读取控制

像素组

顶 点

片 元

纹 理

顶点处理器

片元处理器

可编程处理器

Page 21: 柔性织物动态仿真                       关键技术研究

目前可编程的两个点就是顶点处理和片元处理。

顶点处理涉及在各个顶点发生的操作,尤其是变换和光照。

片元是各个像素的数据结构,是通过图形图元的栅格化创建的。片元包含了更新帧缓冲区中的一个单独位置所需要的全部数据。片元处理是由在各个片元基础上发生的操作,尤其是在从纹理内存读取和在各个片元上应用于纹理值的操作组成。

Page 22: 柔性织物动态仿真                       关键技术研究

采用图形硬件来做通用计算以下的主要优势 :( 1 )高效的并行性。

( 2 )高密集的运算。 GPU通常具有 128位 或 256 位位宽 .

( 3 )超长图形流水线。

Page 23: 柔性织物动态仿真                       关键技术研究

图形处理单元通用计算的一般步骤: (1) 将需要运算的数据以一定方式转化为纹理数据。

(2)编写顶点、片元着色器代码。 (3)绘制简单几何模型,触发 GPU 运算。 (4)读取 GPU渲染( GPU 的渲染过程,

就是 GPU 的运算过程)后的纹理数据,得出结果。

Page 24: 柔性织物动态仿真                       关键技术研究

纹理RGBA

R G B A

X Y Z W

Page 25: 柔性织物动态仿真                       关键技术研究

基于 GPU的织物动态仿真实现 1967年, Verlet 在研究 Lennard-Jones液体

的性质时提出了著名的 Verlet 算法 .

对每一个粒子之间的运动使用 Verlet 方法来作求解方式。在 Verlet 方法中每一个粒子的新位置在固定的时间间隔 内,

其中 是粒子在时刻的位置, 是在时刻时受到的合力 ,m 为粒子的质量 .

t

mtFtttPtPttP /)()()(2)( 2

)(tP )(tF

Page 26: 柔性织物动态仿真                       关键技术研究

利用 Verlet 方法求解织物运动方程,其中不出现质点速度信息,是一个时间与位置的推导关系。其表述了离散点随时间的位置变化关系。速度是隐式得出的,算法稳定。

Verlet 方法中间的交换信息少 , 易于 GPU实现 .

Page 27: 柔性织物动态仿真                       关键技术研究

假定连接各个质点之间的弹簧有着无限的刚性,也就是说,质子之间的距离是相对固定的。

使用松驰法技术来调整织物中每个质子的距离。质子和之间的距离调整用下式表示 :

dPPDist ),( 21

)(*)),(/1( 12211 PPPPDistds )(*)),(/1( 12212 PPPPDistds

1P2P

Page 28: 柔性织物动态仿真                       关键技术研究

对于织物与碰撞体之间的碰撞问题,本节中假定织物是与一个简单的球体进行的碰撞。对于质点与球体之间的约束可以较为简单,主要就是对质子到球心之间的距离与球体半径之间的判断。如果距离小于半径,则质子进入球体内部,则需要进行质子位置调整。

O球心 O球心

R半径

P0

P1

P0

P1

P1'

Page 29: 柔性织物动态仿真                       关键技术研究

下面给出整个 GPU 仿真的步骤: 在每一个仿真时间步长 内。

(1) 对于所有质子,如果其不是固定质子,则根据下式计算新的位置。

for(迭代次数 ) { (2)然后对,新生成的质子位置,进行松弛法调整。

P1: P2:

(3)最后调整质子与约束几何之间的位置,如果有质子进入到约束几何体内部则将其位置,校正到几何体表面。

}____________________________________________ 对于第二步和第三步可以进行互换,调整顺序不影响校正效果。可以对( 2 )( 3 )组合进行多次。但会影响仿真速度。

t

mtFtttPtPttP /)()()(2)( 2

)(*)),(/1( 12211 PPPPDistds )(*)),(/1( 12212 PPPPDistds

Page 30: 柔性织物动态仿真                       关键技术研究

将织物质子的位置存入三个大小为的纹理中,这三个纹理循环使用。一个纹理存储老的位置信息,一个用于存放当前的位置,第三个用于记录计算后的新位置,分别记为:texture_old , texture_cur, texture_new 。

Page 31: 柔性织物动态仿真                       关键技术研究

三个纹理循环使用。对于约束计算由于有9 种约束,分别为:质点和碰撞球体;质点和周围质点之间的八个方向上的距离约束;再加上进行 Verlet积分运算,计算一帧数据,至少要进行 10遍绘制。每一次绘制进行一次相应的 GPU 运算,下一次的运算,以当前新产生的纹理作为输入,进行下一步的运算,如此反复迭代 10次。

Page 32: 柔性织物动态仿真                       关键技术研究

GPUTexture_old

Texture_cur

Texture_new

GPU Texture_oldTexture_new

Page 33: 柔性织物动态仿真                       关键技术研究
Page 34: 柔性织物动态仿真                       关键技术研究

织物大小 CPU仿真运算一次所花时间 GPU仿真运算一次所花时间

20╳20 0.019秒 0.250秒

40╳40 0.170秒 0.350秒

512╳512 2.630秒 1.021秒

1024╳1024 6.312秒 1.554秒

对于规模较小的织物仿真来说采用 CPU 进行有一定的优势,但随着织物质点的数目的增加, GPU 仿真的速度就大大优于 CPU 。在织物较简单的时候, CPU 仿真算法要优于 GPU ,这是由于 GPU的渲染流水线、纹理访问等额外计算不可忽略 ; 随着织物复杂度的增加, GPU 的效率要明显高于 CPU 的效率,这是图形硬件的并行流计算的特性造成的,而 CPU则由于缺少优化的对于流数据的并行处理失去了计算优势;随着场景复杂度的增加, CPU 的效率降低很快,而 GPU则保持很好的算法稳定性,这也是图形硬件的优势。

Page 35: 柔性织物动态仿真                       关键技术研究

基于图形硬件的织物碰撞检测

碰撞检测的基本思想

1)判断运动的路径中是否有物体。 2) 是否有其它物体占有了相同的空间。

Page 36: 柔性织物动态仿真                       关键技术研究

X

Z

内部

外部近平面

远平面

Page 37: 柔性织物动态仿真                       关键技术研究

OpenGL提供 3 种操作模式: 渲染模式、选择模式和反馈模式

其中渲染模式是 OpenGL 的正常模式。在渲染模式下 ,所要绘制的几何图元被光栅化,并在计算成位图像素后 , 被送到帧缓存中。

选择模式下,用户定义选择视景体, OpenGL 将落在这个视景体之内的物体名称存储在一个堆栈中。通过返回这个堆栈中的物体名称,可以确定拾取到的物体。此时, OpenGL 不发送光栅化的图像到帧缓存,而只是根据用户定义的特殊视景体,把绘制的物体生成拾取记录 .由于没有执行光栅化,该模式下运行效率很高。

反馈模式下, OpenGL 需要将绘制的几何图元反馈到一个反馈内存中,比如图元的顶点坐标、颜色等。

名字数量

Z最小的 值

Z最大的 值

[0]选择缓冲区

[1]

[2]

名字堆栈的底部[n0+2]···

[n0+3]n当这条记录等于 1时的

名字堆栈中名字的数量

[n0+4] Z最小的 值

下一条点击记录

···

Page 38: 柔性织物动态仿真                       关键技术研究

下面给出对织物质点网格本文所述算法进碰撞检测的具体过程:

1) 定义观察点和选择视景体。 选定一个织物网格在 t 时刻的一个质点的坐标为观察点的坐标,记为 P ( X0 , Y0 , Z0 ) ,质点在 t 时刻的速度为V ( V_x ,V_y , V_z ),以这个观察点为中心定义一个截面积为 0. 0001 ×0. 0001,前后截面位于观察点两侧各为 1.0 的选择视景体。视景体的前后截面定义在观察点两侧 ,可以从 2 个方向观察目标多面体模型。注意要定义一个截面积远小于模型三角片大小的视景体 ,尽量拾取到较少的三角片 , 通常保证只拾取到一个三角片。

Page 39: 柔性织物动态仿真                       关键技术研究

2) 创建名称堆栈  将约束模型的所有三角片放到已定义的视景体中进行渲染。

建立的视景体用模型视点矩阵和投影矩阵对场景中约束模型的顶点进行变换,同时裁剪掉任何位于视景体之外的图元。由于目标多面体模型的三角片数目较大,为三角片命名时适宜采用指向三角片对象的指针。指针的值代表所指对象的实际存储空间的地址,具有惟一性,而且通过该指针可以直接找到所指对象,便于以后查询该三角片。

3) 命中信息的获取  与视景体相交的三角片将导致一次选择命中。命中记录由

三项组成,依次为命中记录发生时名称堆栈中的名称数,记录的命中的所有顶点的最大和最小窗口Z 坐标 , 以及命中发生时名称堆栈的内容。

Page 40: 柔性织物动态仿真                       关键技术研究

选择缓存区从选择模式切换回绘图模式时,函数返回该选择缓存区拾取记录的数目,即:

hits =glRender(GL_RENDER) ;

当 hits 不为 0 ,就表明视景体与目标多面体模型三角片相交。因此通过查看各命中记录的三角片名,即可确定相交的三角片,一般只有一个三角片被命中,这样就得到了沿观察方向距离观察点最近的目标三角片。

Page 41: 柔性织物动态仿真                       关键技术研究

分别计算点在 t 时刻与 到平面的有符号距离。如果与同号,则说明质点在的运动时间内没有与任合约束模型的三角面片相碰撞;如果与异号则说明质点在的运动时间内与约束模型的三角面片相碰撞。

如果发生碰撞,则要记录下当前质点的编号与当前面片的三个顶点的坐标,为下一步的织物碰撞响应做准备。在碰撞响应中,将会根据记录下来的信息,对发生碰撞的的质点作位置和速度上的调整,以使其的运动满足动力学方程与空间约束的要求。

tt

Page 42: 柔性织物动态仿真                       关键技术研究

检测结果 模型面数 单质点检测所需时间 所有质点测所需时间模型 1模型 2模型 3

9601371440000

0.0027秒0.0219秒0.1390秒

0.43 秒3.50 秒21.30秒

Page 43: 柔性织物动态仿真                       关键技术研究

织物网格碰撞仿真总时间要比单质点的时间与质点数相乘的时间要长,这主要是因为在碰撞检测后,需要对质点的位置与速度重新进行计算,花费了一定时间。

与传统的碰撞检测方法相比,采用这种方法对于织物与约束模型之间的碰撞检测,最大的优势就是,无论约束模型是否为凸体都可以适用,并且不需要对模型进行预处理,具有较强的通用性,可应用于织物与任意约束模型间的碰撞检测。

Page 44: 柔性织物动态仿真                       关键技术研究

报告结束,报告结束,谢谢谢谢 !!