APP下载

一种基于关键帧重载的虚拟人运动控制方法

2014-06-04孙利谷晓英

机床与液压 2014年13期
关键词:平地关键帧台阶

孙利,谷晓英

(燕山大学,河北秦皇岛 066004)

虚拟人运动是计算机动画研究的前沿,如何使虚拟人运动得更逼真是研究的重点方向。基于运动捕捉的关键帧动画虽然加快了速度,但是其无法应对环境变化而显得死板僵硬的缺点也很明显。利用基于物理描述的实时计算方法虽然可以使虚拟人运动显得真实,但是其计算复杂、占用资源的缺点也限制了应用范围[1]。

现阶段虚拟人动画基本分为骨骼动画和顶点动画两种。其中制作网格模型活动画面的最简单方法[2]是顶点动画,此种动画是由关键帧技术产生的。每个关键帧都必须存储所有顶点的位置,因此虚拟人动画将耗费很大的存储空间。此外顶点动画的物理逼真度也难以验证,可用骨骼动画补充。运动的骨骼带动蒙皮变形[3],相连骨骼的连续变化和位置改变可形成模型动画。文中对骨架控制器进行存储,矩阵对应节点,表达对初始位置做的旋转和偏移量,通过此方式存储空间得到了有效利用[4]。因此利用骨架动画产生逼真虚拟人动画的难点就在于对于骨架的运动控制[5]。为了更为逼真地模拟人的运动,先后将运动学、动力学、生物力学等多个学科的相关知识引入虚拟人运动的仿真中[6-7]。动力学原理是通过各关节上的力和力矩来计算运动的姿态[8],此方法可得到视觉上较为真实的运动。引入动力学后骨架动画的物理逼真度有了很大改善,但计算复杂度也使得骨架动画的应用受到极大的限制[9]。

现有的虚拟人运动研究主要有虚拟人行走[10]、虚拟人跑步、虚拟人游泳[11]和虚拟人行走与跑步之间的运动融合[12]。但是现有的模型都没有考虑过地面的因素,在建立行走模型时都默认为是水平地面。这样建立的模型在处理类似台阶这样的有高度差的地形时就达不到逼真的效果。文中在分析现有的虚拟人行走模型的基础上,对其面对有高度差的地形时的不足进行改进,提出一种基于反向动力学[13]的关键帧重载技术提高虚拟人运动的逼真度。

1 现有行走模型分析

因为行走是一种周期性运动,所以研究虚拟人的行走,可以由一个周期来入手。又因为人体是左右对称的,所以一个周期又可以拆分成两个单步来进行考虑。可以通过腿部的骨架 (如图1(a)所示)来直观地演示行走的周期模型 (图1(b)为从Z轴看去的侧视图)。

图1 虚拟人腿骨简图

首先来看现行的虚拟人行走模型:

步骤0,静止站立,如图1(b)所示。

步骤1,保持身体的重心不动,先抬右腿,如图2(a)所示。

步骤2,如图2(b)所示,此图表示在右脚未着地的情况下,为了保持重心力矩的平衡,身体的重心慢慢开始向前偏移。此过程为步骤 (1)和步骤(3)的中间动作,因而可以对这两个步骤进行插值计算来表示。

步骤3,如图2(c)所示,此时左脚还没有离开地面,而右脚已经落地。

步骤4,左脚抬起,身体前倾,重心准备向前转移。

步骤5,在左脚离开地面、右腿伸直的情况下,身体重心转移到支撑腿正上方。

图2 平地行走过程

这一模型将虚拟人行走的整个过程拆分成为5个阶段,对这5个阶段分别进行计算从而得出整个周期的运动,从而最终完成对虚拟人运动的仿真。可以根据这5个步骤制作预设关键帧来反映虚拟人的行走过程,这也是现在常用的方法。但是这一模型是建立在水平地面的基础上的,因此当虚拟人上台阶时,它的运动模型与正常行走时有一定的相似性,其运动过程与在平地行走时基本一致,只有从步骤 (3)开始,由于台阶有高度差,所以关键帧开始出现不同,如图3(a)所示。到了步骤4的时候双脚的高度也有了明显的差异,如图3(b)所示。

图3 台阶行走模拟图

而台阶运动进行到步骤 (5)的时候除了根骨H有着明显的高度变化之外,其结构又与正常步行时的骨骼结构基本一致 (图4),只是这时虚拟人的重心高度上移了,如图3(c)所示。

图4 行走步骤4、5示意图

综上所述,平地步行与上台阶时的动作之间的差异主要出现在步骤3和步骤4,正是这两个步骤的差异使得平地行走与上台阶的运动模型有了很大的不同,原有模型未能考虑这一点而使得由原有模型求出的虚拟人行走模型在上台阶时产生了一种“平滑上移”的现象,也就是人物的重心是顺着台阶的倾斜平面滑动上移的,而不是一步一步随着脚踩在台阶表面行走而按阶段有规律地起伏,这大大降低了虚拟人台阶行走的逼真度。

2 台阶行走关键帧重载

