APP下载

基于两段式IK与关键帧的虚拟人运动控制

2012-07-25陈明志许春耀

计算机工程与设计 2012年7期
关键词:关键帧虚拟环境脚踝

陈明志,陈 健,许春耀

(1.福州大学 数学与计算机科学学院,福建 福州350003;2.福州大学 物理与信息工程学院,福建 福州350002;3.网络系统信息安全福建省高校重点实验室,福建 福州350108)

0 引 言

虚拟人 (virtual human)是网络虚拟环境中最基本的交互实体,由网络虚拟环境的参与者控制的虚拟人,被称为参与者的化身[1]。虚拟人的真实展现可以增强用户与虚拟环境交互的自然性,改善虚拟环境的逼真度和沉浸感。

通常用户希望网络虚拟环境系统能实现实时性响应,并且虚拟人模型和运动呈现高逼真度效果,实时性的前提是系统的计算量与数据的网络传输时间要尽可能的少,而高逼真度却需要较多的基础数据与较复杂的计算量。因此如何增强用户与虚拟环境交互的自然性,提高虚拟人运动控制的效率与改善显示效果是一个很现实的问题。

目前对虚拟人的研究还主要集中在计算机动画和仿真理论和方法的研究。通常采用运动学和动力学等技术模拟人体的运动[2-4],通过这种模拟反映虚拟人在复杂三维环境中的运动情况。目前对虚拟人通过复杂的网络虚拟环境进行长距离的运动则研究得不多,原因在于这方面的研究涉及到虚拟环境的表示、视觉平滑、虚拟人运动控制、路径规划等一系列复杂问题。

针对网络虚拟环境的应用需要,研究虚拟人的运动控制,提出一种新的两段式计算策略,在逆运动学中设计改进的CCD (cyclic-coordinate descent)算法实现分段IK计算,当虚拟人长距离运动时因回溯路径的缩短,大大减少了计算量,提高了系统实时性响应的效率。引入四元数插值法在关键帧中插入中间帧,提高虚拟人运动的真实感。

1 虚拟人建模与运动控制

常见的虚拟人的几何建模方法主要分为:线框建模(wire frame modeling)、实体建模 (solid modeling)与曲面建模 (surface modeling)等[5]。

由于网络虚拟环境对数据传输速度与模型渲染的实时性要求比较高,因此本文采用了线框建模方法。线框建模的特点是数据存储量少,对其编辑、修改非常快。当然也存在着具有二义性、真实感偏差的缺点,但在网络环境中这种缺点可适当忽略。用线框表示的虚拟人模型由主干骨架、线框图元组成的曲面模型,如图1所示。

图1 虚拟人的3D曲面模型

由于运动控制和骨架模型关系密切,故本文重点讨论骨架建模。人体骨架模型由一系列关节和骨骼块构成,他们之间存在链接关系,通常是关节为点,骨骼为链。本文的人体骨架模型如图2所示。

图2 虚拟人体骨骼模型

虚拟人的运动生成与控制方法通常有参数关键帧法、运动学法、动力学法及运动捕捉法等[4-5]。参数关键帧技术简便,但只能描述一些特定的运动,灵活性不够。而运动学法把人体的关节和骨骼看成运动链,并利用运动链对人体运动进行控制,能较好体现运动的灵活性,但计算量较大。运动学法可分正向运动学与逆运动学。如图3所示。

图3 正向与逆向运动学求解

逆运动学指己知末端效应器的位置信息,从末端反向地求解链上各个关节的旋转角,因其只需要提供末端感应器位置参数,数据量较少,所以较适合网络虚拟环境应用,当然我们还要考虑其方程求解的不确定性、平衡保持、关节角度等问题[6]。

考虑到网络虚拟环境中响应实时性与运动逼真度的平衡,及参数关键帧法与逆运动学法的优缺点,本文采用逆运动学法与参数关键帧法相结合的运动控制方法,以达到扬长避短与优势互补。

首先利用关键帧法 (key frame)来降低数据计算量,采用四元数方法对关键帧进行插值以提高逼真度;然后运用逆运动学法实现对姿态的逼近,采用改进的CCD算法分段计算IK,避免了虚拟人长距离运动时大量回溯计算,提高IK的效率。

