改进的耦合面传递方法

2015-05-30 17:15倪雪飞秦富春
俪人·教师版 2015年4期

倪雪飞 秦富春

【摘要】计算机三维动画是现在计算机的研究重点,其中,人体运动仿真技术被引用到了各个领域中。本文提出了一种基于“采样数组”的方法计算耦合面信息。耦合面的数量很大,在交互时使矩阵计算的复杂度较高,这种方法的解决办法是在交互面上构建一组数组,对通过碰撞检测的耦合面进行采样过滤,降低矩阵计算的复杂度,最后以插值计算的方式计算出没有通过采样的耦合面信息。

【关键词】人体运动系统  耦合面  插值计算  流体仿真

耦合面[1](Couple faces)指用于使人体流体发生交互,传递参数的数据结构。本文没有采样用原有的方法,而是在原有的耦合面传递方法上进行改进,采用了一种基于采样数组的方法降低耦合面的传输量与计算量,再通过插值计算出未通过采样的耦合面,用降低计算的精确度为代价换取运算性能的提升的优化策略,提高了仿真效率。

耦合面数据结构

Struct CoupleFaces

{

Vec3    vn;   // 法线向量

Float    fp;   // 流体压力的数值大小

Float    fa;   // 人体对流体的加速度的数值大小

Mesh   ms;   // 耦合面对应的流体网格

Int     sign;  // 耦合面对应的人体子链ID

Float    fs;   //  耦合面面积大小

Pair  BodyPos;  // 耦合面落在子链上的网格}

因为耦合面作为中间层负责传送双方的数据,还需要保存一些预处理数据,它的结构较为复杂。其中最为重要的数据为耦合面法线向量[3]、流体压力值和传递的加速度值。

流体仿真首先取得耦合面对应的流体模型网格[2],然后将网格的加速度与网格质量相乘得到压力值,最后将压力值与法线信息保存进参数与。人体在得到压力后经过矩阵计算,得到每个耦合面的加速度,这里的加速度是人体在耦合面这个位置上的实际加速度,最后人体仿真将加速度保存进参数。如果每一个耦合面需要大约12个浮点数来储存,共需要24000个浮点数约96K。对数据的读取可以达到实时性,下面考虑数据的运算性能。

在计算耦合面信息时会设计到3个矩阵运算,即存在:

(1)两个矩阵维度与矩阵维度相乘;

(2)一个矩阵维度与矩阵维度相乘;

(3)一个矩阵维度与矩阵维度相乘;

为耦合面数量,为自由度数量,计算3个矩阵方程的复杂度为,因为远远大于,所以复杂度等同为。当时,方程计算量为次浮点数相乘,浮点数做乘法的消耗较大,数量巨大的浮点数相乘必然会影响仿真效率。

构建采样数组

采样数组(Sampling Array)的作用是:映射子链上的耦合面并对其采样。数组的每个元素由耦合面ID、子链ID和采样标记等信息组成。由于要求将三维空间的耦合面映射到二维空间的采样数组,需要对应的坐标映射公式。坐标转换公式(1)。

(1)

公式(1)将三维空间中位于以某点为中心的耦合面映射到基于角度的坐标系中,由于角度值域,我们需要将其转换到数组大小的整数坐标中。转换公式(2)。

(2)

经过公式(2)的转换,坐标代表耦合面映射到数组中的坐标。可以知道,采样数组的第一列元素为子链最右端的一列网格,如果从做向右扫描数组的每一列,那么相当于以子链最右端为起始,逆时针扫描子链上的所有网格。

子链的包围盒有球体、长方体、胶囊体。球体包围盒符合上面的映射公式;胶囊体由半球与圆柱组成,半球符合映射公式(2),圆柱体的映射公式于上面公式基本类似,在这里不做多余阐述;长方体的映射公式(2)不同,其公式比较复杂,考虑到效率和公式的一致性问题,本文用球体映射公式替代长方形映射。

耦合面采样

在遍历数组寻找耦合面时,不需要遍历整个数组,因为这样将退化成遍历所有的耦合面。我们设定每隔2个单位对数组采样,取得数组单元后再判断是否含有耦合面,如果有则进一步计算。

数组边缘单位需要全部采样,直到找到存在耦合面的单位。因为采样后的耦合面不是全部耦合面,在进行递归运算时,可以防止没有找到耦合面的特殊情况。

在对数组采样后,只将通过采样的耦合面传递给人体计算,对没有采样到的耦合面进行插值计算。耦合面的计算量缩小至少为原来的,矩陣计算复杂度为。插值计算过程如下:

(1)遍历所有数组网格,找到第一次没有计算的耦合面;

(2)以自身为坐标中心,递归周围网格,在4个象限里分别找到一个已经计算过的。

(3)进行插值计算,插值与耦合面加速度值与距离本耦合面的距离有关,其表达式为公式(3)。

(3)

(4)将计算完的耦合面标记到数组中;

(5)返回(1),直到遍历完数组。

本文基于采样耦合面的传递方法,对传统的传递方式进行了改进,该方法对需要交互的耦合面进行适当采样,以降低矩阵运算量,然后在通过插值计算得到为能通过采样的耦合面信息,改进的方法在交互性能上提高了,数值的精确度达到,交互数量上稳定的保持在倍。

【参考文献】

[1]陈学文,丑武胜,刘静华等.基于包围盒的碰撞检测算法研究.计算机工程与应用,2005,41(5):46-50.

[2]Niewmeyer.Frank, Wilke.hans-Joachim, Schmidt.Hendrik. Geometry strongly influences the response of numerical models of the lumbar spine-A probabilistic finite element analysis [J]. Journal of Biomechanics, 2012, 45(8):1414-1423.

[3]Chouvatut. Varin, Madarasmi. Suthep, Tucerya.Mihran. 3D face and motion from feature points using adaptive constrained minimal[C]. IEICE Transactions on Fundamentals of Electronics, Communications and Computer Sciences, 2011:2207-2219.