一种基于骨骼的任意拓扑结构虚拟角色的驱动方法

文档序号:6623846阅读:214来源:国知局
专利名称:一种基于骨骼的任意拓扑结构虚拟角色的驱动方法
技术领域
本发明涉及一种虚拟角色的驱动方法,特别地,涉及一种基于骨骼的任意拓扑结构虚拟角色的驱动方法。
背景技术
虚拟角色动画的生成是一个热点问题,它广泛应用于虚拟现实和游戏等领域中。三维虚拟角色动画的生成方法通常有两种一种是顶点动画,一种是骨骼动画。顶点动画方法直接在虚拟角色模型的基础上做变形,即直接改变虚拟角色皮肤顶点在每一帧中的位置来达到动画的效果。这种方法直观简单,但如果要对物体进行某种整体变形或者模型中需移动的顶点非常多时,该方法就显得相当费时和繁琐。
与顶点动画相比,近年来,骨骼动画更为流行,骨骼动画又称为关节动画。这种动画生成方法分别定义了骨架和皮肤,骨架由一系列骨骼按照特定的拓扑关系联结而成,而包裹这些骨骼的“皮肤”则是一个顶点网,每个顶点的位置受到一个或多个骨骼运动的影响而变化。因此,骨骼动画生成方法首先通过驱动骨架而运动,被定义为皮肤的顶点的运动则以数学公式的方式生成,最后通过逐帧渲染形成动画。为了下面说明的方便,首先对骨骼系统进行描述。骨骼系统的拓扑结构可以看成是由一系列链杆通过关节顺次相连的开式运动链,在骨骼系统中,定义了虚拟角色的骨骼数目、每个骨骼的长度、骨骼与骨骼之间的相互关系等。结合图1,对骨骼系统的基本组成进行说明。在一个虚拟角色的骨骼系统中,对骨骼系统做如下定义。
1)在每一个骨骼上定义一个与之固连的坐标系Fi,该坐标系称为该骨骼的局部坐标系。两个骨骼连接时自动形成关节,骨骼间的连接关系不能构成环。
2)存在且仅存在一个关节称为根节点1,对于和关节2相连的两个骨骼3和4,离根节点近的骨骼3称为关节2的父骨骼,另一个骨骼4称为关节2的子骨骼。对于和骨骼5相连的两个关节6和7,离根节点近的关节6称为骨骼5的父关节,离根节点远的关节7称为骨骼5的子关节。在骨骼5的局部坐标系下,子关节7到父关节6的平移记为{Xi,Yi,Zi}。
3)任何一个关节(骨骼)最多有一个父关节(父骨骼),任何一个关节(骨骼)可以有多个或没有子关节(子骨骼)。
4)根节点除了定义其相对于世界坐标系的旋转外,还定义了其相对于世界坐标系的平移。
由于关节是两个骨骼连接时自动形成的,因此,只要保存了骨骼的信息和骨骼间的连接关系,就蕴含了对关节的定义。在实际应用中,为了表示上的统一,需要定义一个虚骨骼,称为“根骨骼”。这个骨骼没有长度,可视为一个点,其功能和意义与根节点相同。
在利用基于骨骼的动画生成方法,实现虚拟人动画生成时,人们通常定义一个标准的虚拟人骨架模板,虚拟人骨架模板是一个固定的虚拟人骨骼系统。
在现有技术中,虚拟角色的骨骼系统是固定的,即一个虚拟角色在不同的应用场合有固定的骨骼系统,利用固定的骨骼系统实现动画生成的方式虽然简化了虚拟角色的驱动过程,但却有很大的局限性。
首先,在不同的情况下,对虚拟人骨骼系统的要求可能是不同的。以虚拟人手掌部位的骨骼为例,从较远的地方观察虚拟人手掌时,只需要用一根骨骼便可代替整个手掌;而如果需要表现“拿取”东西这一动作时,则需要19根骨骼。因此,对一个虚拟角色,如果只用一个固定的骨骼系统并不能满足所有情况。
其次,在固定模版方法中,由于骨骼系统中各个骨骼间的拓扑关系是固定的,因此固定模板法也不能驱动其它类型的虚拟角色,如动物等。
另外,在固定模板方法中,一个虚拟角色通常保存了自己的骨骼系统和皮肤信息,这样每个角色可有独立的模型。然而,在大规模虚拟环境中,如部队的演练,骨骼系统或皮肤纹理信息通常是相同的,这样就会导致信息的冗余,消耗大量的内存空间。
最后,虚拟角色在磁盘中的存储缺乏统一、完善的格式。当前的一些存储格式不能满足对任意拓扑结构的骨骼系统、多虚拟角色共存的存储要求。