这种方法的好处:首先,应用逆运动学法采集末端感应器的数据,依此局部调整关键帧插值得到的运动,以增强真实感;其次,两个方法结合可以产生高复杂度的动画过程。

2 两段法的IK计算

2.1 IK问题与CCD算法简介

(1)IK问题:反问运动学在计算机动画中效果明显,尽管它无法保证最终姿态完全自然真实的,但逆运动学给出的最后姿态是对end-effector的一个逼近。

从根节点到end-effector的矩阵变换:M=R1×T1×R2×T2×…×Rn×Tn。其中Ri(i=1,2,…,n)表示旋转矩阵,Ti(i=1,2,…,n)表示平移矩阵

求解IK问题的方法不少,但基本归结为两大类:解析法与数值法[7]。

(2)CCD算法:CCD算法[8]是沿着运动链逆向依次调整每个关节的旋转角度,让end-effector逐渐逼近目标。

图4实例说明应用以上算法实现手臂的运动:从人体骨骼左臂末端开始沿运动链做反向迭代,逐渐改变每个关节旋转角度,最终实现左手到达一个指定的位置 (左上方)。

图4 初始状态与运动后状态

CCD的算法实现简单,容易控制,并且便于在链中加入新的节点等优点。但由于CCD每一次内循环都最终回溯到根节点,这样计算量就相当的大,其实这并非都是必需的。设想对于距离较近的目标,一般不需要运动到根节点,可以通过调整前端几个关节的角度就可以达到目标点,比如用手去拿放在边上的书,可能只需要肩、肘、腕关节的适度运动就可以获得,而不用让胸、腰、根关节都参与运动。因此根节点的定义就相当关键,若根节点定义不当,一方面可能会导致回溯的计算工作量,另一方面也可能会导致影响身体质心运动的偏差。

2.2 改进的CCD算法

根节点与质心的位置密切相关,而质心运动轨迹的确定是高复杂度的工作,考虑到骨盆的运动和身体质心的运动的相似性,因此本文选择用骨盆中心表示质心位置 (称次根节点),并以此作为人体下肢运动链关节的根节点。假设当目标距离较远时,可以先用下肢关节链运动到相对较近的距离后再用上肢的关节运动,这样我们可以让下肢的关节每次运行CCD算法只需回溯到质心位置,而不需要每次迭代都回溯到颈部 (即主根节点),只有当较近距离时才开始回溯到根节点,使用根的其他分支来配合。此策略因减少回溯的工作,故能以较少的计算量和较快的速度实现关节旋转到达指定的位置。当然这种的方法由于回溯的有限性,也会带来虚拟人运动逼真度一定程度的损失,因此需要根据具体应用对二者做一个平衡,达到合理取舍。

用腿部关节角求解过程说明算法的工作原理。当脚踝和质心的运动轨迹确定之后,任一时刻的脚踝和骨盆中心的位置可以解出,即通过几何方程法进行IK求解[9],就可以迅速地求得腿部关节角。

设虚拟人的脚掌着于水平地面,如图5所示。若已知骨盆中心P1(zb,yb)、脚踝关节点P2(zc,yc)、膝关节点P(z,y),可以很容易求出大腿长度Llap与小腿长度Lcalf,骨盆弯曲角度θhip,膝盖弯曲角度θknee与脚踝弯曲角度θank。

大腿长度Llap与小腿长度Lcalf求解如下式

图5 求解关节旋转角度

此方程组解不唯一,根据事先建立约束条件可以舍弃一些不符合生理结构的解。

在由P,P1与P2这3个点构成的三角形内,应用余弦定理求解出3个关节旋转角度,分别如下式

综合以上分析,改进算法如下:

步骤1 输入虚拟人的初始状态信息:确定运动链上主要结点的位置P,P1,P2,及各关节角的初值与骨骼的长度参量;目标位置D;设置允许误差ε,循环变量i(i=0,1,…,Jroot);

步骤2 计算末端效应器的位置E;若|D-E|≤ε则算法成功,并结束;

步骤3 从节点Ji向末端效应器E与目标点D分别作向量VE,VD;

步骤4 计算两个向量的夹角θ(VE,VD)及其旋转轴VR,让Ji下的子链绕轴VR转θ(VE,VD)调整;

步骤5 按式 (2)~式 (4)计算各关节旋转的角度θ0…θi,根据约束条件修正不满足要求的旋转角;