如图5所示,这是一个上台阶单步周期的腿部线骨骼的路线图。从起始位置F0的腿直立状态到在Fn位置完成一个单步周期时腿部再次回复到直立状态。在这一过程中需要计算并获取一幅中间帧用以替换掉在平地行走关键帧系统中对应的那幅预设关键帧。运动实验表明:人体在上台阶时,在前脚没有踩在台阶上之前,人体的重心基本是不动的。只有在脚踩在地面之前很短的时间内才开始大幅度移动重心,并由前腿发力开始提升重心,因此可以简化模型认为在脚没有落地前重心是不动的。

如图5中所示,根据台阶的高度h和台阶的宽度s,以及虚拟人的腿长数据l1、l2,得到了端点F的坐标 (X+s,Y+h,Z)和髋骨坐标 (X,Y+l1+l2,Z),根据这两个坐标以及大腿长度l1和小腿长度l2,可以联立方程组公式 (1)和公式 (2)来求解膝关节的坐标:

图5 步骤3在台阶行走时的变形

根据这样的公式获取到的坐标点有可能不是唯一的,这时就需要根据膝关节活动角度的约束条件来确定唯一值。

在分别获取双腿膝关节、双腿脚踝和重心 (髋关节)这5个点的坐标后,可以根据这5个点的坐标绘制出双腿在该时间点上的关键帧,即上台阶过程步骤3的对应关键帧;然后再将该关键帧替换掉预制关键帧中的步骤3,再进行插值计算就得到了与实际环境相适应的动画效果。

算法1:对于相应的步骤3的关键帧进行符合实际环境的重绘

输入:台阶高度h,台阶宽度s,大腿长度l1,小腿长度l2,该关键帧对应的时间t,以及该时间点的坐标点 (x,y)。

输出:该时间点的对应的重绘过的关键帧newframe1.model,并将这一model替换掉原有的关键帧组中的该时间点的关键帧数据。

