CN104318601B - 一种流体环境下人体运动仿真方法 - Google Patents

一种流体环境下人体运动仿真方法 Download PDF

Info

Publication number
CN104318601B
CN104318601B CN201410568918.6A CN201410568918A CN104318601B CN 104318601 B CN104318601 B CN 104318601B CN 201410568918 A CN201410568918 A CN 201410568918A CN 104318601 B CN104318601 B CN 104318601B
Authority
CN
China
Prior art keywords
formula
human body
coupling surface
fluid
human
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201410568918.6A
Other languages
English (en)
Other versions
CN104318601A (zh
Inventor
卢光辉
秦富春
陈雷霆
蔡洪斌
曹跃
邱航
崔金钟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
University of Electronic Science and Technology of China
Institute of Electronic and Information Engineering of Dongguan UESTC
Original Assignee
University of Electronic Science and Technology of China
Institute of Electronic and Information Engineering of Dongguan UESTC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by University of Electronic Science and Technology of China, Institute of Electronic and Information Engineering of Dongguan UESTC filed Critical University of Electronic Science and Technology of China
Priority to CN201410568918.6A priority Critical patent/CN104318601B/zh
Publication of CN104318601A publication Critical patent/CN104318601A/zh
Application granted granted Critical
Publication of CN104318601B publication Critical patent/CN104318601B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T13/00Animation
    • G06T13/203D [Three Dimensional] animation
    • G06T13/403D [Three Dimensional] animation of characters, e.g. humans, animals or virtual beings
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/24Fluid dynamics

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Processing Or Creating Images (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明提供了一种流体环境下人体运动仿真方法,其基于真实物理的仿真,并且了实现人体与流体的交互。在人体建模的基础上,发明了耦合面交互的技术、计算子链运动速度的技术、计算目标路径的技术和跟踪目标路径的技术。在局部仿真阶段,人体模型建立在拉格朗日动力学的基础上,能够很好的仿真人体独立运动状态;在交互仿真阶段,基于采样数组的耦合面传递方法使交互效率得到提高,基于粘滞阻力的速度计算方法使交互速度改变更为平稳,效果更为逼真;在整体仿真阶段,基于三维A星算法得到的目标路径满足人体在流体中的运动特点并且具有连续性,基于视觉空间的状态选择算法使人体能够很好跟踪目标路径,并且可以选择的运动状态更多。

Description

一种流体环境下人体运动仿真方法
技术领域
本发明属于虚拟现实技术领域,尤其涉及一种流体环境下的人体运动仿真方法。
背景技术
人体运动动画属于角色动画,是一直是虚拟现实技术研究的热点之一。它综合利用计算机科学、艺术、数学、物理学和其它相关学科的知识,在计算机上生成绚丽多彩的、连续的、真实的虚拟画面,给人们提供了一个充分展示个人想象力和艺术才能的新天地。人体运动动画使用关节骨架来表示人类或者其他骨架动物的身体结构,在运动的过程中与周围场景进行交互,是人体运动技术中最主要的思想。虽然计算机动画在许多领域占据着越来越重要的角色,但是许多问题仍未很好解决。
基于物理模型的人体交互技术是八十年代后期发展起来的一种新的计算机动画技术。这种建模技术考虑了物体在真实世界中的属性,如它具有质量、转动、碰撞、能量等,并采用动力学原理来产生物体运动,采用基于物理的能量公式来表达物体运动的速度。计算机动画设计者不必关心物体运动过程的细节,只需确定物体运动所需的一些物理属性及一些约束关系,如质量、动力、场景设计等。经过近几年的发展,它已在图形学中成为一种具有潜在优势的三维造型和运动模拟技术。尽管该技术比传统动画技术的计算复杂度要高得多,但它能逼真地模拟各种自然人体运动现象,能处理人与流体、气体交互等在内的复杂动力学模型,这是基于几何的传统动画生成技术所无法比拟的。
虽然利用现有技术能够实现一定程度上的交互,但是在基于真实物理的复杂场景作用下的人体运动动画却少有人研究,这是由于受到本身动力学复杂的模型与计算机软硬件条件的限制。流体环境下的人体运动动画技术在电影动画,生物游泳力学,视频游戏以及潜水机器人领域等方面都具有重要作用。此外,基于流体环境的关节动画研究也在一定程度上为其他复杂受力场景提供了关节动画的解算依据。
发明内容
鉴于上述不足之处,本发明提供了在流体环境下人体运动仿真的方法,仿真过程包括局部仿真、交互仿真和整体仿真,主要步骤包括以下:
步骤1,解析XML资源文件,初始化人体运动参数并建立人体运动模型;
步骤2,在人体运动的局部空间中,人体模型进行独立仿真;
步骤3,在人体子链包围盒上,建立采样数组并对耦合面进行采样,对未通过采样的耦合面进行插值计算;
本步骤中采用了一种耦合面交互法技术,该技术在人体子链包围盒上建立采样数组,通过对耦合面采样,降低传递数量,达到提高交互效率的目的。对应空间中每个耦合面的位置,有采样数组的映射公式(1)、公式(2)。
包围盒的半径固定,公式(1)将三维坐标转换成二维角度坐标,公式(2)将角度坐标转换到包围盒上的数组坐标。坐标代表耦合面映射到数组中的坐标。
在遍历数组寻找耦合面时,不遍历整个数组,因为将退化成遍历所有的耦合面。设定每隔2个单位对数组采样,取得数组单元后再判断是否含有耦合面,如果有则进一步计算。
将通过采样的耦合面传递给人体仿真计算,计算后的结果用以插值计算没有通过采样的耦合面的信息,有插值公式(3)。
其中,a(i,j)代表数组对应坐标上的耦合面的加速度。
步骤4,计算流体对人体的粘滞阻力,将人体子链的速度公式由线性改为非线性并对其进行计算;
本步骤中采用了一种人体子链的速度计算公式,加入了流体的粘滞阻力,其加速度随着速度的变化而变化,速度公式由线性公式改为非线性公式,加速度计算公式(4)如下。
公式(4)中,第三项为流体对人体的粘滞阻力表达式,其中k是常量系数,η是流体粘滞系数,μ是人体触水面积,表示人体子链当前运动速度。当温度为25摄氏度时,水的粘滞系数为1.0050。为人体子链在广义空间里的速度。
速度计算公式(5)如下:
人体与流体的交互总面积为S,将其分成k等份,则有称si为流体人体交互的耦合面。
计算出每一个耦合面的作用力,建立一个k×n的选择矩阵,将k个耦合面从总数n个中挑选出来。其中,每个耦合面的压力表达式为公式(6)。
其中,ni代表第i个耦合面的单位法向量,有耦合面受到的压力表达式为公式(7)。
其中,雅可比的表达式为公式(8)。
公式(8)中,是一个维度为Si×m的矩阵,描述耦合面的法向量在笛卡尔积空间中对人体3个方向的作用的程度,代表在第i个铰链体上的所有耦合面的集合,Si表示集合元素的数量。为k×n维度的矩阵,即代表从广义空间转换到耦合面空间的转换。
在广义空间下,将所有耦合面进行积分人体自由度的受的压力可以表示为公式(9)。
公式(9)中的三项表达式分别为阻力、人体动力和粘滞力。集合S'表示采样耦合面的集合,有
计算第j个耦合面对第i个铰链体的压力为τi,再将所有的耦合面对铰链体的压力进行积分便可以得到人体自由度所受到的压力。根据速度公式(5)变换得到泰勒展示(10)和迭代公式(11)。
将公式(10)带入公式(11),得到速度计算公式(12)。
步骤5,在三维A星算法的基础上,计算人体运动的目标路径,并对目标路径的序列做连续化处理;
本步骤采用了一种在流体环境下计算人体运动的目标路径的算法。该算法建立在三维A星算法上,首先对流体空间进行网格化,然后初始化空间参数(如障碍物),接着利用三维A星算法计算人体运动的目标路径序列,最后对序列进行连续化处理,使其能够满足下一阶段的计算要求。
三维A星算法中的估价函数为公式(13):
其中,L表示当前节点到终点的欧式距离,a表示起点到当前节点的线段与当前节点到终点的线段的夹角。w1和w2分别为距离与角度的加权值。
对每个序列号qi,有网格Grid(i,j,k)对应空间中的点World(x,y,z),其切线方向为Tagent(tx,ty,tz)。该序列构成一个离散的点集,在对空间连续点的求解过程中,需要对每个点进行插值计算切线方向,如公式(14)。
步骤6,路径的两个向量包括距离向量和切线向量,依据两者在人体视觉空间中的象限分布以及状态选择算法,确定状态改变量并计算运动角速度;
本步骤采用了一种跟踪目标路径的算法,该算法根据向量在视觉空间中的象限分布和状态选择算法,从状态集合中选择改变值,使的跟踪效果更逼真,状态改变种类更多。
设定人体视觉空间Β,该空间以平行人体运动方向为z轴,垂直人体方向为y轴,平行人体横截面为x轴。将距离向量与切线向量转换到Β空间,转换公式如公式(15)、公式(16)。
Δd′t=Jview·(Δdm-Δdt) (15)
q′t=Jview·((qmqt)qm-qt)(16)
其中,Jview表示从世界空间转换到人体视觉空间的转换矩阵,(qmqt)qm-qt表示目标路径的切线向量qt以人体运动切线qm为法线的平面Π上的投影,即把切线qt投影到视觉空间的xoy平面上。
状态选择公式(17)如下。
其中,direct代表状态改变方向,state代表状态改变等级。
步骤7,根据人体与流体的交互信息,计算人体在流体中的运动能量,计算运动线速度。
本步骤再用了一种人体运动能量公式,进一步包括一下,
Eexpend表示为消耗能,即先后两次运动时所在的状态差异带来的耗能,可以表示为Statei->Statei+1所带来的能量变化。
Eexpend=-(kT(Δd)+rT(Δα)) (19)
kT代表斜率差,Δd代表位移差,Δα代表根节点的转动,rT代表运动轴的转动。一次运动模型自身所消耗的能量为Eexpend
Ecollision为碰撞能,描述的是人体自身发生的碰撞所消耗的能。通过碰撞检测技术来估算人体发生碰撞的所有链的速度Vcollision
Epunish是在流体中改变运动动作的惩罚能。流体在不断变化的同时,给人体模型带来不同的压力τ。
τi表示流体对人体第i个链的压力,把对支链的压力分为前后两个集合。公式表示为
Edeviation表示为人体模型运动的轨迹与目标轨迹所带来的偏差。
Edeviation=||Δd-kT(Δd)k||+||Δα-rT(Δα)r|| (23)。
本发明中:
自由度:人体自由度是用以描述人体子链转动的参数信息,每个关节的转动可以用一个自由度代替,每个子链自由度的维度在三维以下,例如:XYZ、XY和X。
广义坐标系:广义坐标系是指以人体自由度构建的坐标系。
拉格朗日动力学:拉格朗日动力学属于逆向动力学,其方程比牛顿欧拉的表达式要简洁,但由于拉格朗日方程是基于人体关节的自由度信息,所以当人体模型构建较为复杂,自由度数量上升时,拉格朗日方程的求解复杂度将提高。
包围盒:包围盒是指一个紧裹模型的几何图形,常用的包围盒有:包围球(Sphere)、AABB(AlignedAxis Bounding Box)、OBB(Oriented Bounding Box)和k-DOP(Discrete OrientationPolytope)s。
耦合面:耦合面是指一组用于流体与人体进行交互的数据结构的集合,耦合面存在的位置在人体子链的包围盒的表面,是通过体素化和碰撞检测等相关技术计算得来,耦合面中的信息主要包括:位置、法向和加速度等。
采样数组:采样数组是指对耦合面进行采样的一个数组,该数组建立在人体子链的包围盒上,通过映射公式将耦合面映射到数组中,并通过采样算法对耦合面进行采样。
A星算法:A星算法用于路径规划问题,该算法的关键是代价函数的建立与OPEN、CLOSE两个列表的建立与选取问题。
视觉空间:视觉空间是以人体的头部为原点建立的坐标系,该坐标系的Z轴方向与人体运动方向一致,Y轴与人体的双臂垂直并朝上,X轴与人体双臂平行并朝右。该坐标系用于转换世界坐标中的向量信息。
CPU:中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心和控制核心。
GPU:图形处理器(GPU,Graphic Processing Unit)。GPU是相对于CPU的一个概念,在现代的计算机中图形的处理变得越来越重要,需要一个专门的图形的核心处理器。
本发明的有益效益是:在局部仿真阶段,人体模型建立在拉格朗日动力学的基础上,能够很好的仿真人体独立运动状态;在交互仿真阶段,基于采样数组的耦合面传递方法使交互效率得到提高,基于粘滞阻力的速度计算方法使交互速度改变更为平稳,效果更为逼真;在整体仿真阶段,基于三维A星算法得到的目标路径满足人体在流体中的运动特点并且具有连续性,基于视觉空间的状态选择算法使人体能够很好跟踪目标路径,并且可以选择的运动状态更多。
附图说明
图1示出了一种流体环境下人体运动仿真方法的流程图;
图2示出了一种流体环境下人体运动仿真方法的过程图;
图3示出了局部交互阶段的算法过程图;
图4示出了整体交互阶段的算法过程图;
图5示出了人体与流体交互仿真过程图;
图6示出了整体仿真过程图;
图7示出了路径追踪示例图。
具体实施方式
下面结合附图和实施例对本发明优先实施方式进一步说明:
本实施例中,在外部配置参数文件(如XML),分别保存铰链体的长度、角度、关节信息等,方便进行调控。人体的驱动函数和运动逻辑则可以用外部脚本编写(如LUA脚本)。主程序实现算法流程以及接口的管理。
整个算法包括的技术有,人体流体建模、耦合面划分、碰撞检测、路径追踪、有限状态机的构建、能量公式。并将流体的仿真用GPU加速,实现光线投射,内外体数化等关键技术。整体流程如图1所示,过程如图2所示。
步骤1解析XML资源文件,初始化人体运动参数并建立人体运动模型。
人体仿真模型以及场景空间资源文件由三维模型制作软件制作(如:3DMAX),在加载资源时,从XML文件导入配置信息。
在导入配置文件后,对模型各个部分进行参数初始化,如:子链数量、位置和角度。
接着,建立人体运动模型,人体模型由一组子链模型组成,一个子链由一个关节和一个链体组成。关节负责控制转动、角度和矩阵计算等信息,链体负责控制位置、质量和包围盒等信息。子链之间构成父子链关系,满足铰链体模型。整个人体的构成满足树型结构,在更新时需要树型中的节点一一更新。根节点在局部仿真时固定不变,在整体仿真时,根节点代表整个人体的运动位置与角度,更新线速度与角速度。
最后,在人体每个子链上建立包围盒,包围盒根据子链模型的不同而不同,用以检测交互仿真时的碰撞单元。
步骤2在人体运动的局部空间中,对人体模型进行独立仿真,如图3所示。
步骤2.1从脚本文件(Lua脚本)加入数据驱动函数,作为人体运动的自身驱动力,作用位置在人体的各个支链上,如公式(24)、公式(25)。
其中,A、T、和C分别为振幅、周期、相位和偏移量。
步骤2.2加入SPD控制器,将驱动力与自身的状态转换为可以描述刚体(人体)运动的变量,转动力矩τn,如公式(26)。
其中,分别为下一时刻期望到达的广义坐标和广义加速度,qn分别为当前时刻广义坐标、广义速度和广义加速度。另外,kω、kp和kd为控制系数,并满足kd≥Δtkp且kω与kp在同一数量级。此外,根据拉格朗日动力学知,M'n+1为下一时刻的质量项,Cn为当前时刻的科氏力项,使用欧拉法化简M'n+1项,如公式(27)和公式(28)。
其中,Jn为当前时刻的雅克比矩阵,JTn为当前时刻雅克比矩阵的转置,为当前时刻的质量矩阵,包括质量和惯性张量两部分构成,为角速度ω的反对称矩阵。需要注意的是,与标准的拉格朗日动力学不同的是,这里使用的是qn来近似计算下一时刻产生的M'n+1项。
步骤2.3加入拉格朗日动力系统,该系统基于真实的物理运动规则,通过人体各个支链的动力(既前面给予的驱动力),计算出各个支链的角加速度
步骤2.4加入欧拉差分方程,通过角加速度角速度角度qn计算出下一帧的速度与角速度。既
计算出了下一步的期望角度与期望角速度,可以通过人体的支链结构计算出每个支链的位置。
步骤3在人体子链包围盒上,建立采样数组并对耦合面进行采样,对未通过采样的耦合面进行插值计算
步骤3.1在人体子链包围盒上,建立采样数组。
采样数组(SamplingArray)的作用是:映射子链上的耦合面并对其采样。采样数组建立在每个子链的包围盒上,数组的维度是二维,其中:
大小(row×col)=子链面积(linkS)/耦合面面积(coupleS)
row=子链最大周长(MaxL)/耦合面直径(coupleL)
col=子链Y轴直径(YL)/耦合面直径(coupleL)
数组的每个元素由耦合面ID、子链ID和采样标记等信息组成。由于要求将三维空间的耦合面映射到二维空间的采样数组,需要对应的坐标映射公式,映射公式(29)如下。
公式(29)将三维空间中位于以某点(x,y,z)为中心的耦合面映射到基于角度的坐标系中,由于角度值域我们需要将其转换到数组大小row×col的整数坐标中。转换公式(30)如下。
经过公式(30)的转换,坐标代表耦合面映射到数组中的坐标。采样数组的第一列元素为子链最右端的一列网格,如果从做向右扫描数组的每一列,那么相当于以子链最右端为起始,逆时针扫描子链上的所有网格。对于不能完全坐落在包围盒上的耦合面,采样最小二乘法求解角度。
步骤3.2通过采样数组进行耦合面采样,对未通过采样的耦合面进行插值计算。
在遍历数组寻找耦合面时,不用遍历整个数组,因为这样将退化成遍历所有的耦合面。设定每隔2个单位对数组采样,取得数组单元后再判断是否含有耦合面,如果有则进一步计算。
数组边缘单位需要全部采样,直到找到存在耦合面的单位。采样后的耦合面不是全部耦合面,在进行递归运算时,可以防止没有找到耦合面的特殊情况。
在对数组采样后,只将通过采样的耦合面传递给人体计算,对没有采样到的耦合面进行插值计算。耦合面的计算量缩小至少为原来的1/4,矩阵计算复杂度为O(1/16·couples2)。插值计算过程如下:
1)遍历所有数组网格,找到第一次没有计算的耦合面;
2)以自身为坐标中心,递归周围网格,在4个象限里分别找到一个已经计算过的。
3)进行插值计算,插值与耦合面加速度值与距离本耦合面的距离有关,其表达式为公式(31)。
4)将计算完的耦合面标记到数组中;
5)返回1)步骤,直到遍历完数组。
前面分析了耦合面采样的基本方法,在具体实施时还需要设定一些特殊情况的处理方法,有以下几种:
[1]如果原来分布在某个子链的耦合面很少,则不必采样,因为少量耦合面的计算不会大量增加时间消耗。我们设定一个闸值,如果耦合面落在每个子链的数量超过了这个闸值就进行采样,反之则不进行。本文将闸值设定为τ=25,耦合面数量在2000左右,子链数量为20,则有τ=(1/4)×(2000/20)≈25。
[2]采样并不一定每次都能落在有耦合面的网格,这具有一定的概率,如果采样效果不好,远远低于原来的1/4,则需要重新采样。这里设定,当采样后的值满足1/10<s≤1/4,则进行交互仿真,否则重新设定采样起点并重新采样,直到3次循环后,如果仍未满足条件则降低采样单步。
步骤4计算流体对人体的粘滞阻力,将人体子链的速度公式由线性改为非线性并对其进行计算;
步骤4.1加入粘滞阻力,计算子链加速度。
首先,进行坐标系的转换。在人体独立仿真时,建立在局部空间,人体的运动坐标从笛卡尔空间转换为广义坐标空间,转换公式(32)如下。
将人体的广义坐标系转换到耦合面坐标系下,有转换公式(30)。
此处的雅可比矩阵的结构为表达式(34)。
其中,k的是人体模型所有子链自由度的总和。
流体通过耦合面与人体传递信息,流体传给人体的信息是处理后的压强值fP。流体通过压强公式计算每一个耦合面的压强,并连同其他信息一起传给人体。
耦合面具有法向信息的单位向量代表压强作用方向,经过碰撞检测的耦合面关联到人体的链条。对法向量进行处理,将属于同一个链体的法向量归纳在一起,有数学表达式(35)。
其中,Scouple表示耦合面集合,SiBody表示第i个链条,集合Scouple∩SiBody表示与第i个链条发生碰撞的所有耦合面集合。实现方法是在碰撞检测时,标记所有与链条发生碰撞的耦合面,标记上碰撞的链条ID,将相同ID的耦合面存储到各自的容器里,得到属于每一条子链的耦合面集合ni
法向量集合的结构为表达式(36)。
k表示与第i个链条相交的耦合面的总数,每一个耦合面的法向量以此组成集合ni的列,向量的三维坐标组成集合的行向量,即
计算出压力方向和数值大小后,进一步由压强公式得到流体作用在每一根链体上的压力,有表达式(37)。
其中,矩阵si表示耦合面的面积大小si=(s1,s2,…,sk)T,矩阵pi表示压力数值大小pi=(p1,p2,…,pk)T,矩阵ni表示压力方向,矩阵表示从广义坐标转换到世界坐标的转至矩阵。
经过数学表达式变换,求得所有链条上的压力公式。将雅可比矩阵与单位法向量矩阵ni合并成一个矩阵,有雅可比表达式(38)。
为DOFs×couples维度的矩阵,k为链条数量,代表从流体空间转换到人体模型的广义坐标空间,DOFs为自由度,couples为耦合面总数。
的每一项表示所有落在该链条上的耦合面在世界坐标系中的法向量集合。表达式的结构为公式(39)。
中的(x,y,z)对应的是人体第i个铰链体的位置,与角度转动无关,即矩阵ni中的雅可比对应的(xk,yk,zk)为耦合面法向量,两者代表的值不一样。
得到的表达式,有人体链条上的压力矩阵公式(40)。
其中,矩阵S表示耦合面面积信息,矩阵P表示压力数值大小信息。
考虑人体在水中受到粘滞阻力的影响,得到公式(41)。
当人体子链初速度为零且时间t=0时,加速度有最大值amax=(F-f)/m;随着子链运动速度逐渐增大,加速度逐渐减小且最终将趋于零,子链的运动速度将趋于稳定值。改写公式(41)为公式(42)。
对公式(42)两边同时积分,得到公式(43)。
求解,得到公式(44)。
其中,vT=(F-f)/k(η,μ)为子链的最终速度,称为极限速度。速度v与时间t成指数的倒数关系,而不是匀加速运动。考虑了粘滞阻力,当t→+∞时,运动速度趋于恒定值,如果不考虑粘滞阻力,运动速度将匀速变化。
人体在流体中运动所受的粘滞阻力可以由斯托克斯公式(45)给出。
R=6πημv (45)
带入人体子链加速度的公式,使人体驱动力流体压力流体粘滞阻力R=6πημv,人体对流体的影响加速度和人体子链速度可表示为公式(46)、公式(47)。
公式(46)中,第三项为流体对人体的粘滞阻力表达式,其中k是常量系数,η是流体粘滞系数,μ是人体触水面积,表示人体子链当前运动速度。当温度为25摄氏度时,水的粘滞系数为1.0050。
步骤4.2计算子链速度公式,将速度公式由线性改为非线性。
传统的方法是将耦合面全部放入矩阵计算,效率较低,本发明考虑到采样耦合面具有的分布特点,用少量的采样耦合面代替全部的耦合面进行矩阵运算。其压力公式(48)如下。
公式(48)中的三项表达式分别为阻力、驱动力和粘滞力。集合S'表示采样耦合面的集合,有
速度公式不是线性变换,是一个幂倒数变换过程。它的定义域为(0,+∞),值域为(0,vT),其中可以证明函数f(t)在(0,+∞)是收敛的。
带入泰勒展式第n+1项,得到公式(49)。
进一步求导,得到公式(50)。
函数f(t)在定义域(0,+∞)中是收敛的,函数的泰勒展式在(0,+∞)也是收敛的。可以进一步证明,根据泰勒定理,如果t∈(0,+∞),则称f(t)在t=t0处是收敛的。将公式(50)带入,得到公式(51)。
化简可得公式(52)。
公式(52)中,a为大于1的常量,当n趋近无穷大时,极限式等于0,因此函数f(t)的泰勒展示仍然是收敛的。
在实际的仿真中,每一步Δt时间段不大,根据硬件环境与仿真系统的不同有所改变。Δt在大概率事件下有0<Δt<1。考虑到这种情况,我们使展式的t0=0,则,有公式(53)。
考虑到仿真性能,在线性插值后面添加三项泰勒展式作为插值的补偿项,最后,有速度的计算公式(54)。
步骤5在三维A星算法的基础上,计算人体运动的目标路径,并对目标路径的序列做连续化处理。
步骤5.1在三维A星算法的基础上,计算人体运动的目标路径。
A星算法是基于状态空间的,状态空间的添加与删除是基于评估函数,有评估公式(55)。
f(x)=g(x)+h(x) (55)
其中,g(x)是从起点到节点x的实际耗费的度量,h(x)是从节点x到终点的最小耗费估量,当h(x)=0没有利用到任何全局信息,此时A*算法就退化成Dijkstra算法,且h(x)要满足相容性条件:h(x)不能高于节点x到终点的实际最小费用。
A星算法的关键在于寻找一个合适估价函数,在估价函数的构造中引入了距离和方向两个要素,其表达式为公式(56)。
h(x)=w1·L+w2·a (56)
其中,L表示当前节点到终点的欧式距离,a表示起点到当前节点的线段与当前节点到终点的线段的夹角。w1和w2分别为距离与角度的加权值,取值范围在0.55~0.65和0.35~0.45。但这种方法的问题在于,距离与角度的单位不统一,在人体仿真中,如果人体运动在一条较长的流体中,距离值远远大于角度,那么角度的改变将失去对人体的约束力。
将公式(56)中的距离与角度做归一化处理,计算两者在各自的单位中
贡献大小,而不是比较两者的数值大小,其表达式为公式(56)。
其中,n为节点x的关联节点数量。在做归一化后,算法的估价函数计算量增加一定程度,但却有效的减少了算法对状态空间的探索次数。
空间中的网格结构分为6-邻接、18-邻接和26-邻接。出于对仿真效率与精确度的考虑,本发明采取则中的办法选取18-邻接的网格结构,即一个网格除8个顶点相接的网格,剩下的18个网格皆为该网格的关联网格。对于这样的结构,需要在算法遍历时将原来二维平面的8个网格遍历该为18个网格的遍历。在算法的实现过程中,构造两个链表。分别存储待扩展的节点和以扩展的节点,分别称为Open集与Close集,算法步骤如下:
1)初始化。将起点信息加入到Open集,Close集初始化为空,对网格空间中的静态障碍物对应的网格以及周围网格的h(x)设定相应大小值。
2)搜索Open集中估价距离最近的节点,将当前节点加载到Close集中,将最近节点作为当前节点并从Open集中删除。判断当前节点是否为终点,如果是,转向第4步,否则转向第3步。
3)判断当前节点是否在确定范围内,如果是则将当且节点的关联节点(18-邻接)加入Open集中,否则不做处理,跳转到第2步。
4)从当前节点开始,利用回溯的方法找到起始节点到终点的最优路径,算法终止。
步骤5.2对目标路径的序列做连续化处理。
算法结束后,得到一组网格序列S{qi},这组序列表示人体运动的目标轨迹在网格中的位置。我们需要基于这组序列建立一种数据结构,以便后面的仿真系统使用,其结构如下
本发明以网格中心位置代替整个网格,在人体跟踪目标轨迹时,只需考虑序列上的中心位置以及每个序列对应的切线方向。中心位置由网格坐标进行适当的扩充得到,如公式(57)。
WorldScalex、GridScalex分别为x轴在世界空间的大小和在网格空间的大小,y坐标、z坐标的求法类似。
切线方向由前节点与当前节点的位置得到,公式(58)。
起始节点的切线tagent0=tagent1。对每个序列号qi,有网格Grid(i,j,k)对应空间中的点World(x,y,z),其切线方向为Tagent(tx,ty,tz)。该序列构成一个离散的点集,在对空间连续点的求解过程中,需要对每个点进行插值计算切线方向,如公式(59)。
其中,p为连续点,x为人体运动最长轴(此处设为x轴)。经过公式变换,目标轨迹对应的空间中的连续点计算出切线方向。
至此,得到人体运动的目标路径的全部信息,该目标轨迹是由一些列空间网格组成的,该网格的序列是由改进的基于三维空间的A星算法得到的,网格的世界坐标由网格中心位置映射得到,它的切线方向由前节点与自身位置得到,网格间的连续点有插值公式算出。
步骤6路径的两个向量包括距离向量和切线向量,依据两者在人体视觉空间中的象限分布以及状态选择算法,确定状态改变量并计算运动角速度,如图4所示;
步骤6.1计算距离向量与切线向量在视觉空间中的分布。
qt为目标路径在点p(xt,yt,zt)的切线方向,此处的切线方向qt由目标路径的网格信息进行插值所得,qm为人体运动在点p(xm,ym,zm)的切线方向,且满足xt=xm。Δdi为人体与目标路径的距离,ε为管道半径。
设定人体视觉空间Β,该空间以平行人体运动方向为z轴,垂直人体方向为y轴,平行人体横截面为x轴。将距离向量与切线向量转换到Β空间,转换公式如公式(60)、公式(61)。
Δd′t=Jview·(Δdm-Δdt) (60)
q′t=Jview·((qmqt)qm-qt) (61)
其中,Jview表示从世界空间转换到人体视觉空间的转换矩阵,(qmqt)qm-qt表示目标路径的切线向量qt,在以人体运动切线qm为法线的平面∏上的投影,即把切线qt投影到视觉空间的xoy平面上。
类似的,将距离向量与切线向量投影到视觉空间的xoy平面。例如,切线在第二象限,距离在第四象限,这种情况说明,目标路径在人体运动的左下方,但由于切线方向相反,人体正在逼近目标路径。如果切线与距离在第一象限,则说明目标路径在人体运动的左上方且逐步远离人体运动。
进一步的有,切线q′t的角度代表接近的方向,大小代表接近的速度,而距离向量Δd′t的角度代表距离方位,大小代表距离数值大小。
步骤6.2依据状态选择算法,确定状态改变量。
该算法有了两个判断条件,关键在于对这两个判断条件如何取舍。本发明采用了一种基于管道判断法的折中策略。当人体运动到管道中,以切线方向判断为主,距离向量判断为辅;当人体运动到管线外,以距离向量判断为主,切线方向判断为辅。
首先,建立UP、DOWN、LEFT、RIGHT 4个方向的转动操作,其中,每种操作分为1、2、3等,等级越高,对应的转动速度越快。主条件权重为2,辅条件权重为1,当主条件方向与辅条件方向重合时,权重相加;当主条件方向与辅条件方向相反时,权重相减;否则,以主条件权重为准。
例如,如果人体运动距离目标路线Δdt≤ε,则进入管线,以切线方向判断为主,权重为2,以距离方向判断为辅,权重为1,此时两则方向相反,则最后的权重为state=2-1=1,如果两者方向相同,则权重为state=2+1=3,转动方向皆为切线方向,反之亦然。
算法总结如下:
1)根据人体当前位置和方向与目标路径的信息,将切线与距离向量投影到人体视觉空间中;
2)利用公式(62)计算出人体运动改变的方向与级别
3)根据(direct,state)的所在象限和级别大小,选取操作种类(UP、DOWN、LEFT、RIGHT)以及操作级别(1、2、3);
4)计算出对应级别的转动能量
算法结束后,更新人体运动方向。
步骤7根据人体与流体的交互信息,计算人体在流体中的运动能量,计算运动线速度,如图5和图6所示。
步骤7.1计算人体在流体中的运动能量。
经过前面的步骤,计算出运动角速度,但线速度没有得到。由于线速度和角速度在运动中反映的是人体运动快慢的参数,能量作为刻画运动的能力可以正确的描述,所以本发明用能量公式来进行计算。
在流体中运动时,人体在能量方面的变化主要体现在:驱动力fdrive,碰撞力fcollision,惩罚力fpunish,阻力fresistance等几个方面。不同的力对能量的影响不同,总的表达式来表示人体模型的能量变化,公式(63)如下。
E=Edrive(t)+Eexpend+Ecollision+Epunish+Edeviation (63)
Eexpend表示为消耗能,即先后两次运动时所在的状态差异带来的耗能,可以表示为Statei->Statei+1所带来的能量变化,如公式(64)。.
Eexpend=-(kT(Δd)+rT(Δα)) (64)
kT代表的是斜率差,Δd代表位移差,Δα代表根节点的转动,rT代表运动轴的转动。前后两次的不同状态表示了人体模型的一次运动,而一次运动模型自身所消耗的能量为Eexpend
Ecollision表示为碰撞力能,主要描述的是人体自身发生的碰撞所消耗的能。主要通过碰撞检测技术来估算人体发生碰撞的所有链的速度Vcollision,如公式(65)。
Epunish表示的是人体运动的时,在流体中改变动作所带来的惩罚能。流体在不断变化的同时,给人体模型带来不同的压力τ,此压力在前面交互的时候已经求得,如公式(66)。
Δt表示前后两个状态的时间差,τi表示流体对人体第i个链的压力,对其进行积分,便得到了惩罚力所作的能量。惩罚力不一定是正的或者负,它决定与流体对人体的压力所做的功是向前的多还是向后的多。在做流体的人体碰撞检测的时候,把对支链的压力分为前后两个集合,如公式(67)。
如果表示流体对人体运动起阻碍作用,反之,起到推动作用。
流体的对人体的压力τ改变的不仅是运动的肢体(如前所述),还会在整体仿真阶段改变人体的运动的能量。比如人向后划水,能量为正(向前),浪从前把人向后推,能量为负(向后)。在整体仿真阶段,流体对人体的影响也反映作用在这个能量上面。
Edeviation表示为人体模型运动的轨迹与目标轨迹所带来的偏差。
Edeviation=||Δd-kT(Δd)k||+||Δα-rT(Δα)r|| (68)
人体模型在运动耗能时,仿真系统会分配一定的能量做驱动力能Edrive。Edrive不为定值,如果将人体模型设定为数据驱动的情况下,驱动力能量在每一刻也应该不同,可以表示为Edrive(t)。
步骤7.2计算人体运动线速度。
线速度、角速度与能量之间满足公式(69)。
最后一部分是渲染出人体,人体渲染相对简单,不单独列出详细介绍,最主要的一部分在于根据人体位置与方向的改变设定相应的矩阵变换,通过渲染管线与GPU中对应的变量关联,最后将人体模型的顶点信息导入GPU进行渲染,结果如图7所示。