步骤6 按θ0…θi控制各关节运动;

步骤7 循环变量i=i+1,若i<Jroot,则转步骤2,否则结束。

当脚踝和质心的运动轨迹发生改变时,所估计出的某个时刻的脚踝和骨盆 (髋关节点)的位置也发生改变,于是相应地关节的旋转角度也有不同的值,如图6所示。

3 关键帧四元数插值法

关键帧方法是控制虚拟人运动细节的传统方法[10-11]。在得到关键帧后,还需要在关键帧之间内插中间帧以实现较高逼真度。关键帧插值问题可归结为参数插值问题,所有影响画面图像的参数,如位置、旋转角度等都可都列为关键帧的参数[12]。一般来说,传统的插值方法都可应用到关键帧方法中,但关键帧插值有其特殊性[13]。还涉及两个问题:一是插值过程中的时间控制问题;二是物体朝向的插值问题,涉及Euler角的解。考虑到四元数除可表示物体的旋转,且对旋转角度进行插值比较简单。在文献 [14]的基础上,本文采用Euler角表示关节的旋转,然后将Euler角用四元数来替代,然后用四元数球状线性插值法实现插值。步骤如下。

图6 关节点位置改变导致的旋转角度不同

步骤1 将Euler角 (α,β,φ)转换为对应的旋转矩阵M,因轴的朝向与旋转次序有关,故设定旋转的次序为:先绕Y轴旋转β,再绕X轴旋转α,最后绕Z轴旋转φ;

步骤2 将旋转矩阵M转换为四元数Q;

步骤3 四元数插值法:根据旋转矩阵,设关键帧中某一关节对应的2个四元数q1,q2,现需要插值求得q,要求q与q1,q2在同一个四维球面圆弧上,并可用q1,q2线性表示q。根据式 (5),即四维几何学的球状线性插值方程,可求四元数q

式中:t——指定的插值参数 (通常0≤t≤1)

步骤4 将插值所得的四元数q转换为旋转矩阵M;

步骤5 将旋转矩阵M转换为Euler角 (α,β,φ)。

需要注意的是在转换过程中,要考虑 “万向节锁”问题,并做相应的避错处理。

4 行走运动算法设计

(1)运动周期定义:行走运动是最常见的人体运动,它是一种周期性的重复运动,这种的运动周期过程可以看成是左右两脚不断交替支撑人体的运动过程[15]。

一个步行运动周期的时序关系如图7所示。

Dc表示一个步行周期,Ds为支撑周期,Dss为单脚支撑周期,Dds为双脚支撑周期。

(2)运动参量的设置:为增加人体运动特征的多样性,本文加入动作参量:步幅 (Step)、步行速度 (Speed),通过调节Step、Speed就可以生成不同步幅、步速,实现运动多样性。

图7 行走时序

(3)算法设计:由于行走是左右腿交替的周期性运动,这里以半个周期 (即图7中Dc的前半段)为例,如图8所示,图中绿色实线代表右腿,蓝色虚线代表左腿。

图8 半个运动周期双腿运动

设半个周期是从右脚着地左脚开始摆动到左脚着地右脚离地结束,将此运动期间划分成4个步骤,应用CCD改进算法求解左右腿关节链的关节转动角,算法步骤如下。

步骤1 此时为单脚支撑期,右腿直立,从右脚前掌着地到身体重心垂直,左腿悬空。重心 (即骨盆)的位置、左脚踝的位置及身体的各节角都作为初始值给出。

步骤2 此阶段仍为单脚支撑期,身体重心前倾时,移到右脚掌的前侧上方,其位置可根据相对速度与运动参量及约束方程求得。此时右脚前掌依然在地面上。可把右脚前掌视为链的固定根端,骨盆关节视为末端效应器。当骨盆关节的初始位置和目标位置已经时,采用CCD算法反求关节链上的其他关节角,这正是逆运动学要解决的问题。求完此IK后,同理,根据移动时间关系,左脚掌开始向前方移动,把左脚踝看成左腿关节链的末端效应器,而把骨盆关节看成是固定根端,在已知左脚踝的初始位置与目标位置情况下,也就很容易求得左脚关节链的关节转动角。

