三维计算机动画中的关节动画关键算法的分析探讨
2015-05-30方向
方向
摘 要:本文主要针对计算机动画中的关节动画,以关节链结构为基本单位架构骨架系统,对于角色动画中关节动画的一些关键算法进行了分析探讨。
关键词:关节动画;关键算法;逆运动法
三维计算机动画中,基于人体运动的角色动画具有广泛的应用前景,在影视制作、计算机游戏、广告动画设计、虚拟现实等诸多领域都有着重要的用途。关节动画是计算机动画中富有挑战性的技术之一。在关节动画中,以关节链结构为基本单位构架骨架系统,用运动学方法来控制运动。
计算机动画一般包含四个重要的过程:造型,动画,绘制和合成。计算机动画中研究的首要内容是动画,即生成物体的各种运动和变化,或者称为运动控制。本文在研究关节动画时,主要涉及的也只有动画部分。
1 骨骼皮肤动画
三维角色动画本质上是拟人动画——从运动考虑。它从诞生开始就得到广泛的应用,并且在不同的应用领域有不同的技术要求。例如,在电影、仿真应用中,要求极具真实感的角色;而游戏、辅助训练应用中,要求在保证速度的基础上具有较好的真实感。不过相同的是运动控制和角色造型是角色动画的关键和难点。
从角色造型过程中的分层角度可以把造型建模技术分为四种:杆状模型,皮肤模型,骨骼皮肤模型和多层模型。根据角色表达方式一一建模技术的不同,角色动画也可以分为:杆状动画,顶点动画,骨骼皮肤动画和多层模型动画四种。
骨骼皮肤动画包含两部分信息:一是层次化骨架;另一个部分是蒙在骨架上的皮肤。用骨骼承载运动,用皮肤模型表达角色,再利用骨骼控制皮肤变形,就达到了角色动画模拟的目的。
由于在骨骼皮肤动画中,运动的控制实际上是对骨骼运动的控制。人体的整个骨架系统可以看作很多个关节链结构组成的N-元树结构,或者说骨架系统可以分解为很多个相关联的关节结构。因此,本文中的关节动画和骨骼动画在某种意义上是等价的。
2 骨架系统的建立和运动控制
关节链结构是由一系列依次相连的刚体连接而成的开链,两刚体的连接点成为关节,连接两相邻关节的刚体成为链杆,可抽象看作一条线段。在计算机动画中,一般把关节限制为旋转关节,即相邻的刚体在其连接关节处只能作相对旋转运动,而不能做平移等其他运动。
在关节链结构中有两个端点,关节链的起点为基结点,其自由末端为末端影响器;能够完全确定关节链结构状态所需要的独立变量个数称为自由度;关节链结构的所有可能形态的向量空间称为状态空间,其每一个向量定义一种形态。
建立运动方程:
其中,:关节链末端影响器关于世界坐标系的方位;:关节链结构的状态向量。运动方程式关节链结构的显式运动描述,根据提出的问题不同,有两种求解方法,实际上是两类问题的不同求解方法——正向运动学法(Forward kinematics)和逆向运动学法(Inverse Kinematics)。
我们得出了求解单链结构的一般方法,进而得出单链结构的运动控制。但是角色动画中的骨架一般都不是单链结构,往往是很复杂的,而且是多分支关节结构的。采用的方法是把复杂的多分支骨架系统分解成若干个单链结构,即把骨架的求解问题转化为单链结构问题来处理。
一般情况下,角色的骨架结构在一些关节处具有多个分枝,而所有的链杆在关节处形成了一个网状结构。为此,我们把复杂骨架表达为一关节的树状层次结构,树中每一结点均对应于一个关节。描述一个简化之后的人体骨架树层次结构。这样的骨架树结构中有一个根结点,从根节点出发遍历骨架树可以达到任何一个结点;从任何结点出发向上搜索可到任意一个结点,直至根结点。骨架的分解过程,实际上就是选择若干结点对。每一对结点确定一条开得单链结构,其中一个结点作为基结点,另一个结点作为末端影响器。在选择结点对时,要保证基结点在骨架树结构中的层次高于末端影响器对应结点的层次。这样骨架就被分解成若干个单链结结构,进而分别采用单链结构的运动控制来完成骨架系统的运动控制。根据树状层次结构,正运动学方法的求解仍然是显示的;对于逆运动学方法,则需要采用分解方法来分别处理。在角色动画的应用中,一般采用逆运动学方法。由于运动捕捉技术的发展,获取人体骨架中各个状态参数值是一件比较容易的事,而只设定末端影响器的位置参数对于动画制作者来说很容易,相对设定整个骨架的状态参数。
举个例子来说明:动画制作者设定右手骨运动后的位置参数,我们就可以选择“髋骨(基结点)—脊椎骨—右肩骨—右上臂—右前臂—右手骨(末端影响器)”这条单链结构,用逆运动学方法处理问题。关节链结构是一种冗余结构,运动求解往往有多组解。如果采用单链结构,最终使得髋骨的状态发生变化,则需要处理由于髋骨的状态变化而影响的整个人体的状态变化。假如动画制作者同时限定了右肩骨状态参数没有变化,则选择“右上臂(基结点)—右前臂—右手骨(末端影响器)”这条单链结构来处理问题。因此,在具体的问题求解中需要结合问题来选择单链结构。
关节模型的定义如下:
class CAnimationBone
{……
private:
//本地位移
CVector4f mTranslation;
//本地旋转,四元数格式
CVector4f mRotation;
//全局变换矩阵
float mGlobalMatrix[16];
//子节点数组
CAnimationBone*
mChildList;
//子节点的数目
Unsigned char
mNumChildren;
//父节点
CAnimationBone*
mParent;
……};
其中mTranslation是骨骼相对于它的父节点的位移,mRotation是骨骼相对于其父节点的旋转。它们的几何意义分别是骨骼的长度和两块骨骼之间关节的旋转。mGlobalMatrix是骨骼相对于全局坐标系的变换矩阵。根据骨架的层次结构,结合骨架系统的知识可以建立一个人体的骨架系统。
3 结语
本文首先介绍了构成骨架系统的基本单元——关节链结构。在此基础上建立骨架系统,从而得出骨架系统的运动求解的一般方法,即建立对整个骨架的运动控制方法。
参考文献:
[1] 金小刚,鲍虎军,彭群生.计算机动画技术综述[J].软件学报,1997(04).
[2] Dave Shreiner . OpenGL编程指南[M].北京:机械工业出版社,2011.
[3] 宋人杰,史长东,崔卫丽.复杂场景中多细节层次模型生成新算法[J].东北电力大学学报,2014(3).