Claims (6)

1.一种流体环境下人体运动仿真方法,其特征在于该方法包括以下步骤:
步骤1,解析XML资源文件,初始化人体运动参数并建立人体运动模型;
步骤2,在人体运动的局部空间中,人体模型进行独立仿真;
步骤3,在人体子链包围盒上,建立采样数组并对耦合面进行采样,对未通过采样的耦合面进行插值计算;
步骤4,计算流体对人体的粘滞阻力,将人体子链的速度公式由线性改为非线性并对其进行计算;
步骤5,在三维A星算法的基础上,计算人体运动的目标路径,并对目标路径的序列做连续化处理;
步骤6,依据路径的距离向量和切线向量在人体视觉空间中的象限分布,通过状态选择算法,确定状态改变量并计算运动角速度;
步骤7,根据人体与流体的交互信息,计算人体在流体中的运动能量,计算运动线速度。
2.根据权利要求1所述的流体环境下人体运动仿真方法,其特征在于,所述步骤3具体为:采用了一种耦合面交互法技术,该技术在人体子链包围盒上建立采样数组,通过对耦合面采样,降低传递数量,达到提高交互效率的目的,对应空间中每个耦合面的位置,有采样数组的映射公式(1)、公式(2):
包围盒的半径固定,公式(1)将三维坐标转换成二维角度坐标,公式(2)将角度坐标转换到包围盒上的数组坐标;坐标代表耦合面映射到数组中的坐标;row=子链最大周长/耦合面直径;col=子链Y轴直径/耦合面直径;
在遍历数组寻找耦合面时,不遍历整个数组,因为将退化成遍历所有的耦合面;设定每隔2个单位对数组采样,取得数组单元后再判断是否含有耦合面,如果有则进一步计算;
将通过采样的耦合面传递给人体仿真计算,计算后的结果用以插值计算没有通过采样的耦合面的信息,有插值公式(3):
其中,a(i,j)代表数组对应坐标上的耦合面的加速度。
3.根据权利要求1所述的流体环境下人体运动仿真方法,其特征在于,所述的步骤4具体为:采用一种人体子链的速度计算公式,该方法加入了流体的粘滞阻力,其加速度随着速度的变化而变化,速度公式由线性公式改为非线性公式,加速度计算公式(4)如下:
公式(4)中,第三项为流体对人体的粘滞阻力表达式,其中k是常量系数,η是流体粘滞系数,μ是人体触水面积,表示人体子链当前运动速度;当温度为25摄氏度时,水的粘滞系数为1.0050;为人体子链在广义空间里的速度;
速度计算公式(5)如下:
人体与流体的交互总面积为S,将其分成k等份,则有称si为流体人体交互的耦合面;
计算出每一个耦合面的作用力,建立一个k×n的选择矩阵,将k个耦合面从总数n个中挑选出来;其中,每个耦合面的压力表达式为公式(6):
其中,ni代表第i个耦合面的单位法向量,有耦合面受到的压力表达式为公式(7):
其中,雅可比的表达式为公式(8):
公式(8)中,是一个维度为Si×m的矩阵,描述耦合面的法向量在笛卡尔积空间中对人体3个方向的作用的程度,代表在第i个铰链体上的所有耦合面的集合,Si表示集合元素的数量;为k×n维度的矩阵,即代表从广义空间转换到耦合面空间的转换;
在广义空间下,将所有耦合面进行积分人体自由度的受的压力可以表示为公式(9):
公式(9)中的三项表达式分别为阻力、人体动力和粘滞力;集合S'表示采样耦合面的集合,有
计算第j个耦合面对第i个铰链体的压力为τi,再将所有的耦合面对铰链体的压力进行积分便可以得到人体自由度所受到的压力;根据速度公式(5)变换得到泰勒展示(10)和迭代公式(11):
将公式(10)带入公式(11),得到速度计算公式(12):
4.根据权利要求1所述的流体环境下人体运动仿真方法,其特征在于所述步骤5具体为:
采用一种在流体环境下计算人体运动的目标路径的算法;
该算法建立在三维A星算法上,首先对流体空间进行网格化,然后初始化空间参数,接着利用三维A星算法计算人体运动的目标路径序列,最后对序列进行连续化处理,使其能够满足下一阶段的计算要求;
三维A星算法中的估价函数为公式(13):
其中,L表示当前节点到终点的欧式距离,a表示起点到当前节点的线段与当前节点到终点的线段的夹角;w1和w2分别为距离与角度的加权值;n为节点x的关联节点数量;
对每个序列号qi,有网格Grid(i,j,k)对应空间中的点World(x,y,z),其切线方向为Tagent(tx,ty,tz);该序列构成一个离散的点集,在对空间连续点的求解过程中,需要对每个点进行插值计算切线方向,如公式(14):
其中,p为连续点,x为人体运动最长轴,此处设为x轴。
5.根据权利要求1所述的流体环境下人体运动仿真方法,其特征在于所述步骤6具体为:采用了一种跟踪目标路径的算法,该算法根据向量在视觉空间中的象限分布和状态选择算法,从状态集合中选择改变值,使得跟踪效果更逼真,状态改变种类更多;
设定人体视觉空间B,该空间以平行人体运动方向为z轴,垂直人体方向为y轴,平行人体横截面为x轴;将距离向量与切线向量转换到B空间,转换公式如公式(15)、公式(16):
Δd't=Jview·(Δdm-Δdt) (15)
q't=Jview·((qmqt)qm-qt) (16)
其中,Jview表示从世界空间转换到人体视觉空间的转换矩阵,(qmqt)qm-qt表示目标路径的切线向量qt以人体运动切线qm为法线的平面∏上的投影,即把切线qt投影到视觉空间的xoy平面上;
状态选择公式(17)如下:
其中,direct代表状态改变方向,state代表状态改变等级,Δdi为人体与目标路径的距离,ε为管道半径。
6.根据权利要求1所述的流体环境下人体运动仿真方法,其特征在于所述步骤7具体为:采用了一种人体运动能量公式,进一步包括一下,
Edrive(t)为驱动力能,Eexpend表示为消耗能,即先后两次运动时所在的状态差异带来的耗能,可以表示为Statei->Statei+1所带来的能量变化;
Eexpend=-(kT(Δd)+rT(Δα)) (19)
kT代表斜率差,Δd代表位移差,Δα代表根节点的转动,rT代表运动轴的转动;一次运动模型自身所消耗的能量为Eexpend
Ecollision为碰撞能,描述的是人体自身发生的碰撞所消耗的能;通过碰撞检测技术来估算人体发生碰撞的所有链的速度Vcollision
Epunish是在流体中改变运动动作的惩罚能;流体在不断变化的同时,给人体 模型带来不同的压力τ;
τi表示流体对人体第i个链的压力,把对支链的压力分为前后两个集合;公式表示为
Edeviation表示为人体模型运动的轨迹与目标轨迹所带来的偏差;
Edeviation=||Δd-kT(Δd)k||+||Δα-rT(Δα)r|| (23)。
CN201410568918.6A 2014-10-22 2014-10-22 一种流体环境下人体运动仿真方法 Expired - Fee Related CN104318601B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410568918.6A CN104318601B (zh) 2014-10-22 2014-10-22 一种流体环境下人体运动仿真方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410568918.6A CN104318601B (zh) 2014-10-22 2014-10-22 一种流体环境下人体运动仿真方法