步骤3 此时为双脚支撑期,因身体重心继续前移,左脚掌开始着地,右脚掌开始离地。此时重心的初始位置与左脚踝的初始位置已知。而对应的目标位置与也可由约束方程求出。同步骤2相同,利用CCD算法求出此时左右腿关节链上各关节角。中间时刻关节角也是采用四元数球状线性插值法求出。

步骤4 此时为双脚支撑期向单脚支撑期过渡,此时左脚掌已经完全着地而右脚也基本离地。由于受惯性作用,右腿作自由摆动。此时左右腿关节链的根端与末端发生互换,如左脚前掌视为左腿链的根,骨盆关节看作左腿链的末端效应器;而右脚踝看成右腿关节链的末端效应器,而把骨盆中心看成是固定根端。类似步骤2,求解出两条关节链上的关节转动角;求中间时刻关节角的求法同步骤3。

5 实验结果与分析

为验证虚拟人建模与运动控制算法的可行性,本文用3dsMax建立虚拟人的骨架模型、以VC++为开发工具进行各算法的设计。在仿真实验中,通过交互方式调整步幅Step、步行速度Speed等参量,使生成的行走姿态呈个性化。

在确定虚拟人的行为模式以后,分析行走模型、行走的时间和特征参数,设计虚拟人的运动姿态。为减低模拟的计算复杂度,不考虑人体运动较细微的动作,如脚掌的弯曲等。

理论上讲,人体全部关节的位置与角度均可通过逆向运动学计算出。把人体分为上身和下身两部分来处理,上身运动包含左臂、右臂和颈等3条链,;下身运动包含左右腿2条链。本文的行走模型重点设计下半身运动序列。首先利用关键帧法得到运动过程的关键帧,然后再根据以上算法修正关键帧之间人体关节部位的位置。

一个周期的运动通常分解为8个动作关键帧序列,如图9所示。

图9 关键帧序列

在图9中,蓝色的表示左腿IK链,绿色的表示右腿IK链,共有8个动作关键帧,8个动作构成为一个完整的运动周期。第1到4帧是前半个运动周期,其中第1到2帧是单腿支撑期,表示是以右腿为支撑腿,左腿为自由腿的运动过程;第3帧是双脚支撑期,表示重心逐渐由右腿转移到左腿的运动过程。第5到8帧是后半个周期,和第1到4帧类似,只是交换了左右腿,第5到6帧表示是以左腿为支撑腿,右腿为自由腿的运动过程;第7帧是双脚支撑期,表示重心逐渐由左腿转移到右腿的运动过程。其实上,运动周期并不要求必需从静止开始,此外,前半个周期和后半个周期的运动过程除了左右腿不同之外,其他完全一样。

下半身各运动状态主要通过IK运动来实现,根据以上的算法,可以通过某些的参数设置求解出第1,2帧自由腿旋转角度;此外,由于支撑腿固定不动,则通过求解该腿的IK链来确定其摆动位置。

上半身的运动状态由左臂、右臂和头3条IK链组成。上半身运动状态的设计思想比较简单,本文在此不详细展开论述。上臂和前臂摆动的幅度和人体运动速度和步距有关,以保持人体运动平衡。

综合上下身运动设计,一个虚拟人的行走帧序列如图10所示。

图10 虚拟人行走帧 (半个行走周期)

图中 (1),(2),(3),(5)与 (7)为关键帧,(4)与(6)为插值得到的中间帧。从效果上看,中间帧的插入使得虚拟人的行走动作显得更加逼真。

6 结束语

本文构建了一个虚拟人骨骼模型,提出逆运动学和关键帧法相结合的运动控制方法。

在逆运动学中设计改进的CCD算法实现分阶段运动的IK计算,因回溯路径的缩短,减少了计算量,提高了IK效率;在关键帧中插入由四元数插值法生成的中间帧,提高虚拟人运动的真实感,此外IK求解的关节旋转角不仅实现对姿态的逼近,还使关节具有弹性感。此外,通过调整运动特征参量以实现虚拟人动作模式的多样化。实验结果与分析表明算法的有效性。本文算法对虚拟人的其他运动,如跑步、跳跃以及自动捕捉目标都具有参考价值。

[1]Thalmann D,Musse S.Virtual human animation:Crowd simulation [M].Berlin:Springer,2008:59-87.