发明内容
本发明的目的是提供一种基于骨骼的任意拓扑结构虚拟角色的驱动方法,实现对虚拟角色的驱动。
为了实现上述目的,本发明提供了一种基于骨骼的任意拓扑结构虚拟角色的驱动方法,包括1)获取虚拟角色的相关信息,所述的虚拟角色的相关信息分为骨骼系统信息、皮肤纹理信息和运动数据;2)定义虚拟角色相关信息的磁盘存储格式,磁盘文件对相同的骨骼系统、皮肤纹理信息、运动数据只保存一次,骨骼系统、皮肤纹理信息和运动数据适用于任意拓扑结构的虚拟角色以及任意数目的虚拟角色;3)根据实际需求,确定具体的虚拟角色;4)根据角色,装载相应的骨骼系统;5)根据角色,装载皮肤纹理信息,装载时,根据皮肤纹理中各个模块的名称建立到骨骼系统中骨骼的映射关系;6)装载运动数据,在运动数据装载前,判断运动数据中自由度的维数与骨骼系统中的维数是否相同,如果不同则运动数据无法驱动骨骼系统,需要重新选定运动数据进行装载或退出虚拟角色驱动的过程;7)从运动数据中提取某一时刻的姿态,若在运动数据中无法找到指定时刻的姿态,则通过对相邻时刻的姿态做插值得到指定时刻的姿态;8)正向运动学计算,计算每个骨骼局部坐标系相对于全局坐标系下的变换矩阵;9)利用步骤8)得到的骨骼局部坐标系相对于全局坐标系下的变换矩阵,重新计算皮肤顶点坐标;10)渲染,根据步骤9)得到的重新计算的皮肤顶点坐标和三角面片列表绘制虚拟角色。
上述技术方案中,在所述的步骤2)中,一个磁盘存储文件由文件头、骨骼系统、皮肤纹理信息单元、虚拟角色信息单元组成;在一个骨骼系统中,骨骼系统由骨骼系统名称和骨骼列表组成,在骨骼列表中包含有骨骼系统的各个骨骼的信息,一个骨骼需要保存的信息有骨骼名称、骨骼索引号、父关节的索引号、静态变换矩阵、骨骼质量、质心坐标及关节活动范围;一个皮肤纹理信息单元由顶点列表、三角面片列表、纹理坐标列表、法向量列表、部位信息列表组成,其中的部位信息列表中有多个部位信息单元,一个部位信息单元包括名称、顶点索引列表、影响权重列表;一个虚拟角色单元由虚拟角色基本信息、骨骼系统索引、皮肤纹理索引和运动数据组成;运动数据中的每一帧姿态由该帧的时刻、根节点的位移以及各个骨骼局部坐标系相对于其父骨骼局部坐标系的旋转组成。
上述技术方案中,所述的虚拟角色的骨骼系统、皮肤纹理信息和运动数据在内存组织上采用共用的方式,一种骨骼系统或皮肤纹理信息可以为不同的虚拟角色所用,而一个虚拟角色在不同的场合也可以采用不同的骨骼系统或皮肤纹理信息。
上述技术方案中,在所述的步骤4)中,装载骨骼系统的具体实现包括4-1、所装载的骨骼系统的拓扑结构是一个多叉树,对多叉树做深度优先遍历,重新排列骨骼间的顺序;4-2、计算初始姿态下骨骼局部坐标系相对于全局坐标系的变换矩阵。
上述技术方案中,在所述的步骤8)中,正向运动学计算包括8-1、将某一时刻的姿态下各个骨骼局部坐标系相对于父骨骼局部坐标系的旋转转换为变换矩阵;8-2、根据步骤8-1所得到的变换矩阵和磁盘存储文件中所包含的静态变换矩阵,计算骨骼局部坐标系相对于全局坐标系下的变换矩阵。
上述技术方案中,在所述的步骤9)中,所述的皮肤顶点坐标的计算公式为p′=TjW·(TjW0)-1·p,]]>其中,p为骨骼皮肤上的一个顶点的坐标,p′为皮肤顶点在骨骼运动情况下的新坐标,0TjW为步骤4-2所得到的初始姿态下骨骼局部坐标系相对于全局坐标系的变换矩阵,TjW为步骤8-2所得到的骨骼局部坐标系相对于全局坐标系下的变换矩阵。
在步骤4-1中,所述的骨骼顺序为根骨骼排在最前面,任意一个骨骼都排在其所有的子骨骼之前。
本发明的优点在于1、本发明方法对虚拟角色按照骨骼系统、皮肤纹理信息和运动数据做逻辑划分,分别存储,实现了对任意拓扑结构、任意数目虚拟角色的驱动。
2、本发明方法采用共用数据结构的机制,减少在磁盘和内存中的空间占用。
3、本发明方法采用四元数表示旋转矩阵,提高了计算效率,节省了存储空间。
4、本发明方法采用非递归的方式来计算正向运动学,提高驱动时的计算效率。
5、本发明方法采用四元数插值可以获取运动片段中任意时刻的姿态,从而实现任意速度的驱动。