Publications (2)

Publication Number Publication Date
CN104318601A CN104318601A (zh) 2015-01-28
CN104318601B true CN104318601B (zh) 2017-08-15

Family

ID=52373827

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410568918.6A Expired - Fee Related CN104318601B (zh) 2014-10-22 2014-10-22 一种流体环境下人体运动仿真方法

Country Status (1)

Country Link
CN (1) CN104318601B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3333738A1 (en) * 2016-12-06 2018-06-13 Fujitsu Limited Streakline visualization apparatus, method, and program
CN109215128B (zh) * 2018-08-09 2019-12-24 北京华捷艾米科技有限公司 物体运动姿态图像的合成方法及系统
CN110766985A (zh) * 2019-10-09 2020-02-07 天津大学 一种穿戴式运动传感互动教学系统及其运动传感方法
CN116030192B (zh) * 2022-12-23 2023-07-07 深圳六零四五科技有限公司 一种基于动力学特征的骨骼段预处理方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1585040A1 (en) * 2004-04-06 2005-10-12 Athanasios Dimas A numerical method for simulating the interaction between fluid flow and moving or deformable structures
CN102214365A (zh) * 2011-07-11 2011-10-12 中国人民解放军海军航空工程学院 基于骨骼动画原理的通用虚拟人仿真技术
CN103426196A (zh) * 2013-08-30 2013-12-04 电子科技大学 一种流体环境下的关节动画建模技术

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1585040A1 (en) * 2004-04-06 2005-10-12 Athanasios Dimas A numerical method for simulating the interaction between fluid flow and moving or deformable structures
CN102214365A (zh) * 2011-07-11 2011-10-12 中国人民解放军海军航空工程学院 基于骨骼动画原理的通用虚拟人仿真技术
CN103426196A (zh) * 2013-08-30 2013-12-04 电子科技大学 一种流体环境下的关节动画建模技术

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
《人体运动仿真建模方法研究》;刘雷;《计算机仿真》;20090131;第26卷(第1期);166-168 *
《基于多重网格法的实时流体模拟》;周世哲,满家巨;《计算机辅助设计与图形学学报》;20070731;第19卷(第7期);935-940 *