[2]HAN Xiao-ning,JIANG Yu-ming.Simulation of walking of virtual human based on inverse kinematics and dynamics [J].Computer Engineering and Design,2006,27 (15):2871-2873(in Chinese).[韩晓宁,姜昱明.基于逆运动学和动力学的虚拟人行走仿真 [J].计算机工程与设计,2006,27(15):2871-2873.]

[3]LI Chun-peng,WANG Zhao-qi,XIA Shi-hong,et al.Inverse kinematics using local support poses [J].Chinese Journal of Computers,2007,30 (11):1982-1987 (in Chinese).[李淳芃,王兆其,夏时洪,等.基于局部支撑姿态的逆运动学求解 [J].计算机学报,2007,30 (11):1982-1987.]

[4]REN Li-feng,PAN Zhi-geng,ZHU Jie-jie,et al.Avatar in virtual environments:research and progress [J].Computer Engineering and Applications,2008,44 (10):1-5 (in Chinese).[任利锋,潘志庚,朱杰杰,等.虚拟环境中化身技术的研究与进展 [J].计算机工程与应用,2008,44 (10):1-5.]

[5]Kasap M,Magnenat-Thalmann N.Modeling individual animated virtual humans for crowds [C].ACM SIGGRAPH ASIA Courses.Singapore:ACM,2008:1-8.

[6]Cichocki P,Rzeszut J.Interactive character animation in virtual environments [J].Computer Vision and Graphics,2006,32:1043-1048.

[7]Dr Boulic R.Inverse kinematics techniques of the interactive posture control of articulated figures [D].PhD,Swiss Federal Institute of Technology,2001.

[8]Yong-De Z,Yan-Jiang Z.Kinematic modeling of bevel tip flexible needle [G].LNCS 6425:Proceedings of the Third International Conference on Intelligent Robotics and Applications,2010:405-416.

[9]ZHAO Ya,YANG You-hong,LIU Xian-mei,et al.A study on motion control of virtual human in virtual training simulation system [C].Conference on Simulation Technology and Its Applications,2008:308-313 (in Chinese). [赵娅,杨友红,刘贤梅,等.虚拟训练仿真系统中虚拟人的运动控制研究[C].系统仿真技术及其应用学术会议,2008:308-313.]

[10]Jab oński B,Kulbacki M.Nonlinear multiscale analysis of motion trajectories[G].LNCS 6374:Proceedings of the International Conference on Computer Vision and Graphics,2010:122-130.

[11]LEI Xiao,LIAO Zhi,LIU Cheng.Virtual human body motion transition based on quaternion [J].Journal of Hunan Institute of Engineering,2008,18 (4):55-57 (in Chinese).[雷晓,廖智,刘琤.基于四元数插值的虚拟人运动平滑过渡研究 [J].湖南工程学院学报,2008,18 (4):55-57.]

[12]YU Mingcai,YANG Xunnian,WANG Guozhao.Interpolation of unit quaternion curve with high order continuity [J].Journal of Computer 2aided Design & Computer Graphics,2005,17 (3):437-441 (in Chinese). [虞铭财,杨勋年,汪国昭.高阶连续的单位四元数插值曲线 [J].计算机辅助设计与图形学学报,2005,17 (3):437-441.]

[13]Rose Iii C F,Sloan P P J,Cohen M F.Interpolation using radial basis functions with application to inverse kinematics[P].US Patent:7024279,2006.

[14]Dunn F,Parberry I.3DMath primer for graphics and game development[M].Wordware Publishing,Inc,2005.

[15]REN Jing-li,YANG Ke-jian,ZHENG Zhu-bin.The research of running motion control methods for virtual human[J].Journal of Wuhan University of Technology,2008,32(5):967-970 (in Chinese).[任静丽,杨克俭,郑著彬.虚拟人跑步运动控制技术的研究 [J].武汉理工大学学报,2008,32 (5):967-970.]

猜你喜欢

关键帧虚拟环境脚踝
基于图像熵和局部帧差分的关键帧提取方法
老人怎么练脚踝
前庭刺激对虚拟环境三维空间定向的影响及与空间能力的相关关系
如何通过虚拟环境有效管理Python第三方库
自适应无监督聚类算法的运动图像关键帧跟踪
老人多做脚踝操
人体运动视频关键帧优化及行为识别
基于误差预测模型的半自动2D转3D关键帧提取算法
虚拟环境下大数据智能并行聚类方法研究
七分宽腿裤展现性感脚踝