图1为一个简单的骨骼系统的示意图;图2为在本发明方法中对虚拟角色的逻辑划分;图3为本发明方法中磁盘文件的组织格式;图4为本发明方法中虚拟角色在内存中的组织方式;图5为本发明方法的流程图。
图面说明1 根节点 2 关节 3 骨骼 4 骨骼 5 骨骼6 关节7 关节具体实施方式
下面参照附图和具体实施方式
对本发明做详细说明。
本发明的基于骨骼的任意拓扑结构虚拟角色的驱动方法包括以下步骤步骤10、获取虚拟角色的相关信息。虚拟角色从逻辑上可以划分为三个部分,如图2所示,分别为骨骼系统、皮肤纹理信息和运动数据。骨骼系统是一种静态信息,它决定了虚拟角色的形状、大小等基本特点,对骨骼系统赋予不同的运动数据可驱动骨骼实现不同的运动姿态,而骨骼的运动会改变皮肤纹理信息,将骨骼系统、皮肤纹理信息、运动数据相结合可实现对虚拟角色的驱动。要实现虚拟角色的驱动,首先就要有上述的虚拟角色的相关信息。这些信息可通过对相关文件做格式转换得到。
步骤20、定义虚拟角色相关信息的磁盘存储格式。基于现有技术中对虚拟角色相关信息采取了独立存储的方式,不同虚拟角色中的相同信息反复存储,浪费存储空间的缺点,本发明方法中对虚拟角色相关信息在磁盘上的存储格式做了新的定义,即将虚拟角色划分为骨骼系统、皮肤纹理信息和运动数据。对相同的骨骼系统、皮肤纹理信息、运动数据只保存一次,一个骨骼系统或皮肤信息适用于任意拓扑结构的虚拟角色以及任意数目的虚拟角色。如图3所示,为保存在磁盘上的文件的组织格式,一个文件由一个文件头、多个骨骼系统、多个皮肤纹理信息单元、多个虚拟角色信息单元组成。此处所述的多个的具体数值根据实际应用的情况而设定。在一个骨骼系统中,骨骼系统由骨骼系统名称和骨骼列表组成,在骨骼列表中包含有骨骼系统的各个骨骼的信息。一个骨骼需要保存的信息有骨骼名称、骨骼索引号、父关节的索引号、静态变换矩阵、骨骼质量、质心坐标及关节活动范围。一个皮肤纹理信息单元由顶点列表、三角面片列表、纹理坐标列表、法向量列表、部位信息列表组成,其中的部位信息列表中有多个部位信息单元,一个部位信息单元由名称、顶点索引列表、影响权重列表组成。一个虚拟角色单元由虚拟角色基本信息、骨骼系统索引、皮肤纹理索引和运动数据组成;运动数据中的每一帧姿态由该帧的时刻、根节点的位移以及各个骨骼局部坐标系相对于其父骨骼局部坐标系的旋转组成。在运动数据中,旋转用单位四元数表示。
步骤30、确定具体的虚拟角色。在虚拟角色相关信息的存储文件中,存储有多种的骨骼系统、皮肤纹理信息和运动数据,对于一个具体的应用场合,只需要选用其中的骨骼系统、部分皮肤纹理信息和部分运动数据,因此在对虚拟角色做驱动前,要根据虚拟角色的应用场合确定具体的虚拟角色,以方便在后续操作中确定骨骼系统、皮肤纹理信息、运动数据的选取。在本发明中,虚拟角色的骨骼系统、皮肤纹理信息和运动数据在内存组织上采用共用的方式,即一种骨骼系统可以为不同的虚拟角色所用,而一个虚拟角色在不同的场合也可以采用不同的骨骼系统。对于皮肤纹理信息和运动数据也同样如此。这种内存组织方式有效地节省了内存空间的开支,适合大规模虚拟环境中多虚拟角色驱动的需要。如图4所示,为虚拟角色在内存中的组织方式,一个虚拟角色通过指针指向其骨骼系统、皮肤纹理和运动数据。一个骨骼系统或皮肤纹理信息可以同时被多个虚拟角色共用。例如,虚拟角色2通过指针指向骨骼系统1、皮肤系统1和运动片段2,将上述骨骼系统、皮肤系统和运动片段组合可实现对虚拟角色2的驱动。而骨骼系统1可同时被虚拟角色1和虚拟角色2共用。从图4中还可以看到,虚拟角色还可以只包括骨骼系统与运动数据,不含有皮肤纹理信息。此时,对虚拟角色的驱动就只是对骨骼系统的驱动。
步骤40、装载骨骼系统。根据步骤30所确定的虚拟角色从磁盘文件中选取骨骼系统,装载该骨骼系统,所选取的骨骼系统的拓扑结构是一个多叉树,对该多叉树做如下处理。
步骤41、对多叉树做深度优先遍历,重新排列骨骼间的顺序,骨骼重新排序后,设排序后的骨骼顺序为L1,L2,L3,...Ln,则排序后的骨骼满足如下两个条件(1)L1为根骨骼;(2)若Li(1<i≤n)的父骨骼为Lj,则j<i
步骤42、计算初始姿态下骨骼局部坐标系相对于全局坐标系的变换矩阵0TjW(左上角坐标表示初始状态),如果一骨骼没有父骨骼,则TjW0=TjP·Mj,]]>其中TjP是骨骼的局部坐标系相对父骨骼局部坐标系的静态变换矩阵,该静态变换矩阵可从磁盘文件中直接得到;如果一骨骼有父骨骼,则TjW0=TjP·Mj·TiW0,]]>其中,i为骨骼j的父关节的序号。由于步骤41中通过对多叉树做深度优先遍历,重新排列了骨髂顺序,因此计算0TjW之前,其父骨骼的齐次矩阵0TiW已经更新过,只需按顺序逐一对每一个骨骼计算即可。在初始姿态下,Mj均为单位矩阵。
步骤50、装载皮肤纹理信息。根据步骤30所确定的虚拟角色从磁盘文件中按需求选取皮肤纹理信息并装载,在装载过程中,根据皮肤纹理中各个模块的名称建立到骨骼系统中骨骼的映射关系。
步骤60、装载运动数据。从磁盘文件中按需要选取运动数据并装载,在装载运动数据时,判断运动数据中自由度的维数与骨骼系统中的维数是否相同,如果不同则无法驱动该骨骼系统,即运动数据装载失败,需要重新选定运动数据进行装载或退出虚拟角色驱动的过程。
步骤70、从运动数据中获取给定时刻t的姿态。姿态是某一时刻用来刻画关节角度的一组矢量,用{p,q1,q2,...,qn}表示。其中,p表示根骨骼在世界坐标系中的平移,qi表示对骨骼Li的局部坐标系相对于其父骨骼Lj局部坐标系的旋转,用四元数表示。在某些情况下,运动数据中可能没有指定时刻t的姿态,此时按下列步骤求取指定时刻的姿态信息。
步骤71、找到与指定时刻t最接近的时间的两帧姿态pose1、pose2,其对应时刻分别为t1,t2。pose1、pose2具体表示如下pose1={p1,q11,q21,···qk1},pose2={p2,q12,q22,···qk2}]]>步骤72、按公式对pose1、pose2进行插值得到t时刻对应的姿态,插值公式如下pose={p,q1,q2,…qk}p=(1-t)·p1+t·p2qj=Slerp(qj1,qj2,t)]]>
其中Slerp(q1,q2,t)=q1sin((1-t)Ω)+q2sin(tΩ)sin(Ω),cos(Ω)=q1·q2]]>步骤80、正向运动学计算。计算每个骨骼局部坐标系相对于全局坐标系下的变换矩阵TjW。变换矩阵TjW的求取步骤如下。
步骤81、将当前姿态下各个骨骼局部坐标系相对于父骨骼局部坐标系的旋转qj转换为变换矩阵Mj,qj是一个单位四元数。该转换过程是成熟的现有技术,普通技术人员查阅相关资料可实现该转换。
步骤82、判断一骨骼是否有父骨骼,如果该骨骼没有父骨骼,则TjW=TjP·Mj.]]>步骤83、如果一骨骼有父骨骼,则TjW=TjP·Mj·TiW,]]>其中i为骨骼j的父关节的序号。
由于步骤41中通过对多叉树做深度优先遍历,重新排列了骨骼顺序,因此计算TjW之前,其父骨骼的齐次矩阵TiW已经更新过,因此只需按顺序逐一对每一个骨骼计算即可。
步骤90、重新计算皮肤顶点坐标。骨骼系统在运动数据驱动下,依附于骨骼的皮肤顶点坐标会产生相应的变化,本步骤就是要实现对时刻t时,虚拟角色的所有皮肤顶点坐标的计算。以索引号为j的骨骼为例,设p为该骨骼皮肤上的一个顶点的坐标,则该点在新的姿态下的旋转坐标由下式给出p′=TjW·(TjW0)-1·p.]]>将皮肤顶点在初始姿态下全局坐标系中的坐标与初始姿态下骨骼局部坐标系相对于全局坐标系的变换矩阵的逆矩阵做点积,得到皮肤顶点在骨骼局部坐标系中的坐标,然后将该坐标与骨骼局部坐标系相对于全局坐标系下的变换矩阵做点积,得到皮肤顶点在新姿态下的全局坐标。
步骤100、渲染。根据重新计算的皮肤顶点坐标和磁盘文件中所保存的三角面片列表绘制虚拟角色。
权利要求
1.一种基于骨骼的任意拓扑结构虚拟角色的驱动方法,包括1)获取虚拟角色的相关信息,所述的虚拟角色的相关信息分为骨骼系统信息、皮肤纹理信息和运动数据;2)定义虚拟角色相关信息的磁盘存储格式,磁盘文件对相同的骨骼系统、皮肤纹理信息、运动数据只保存一次,骨骼系统、皮肤纹理信息和运动数据适用于任意拓扑结构的虚拟角色以及任意数目的虚拟角色;3)根据实际需求,确定具体的虚拟角色;4)根据角色,装载相应的骨骼系统;5)根据角色,装载皮肤纹理信息,装载时,根据皮肤纹理中各个模块的名称建立到骨骼系统中骨骼的映射关系;6)装载运动数据,在运动数据装载前,判断运动数据中自由度的维数与骨骼系统中的维数是否相同,如果不同则运动数据无法驱动骨骼系统,需要重新选定运动数据进行装载或退出虚拟角色驱动的过程;7)从运动数据中提取某一时刻的姿态,若在运动数据中无法找到指定时刻的姿态,则通过对相邻时刻的姿态做插值得到指定时刻的姿态;8)正向运动学计算,计算每个骨骼局部坐标系相对于全局坐标系下的变换矩阵;9)利用步骤8)得到的骨骼局部坐标系相对于全局坐标系下的变换矩阵,重新计算皮肤顶点坐标;10)渲染,根据步骤9)得到的重新计算的皮肤顶点坐标和三角面片列表绘制虚拟角色,所述的三角面片列表包含在步骤5)所装载的皮肤纹理信息中。
2.根据权利要求1所述的基于骨骼的任意拓扑结构虚拟角色的驱动方法,其特征在于,在所述的步骤2)中,一个磁盘存储文件由文件头、骨骼系统、皮肤纹理信息单元、虚拟角色信息单元组成;在一个骨骼系统中,骨骼系统由骨骼系统名称和骨骼列表组成,在骨骼列表中包含有骨骼系统的各个骨骼的信息,一个骨骼需要保存的信息有骨骼名称、骨骼索引号、父关节的索引号、静态变换矩阵、骨骼质量、质心坐标及关节活动范围;一个皮肤纹理信息单元由顶点列表、三角面片列表、纹理坐标列表、法向量列表、部位信息列表组成,其中的部位信息列表中有多个部位信息单元,一个部位信息单元包括名称、顶点索引列表、影响权重列表;一个虚拟角色单元由虚拟角色基本信息、骨骼系统索引、皮肤纹理索引和运动数据组成;运动数据中的每一帧姿态由该帧的时刻、根节点的位移以及各个骨骼局部坐标系相对于其父骨骼局部坐标系的旋转组成,其中所述的旋转用四元数表示。
3.根据权利要求1所述的基于骨骼的任意拓扑结构虚拟角色的驱动方法,其特征在于,所述的虚拟角色的骨骼系统、皮肤纹理信息和运动数据在内存组织上采用共用的方式,一种骨骼系统或皮肤纹理信息可以为不同的虚拟角色所用,而一个虚拟角色在不同的场合也可以采用不同的骨骼系统或皮肤纹理信息。
4.根据权利要求1所述的基于骨骼的任意拓扑结构虚拟角色的驱动方法,其特征在于,在所述的步骤4)中,装载骨骼系统的具体实现包括4-1、所装载的骨骼系统的拓扑结构是一个多叉树,对多叉树做深度优先遍历,重新排列骨骼间的顺序;4-2、计算初始姿态下骨骼局部坐标系相对于全局坐标系的变换矩阵。
5.根据权利要求1所述的基于骨骼的任意拓扑结构虚拟角色的驱动方法,其特征在于,在步骤7)中,所述的插值方法采用四元数的球面线形插值法。
6.根据权利要求1所述的基于骨骼的任意拓扑结构虚拟角色的驱动方法,其特征在于,在所述的步骤8)中,正向运动学计算包括8-1、将某一时刻的姿态下各个骨骼局部坐标系相对于父骨骼局部坐标系的旋转转换为变换矩阵;8-2、根据步骤8-1所得到的变换矩阵和磁盘存储文件中所包含的静态变换矩阵,计算骨骼局部坐标系相对于全局坐标系下的变换矩阵。
7.根据权利要求1所述的基于骨骼的任意拓扑结构虚拟角色的驱动方法,其特征在于,在所述的步骤9)中,所述的皮肤顶点坐标的计算公式为p′=TjW·(TjW0)-1·p,]]>其中,p为骨骼皮肤上的一个顶点的坐标,p′为皮肤顶点在骨骼运动情况下的新坐标,0Tjw为步骤4-2所得到的初始姿态下骨骼局部坐标系相对于全局坐标系的变换矩阵,Tjw为步骤8-2所得到的骨骼局部坐标系相对于全局坐标系下的变换矩阵。
8.根据权利要求4所述的基于骨骼的任意拓扑结构虚拟角色的驱动方法,其特征在于,在步骤4-1中,所述的骨骼顺序为根骨骼排在最前面,任意一个骨骼都排在其所有的子骨骼之前。
全文摘要
本发明公开了一种基于骨骼的任意拓扑结构虚拟角色的驱动方法,包括1)将虚拟角色相关信息分为三类;2)定义虚拟角色相关信息的磁盘存储格式;3)根据实际需求,确定具体的虚拟角色;4)装载骨骼系统;5)装载皮肤纹理信息,装载时,根据皮肤纹理中各个模块的名称建立到骨骼系统中骨骼的映射关系;6)装载运动数据,判断运动数据中自由度的维数与骨骼系统中的维数是否相同;7)从运动数据中提取某一时刻的姿态;8)正向运动学计算,计算每个骨骼局部坐标系相对于全局坐标系下的变换矩阵;9)利用步骤8)得到的骨骼局部坐标系相对于全局坐标系下的变换矩阵,重新计算皮肤顶点坐标;10)渲染。
文档编号G06T15/00GK1885348SQ20051007728
公开日2006年12月27日 申请日期2005年6月21日 优先权日2005年6月21日
发明者王兆其, 李淳芃, 朱登明, 夏时洪 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1