1.2 人体基本模型
在虚拟人的运动合成与控制过程中,人体模型主要用于描述虚拟人的几何拓扑结构及其物理属性。这些模型都是根据实际的应用场景抽象得来的,较常用的方法是虚拟骨架模型。在这种模型中,虚拟人被视为由多条关节和刚体骨骼组成的关节链构成,这些关节链将人体的各个关节连接起来形成一个树状结构,不同骨骼或关节的运动状态都会受其父节点的影响。人体骨骼的层次结构如图1.7所示[23]。
图1.7 人体骨骼的层次结构
在构成人体骨架模型的所有关节中,除了根关节可以同时进行平移和旋转外,其他关节一般都被设定为旋转关节,即相邻两块骨骼在其关节连接处只能做相对旋转,不能做平移或其他类型的运动。在这种数据记录方式下,非根节点的关节位置平移信息的获取会通过层次结构追溯到根节点,通过与根节点、骨骼长度及待计算节点到根节点的旋转矩阵进行运算,进而计算出其在世界坐标系下的位置信息。人体数据的分段刚体的组织方式具有不会发生骨骼变形等优点,但是这种分层的组织方式会带来误差的累计,这种累计传递到末端节点,会出现运动抖动等问题。
一般来说,每个关节具有1~3个自由度(根关节除外),因此,在具有n个关节的关节链中,自由度通常不会超过3n个,用于描述关节自由度信息的变量被称为关节变量,一组关节变量(向量)决定人体的一个运动状态,一段连续的人体运动则是由一系列这样的离散变化向量组成的。如果把关节链的每一个状态向量视为高维空间中的一个点,那么所有这些向量就组成了一个复杂的高维空间,我们就可以利用降维技术在低维空间中进行人体运动的合成和控制。除去根关节的全局位置信息,这些高维空间中的点便可由一组关节旋转参数表示。Θ表示这样一个高维向量,则有
其中,m为自由度的个数,θi为关节变量,关节变量的参数化表示方法有以下几种:欧拉角、全局坐标、单位四元数、指数映射和旋转矩阵等,它们之间的一些优缺点可参见文献[24]。
图1.8显示的是一个完整的虚拟人骨架模型[25],它由多条关节链组成,每个关节可以视为一个旋转结构,分别拥有不同数量的自由度。对基于物理控制器的运动生成方法来说,关节的类型又与具体使用哪一种物理模拟器紧密相关,不过大多数情况下使用的类型基本上是相同的,参见文献[24]。显然,使用图1.8中的模型对物理模拟而言,无疑是过于复杂,计算量及费用也会非常大,因此,物理模拟方法通常采用一个稍微简化一些的模型,如图1.9所示[25],图1.9中的箭头表示该关节的全局x、y、z方向。
图1.8 数据驱动方法常用的人体模型
图1.9 物理控制器方法常用的人体模型