Also Published As

Publication number Publication date
CN104318601A (zh) 2015-01-28

Similar Documents

Publication Publication Date Title
US20070085851A1 (en) Method of simulating dynamic objects using position based dynamics
CN102750704B (zh) 一种摄像机分步自标定方法
CN104318601B (zh) 一种流体环境下人体运动仿真方法
CN101329772A (zh) 一种基于sph的运动物体与水交互的仿真建模方法
JP5905481B2 (ja) 判定方法及び判定装置
Rubanova et al. Constraint-based graph network simulator
Kirsanov et al. Discoman: Dataset of indoor scenes for odometry, mapping and navigation
Williams et al. A time-line approach for the generation of simulated settlements
Cetinaslan Localized constraint based deformation framework for triangle meshes
CN112862957B (zh) 一种基于约束投影的gpu并行试衣仿真方法
Chen et al. Real-time continuum grass
Rudomin et al. Gpu generation of large varied animated crowds
US20120223953A1 (en) Kinematic Engine for Adaptive Locomotive Control in Computer Simulations
Chen et al. Generation of multiagent animation for object transportation using deep reinforcement learning and blend‐trees
CN110991237A (zh) 一种基于抓握分类学的虚拟手自然抓握动作生成方法
Diaz et al. Crowd data visualization and simulation
Wong et al. Generation of cart‐pulling animation in a multiagent environment using deep learning
Garcia Physically-based animation of plant motions
Tchórzewski et al. Neural model of the vehicle control system in a racing game. Part 1, Design and its implementation
Baciu et al. The impulse graph: a new dynamic structure for global collisions
Zhao et al. A new K-DOPs collision detection algorithms improved by GA
Sulaiman et al. Continuous collision detection for virtual environments: A walkthrough of techniques
Zhou et al. An Approach To Navigation For Lunar Rover Based On Virtual Reality Technology.
Thul Physically-based simulation for optimization guidance in computer graphics and computer vision
Zheng et al. Hierarchical Bayesian Network Modeling and Layout of Huizhou Traditional Villages in Geographic Environment

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170815

Termination date: 20211022