Redraw(h,s,l1,l2,x,y){//只对步骤 3 所对应的关键帧进行重绘

算法描述:Math()方法是计算关节点的算法,简单的计算可以采用前文所述的方法,也可以使用反向动力学计算的方法由时间点确定该关键帧。将这一方法独立出来可以在使用中取得更灵活的应用。Model()方法则是在计算关键帧完成后将各关节点链接并生成骨骼的方法,这一方法的模块化有助于未来升级的需要。

在进行关键帧计算的过程中,可以利用CCD算法对于人体的腿部骨骼结构及关节进行定位计算,获取对应的坐标点信息。

3 利用四元数方法进行插值计算

仅凭关键帧是无法生成动画的。在关键帧生成成功之后,为得到更为流畅的动画效果,可针对不同情况对关键帧采用不同的插值方法。算法2为获取中间帧的算法,在获取关键帧数据之后,将其加入关键帧组中,通过迭代的方式,最终可输出一个按时间轴顺序排列的关键帧组数据,其中迭代次数可由外部进行定义。

算法2:获取中间帧算法

输入:包括每个关键帧中的关节点的位置、角度等一系列关键帧数据。

输出:包含关键帧序列的组。

插值方式分两种:线性插值法和球面插值法。线性插值法拥有计算简单、速度快的优点,但是在描述旋转的情况时,球面插值法则比线性插值法更具优势。文中通过judge(q1,q2)进行判断,如果q1.q2的值大于某固定值采取线性插值法,否则采取球面插值法提高计算速度。

4 基于关键帧重载的虚拟人行走控制方法

如前文所提到的,平地行走与具有高度差的地形行走,两者之间行走的动作是不相同的,因此,在台阶这样地形上的行走模式与平地行走不同,所以如果都用平地行走模式建立的模型,遇到有高度差的地形时,就显得极其不真实,给人很差的视觉效果,从而导致了动画效果的逼真度降低。而且大量的资源会在这种完全采用计算的形式下被占用,造成整体运算速度的下降,在很大程度上限制了其在实际中的应用。而采用动作捕捉等一系列技术的预设关键帧的方式,能弥补其在速度和逼真度上的不足。为了充分利用预设关键帧的优势之处,文中针对平地地形和具有高度差的地形有不同的虚拟人模型行走策略,首先根据台阶高度判断是否需要重绘关键帧,如果为平地行走,则直接使用预制关键帧,否则调用关键帧重绘模块,重新实时绘制并替换符合实际的关键帧。这样既可以减少系统资源占有率,提高绘制速度,还可以提高动画的实时性与逼真性,能够达到实时绘制的要求。当虚拟人行走时,则调用虚拟人行走动作绘制模块,如下所描述。

算法描述:将预制的关键帧进行编组,按时间顺序调取,进行判断。如果不需要重绘步骤3对应的关键帧,就按照时间先后顺序调出预制关键帧,通过插值计算的方式获取完整的过程动画;如果判断结果为重新生成,调出实时生成关键帧的步骤,利用反向动力学方法重新生成第3步数据,得到另一组关键帧,再通过插值计算的方式最终生成虚拟人行走动画的逼真效果。

5 实验及结果分析

首先利用MATLAB7对虚拟人10 cm和20 cm两种不同高度台阶的行走进行了简单的模拟实验。实验结果如图6所示。

图6 平地与不同高度台阶行走模拟

图6(a)显示的是采用不变关键帧的传统方法的虚拟人上台阶时的显示效果。图6(b)和图6(c)显示的是采用重载关键帧方法的虚拟人在遇到10 cm高度和20 cm高度两种不同高度的台阶时所生成的行走效果。

如图6(a)所示,不变关键帧在处理台阶时由于地形高度差的缘故而使动作产生了严重的脱节,外在表现就是使虚拟人产生了瞬移或弹跳的效果,这降低了虚拟人动作的逼真度和连贯性。而采用重载关键帧方法的虚拟人对应不同高度的台阶绘制了不同的对应关键帧,保持了动作的连贯性,生成了更为逼真的运动动画。

图7为虚拟人在面对平地、15 cm、25 cm等3种地形时,利用重载关键帧方法获取新关键帧后的效果图的对比演示。

图7 平地、15 cm、25 cm 3种地形获取重载帧的对比演示

实验证明了文中提出的关键帧重载方法的有效性。当虚拟人在平地或地形变化不大的情况下不进行关键帧重载,这可以充分利用预制关键帧动画的计算快速和相对逼真的优点;而当面对显著的地形变化时,采用关键帧重载技术又避免了动作与环境不协调的缺点。通过对关键步骤采用关键帧重载方法,使虚拟人行走模型能够面对各种情况,产生快速、逼真、多变的虚拟人行走动画。

6 结论

将反动力学应用到虚拟人运动中,提出了基于关键帧重载技术的虚拟人运动方法,此方法能较好模拟人的运动,提高了虚拟人动作的逼真度和连贯性。但研究也存在不足之处,目前在判断是否需要重载关键帧的环节仅仅采用了两脚所在地面高度差判定的方法,而这一方法在面对如“门槛”之类的地形时完全没法判断,从而引发错误,而且在计算台阶上的关键帧时,也没有考虑在符合人体舒适前提下腿部运动的关节角度的问题。这些都是下一步研究的方向。

[1]李石磊,梁加红,吴冰,等.虚拟人运动生成与控制技术综述[J].系统仿真学报.2011,23(9):1758-1771.

[2]STEKETEE Scott N,BADLER Norman I.Parametric Keyframe Interpolation Incorporating Kinetic Adjustment and Phrasing Control[C]//Proceedings of SIGGRAPH'85,1985:255-262.

[3]KRAVTSOV D,FRYAZINOV O,ADZHIEV V,et al.Real-Time Controlled Metamorphosis of Animated Meshes Using Polygonal-FunctionalHybrids[C]//SIGGRAPH Asia 2010,Seoul,South Korea,2010:15 -18.

[4]刘贤梅,李冰,吴琼.基于运动捕获数据的虚拟人动画研究[J].计算机工程与应用,2008,44(8):113 -119.

[5]杜娟.虚拟试衣中人体骨架运动协同的研究[D].上海:东华大学,2012.

[6]MICHAEL Girard.Computational Modeling for the Computer Animation of Legged Figures[C]//Proceeding of ACM SIGGRAPH'85,1985:263 - 270.

[7]RAIBERT M H,HODGINS J K.Animation of Dynamic Legged Locomotion[C]//Proceeding of Siggraph'91,CAN SIGGRAPH Computer Graphics,1991:349 -358.

[8]谭同德,张关锋,赵新灿,等.基于骨骼蒙皮的虚拟人运动仿真[J].微计算机信息,2009(31):30-32.

[9]何凯,姜昱明.基于逆运动学的虚拟人行走[J].系统仿真学报,2004(16):1343-1345.

[10]赵超,梁加红,李猛.基于PCA方法的虚拟人行走引擎研究[J].计算机工程,2013,39(8):288 -291.

[11]阳小涛.虚拟人建模及游泳运动控制技术的研究[D].武汉:武汉理工大学,2009:40-43.

[12]YAMANE Katsu,NAKAMURA Yoshihiko.Robot Kinematics and Dynamics for Modeling the Human Body[J].Robotics Research,2011,66:49 -60.

[13]RIGHETTI L,BUCHLI J,MISTRY M,et al.Inverse Dynamics Control of Floating-Base Robots with External Constraints:A Unified View[C]//Proceedings of the 2011 IEEE International Conference on Robotics and Automation(ICRA 2011),2011:1085-1090.

猜你喜欢

平地关键帧台阶
高楼万丈平地起
革故鼎新 尘毒治理上台阶
遇到一条蛇
走在除法的台阶上
基于改进关键帧选择的RGB-D SLAM算法
60t长64m管道桥平地预制、支架推送架设施工技术
基于相关系数的道路监控视频关键帧提取算法
基于聚散熵及运动目标检测的监控视频关键帧提取
台阶
一种基于自适应关键帧的视频序列拼接方法