CN104021584B - 一种骨骼蒙皮动画的实现方法 - Google Patents
一种骨骼蒙皮动画的实现方法 Download PDFInfo
- Publication number
- CN104021584B CN104021584B CN201410291455.3A CN201410291455A CN104021584B CN 104021584 B CN104021584 B CN 104021584B CN 201410291455 A CN201410291455 A CN 201410291455A CN 104021584 B CN104021584 B CN 104021584B
- Authority
- CN
- China
- Prior art keywords
- skeleton
- model
- matrix
- bone
- parent
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 23
- 210000000988 bone and bone Anatomy 0.000 claims abstract description 90
- 238000004364 calculation method Methods 0.000 claims abstract description 14
- 239000011159 matrix material Substances 0.000 claims description 105
- 230000009466 transformation Effects 0.000 claims description 24
- 239000013598 vector Substances 0.000 claims description 10
- 239000000463 material Substances 0.000 claims description 4
- 230000000694 effects Effects 0.000 abstract description 7
- 238000005303 weighing Methods 0.000 abstract 2
- 238000010586 diagram Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 5
- 210000002805 bone matrix Anatomy 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 3
- 238000009795 derivation Methods 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 241001465754 Metazoa Species 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Landscapes
- Processing Or Creating Images (AREA)
Abstract
本发明公开一种骨骼蒙皮动画的实现方法,其包括:A、创建构成角色模型的骨骼模型和网格蒙皮模型。B、确定影响网格蒙皮模型上网格顶点的骨骼,并根据骨骼与顶点的几何关系、物理关系确定其影响权重。C、根据角色模型文件中存储的骨骼运动的关键帧序列,在相邻的两个关键帧间进行插值计算,确定某一时刻各个骨骼的新位置和新朝向。D、按照网格蒙皮模型上各个顶点中保存的影响它的骨骼索引和相应的影响权重计算各顶点在世界坐标系下的新位置和新朝向,实现骨骼蒙皮动画。本发明克服了关节动画中的接缝问题,效果逼真、生动,比顶点动画更加灵活,而且在完成良好动画效果的同时,所占用的内存空间又特别少,可以更容易,更快捷的创建。
Description
技术领域
本发明涉及计算机图形技术领域,尤其涉及一种骨骼蒙皮动画的实现方法。
背景技术
目前,实时动画技术主要有关节动画和顶点动画(即关键帧动画)。关节动画文件占用的空间比较小,可以实现很多复杂的动画效果;但是其缺点也是比较明显的,其一是角色模型是一个层次模型,要获得某一个部分相对于世界坐标系的位置,必须从根节点开始遍历该节点所有的祖先节点,更关键的问题是在不同的结合处,其往往会有比较明显的接缝,会严重影响模型的真实感。顶点动画中的角色由一个完整的网格模型构成,这使得角色看上去更真实,也不会有接缝的问题,获得模型的网格顶点在世界坐标系中位置的计算量也很小,但是其缺点是动画的适应性很弱,不灵活,并且由于关键帧要存储网格模型所有的顶点信息,因此动画文件所占用的空间特别大。
发明内容
本发明的目的在于通过一种骨骼蒙皮动画的实现方法,来解决以上背景技术部分提到的问题。
为达此目的,本发明采用以下技术方案:
一种骨骼蒙皮动画的实现方法,其包括如下步骤:
A、创建构成角色模型的骨骼模型和网格蒙皮模型,其中,所述骨骼模型由按一定层次组织起来的若干个骨骼组成,骨骼的层次描述了角色的结构;所述网格蒙皮模型即角色的皮肤,是在骨骼影响下变化的一个可变形网格;
B、确定影响网格蒙皮模型上网格顶点的骨骼,并根据骨骼与顶点的几何关系、物理关系确定其影响权重;
C、根据角色模型文件中存储的骨骼运动的关键帧序列,在相邻的两个关键帧间进行插值计算,确定某一时刻各个骨骼的新位置和新朝向;
D、按照网格蒙皮模型上各个顶点中保存的影响它的骨骼索引和相应的影响权重计算各顶点在世界坐标系下的新位置和新朝向,实现骨骼蒙皮动画。
特别地,所述步骤C中角色模型文件中保存的信息具体包括网格蒙皮信息、骨骼信息和关键帧信息,其中,所述网格蒙皮信息为角色的多边形模型,该多边形模型由三角形面组成,每个三角形面有三个指向模型顶点表的索引,通过该索引可以确定三个顶点,每个顶点中包括顶点位置、法向量、纹理材质及影响该顶点的骨骼和其影响权重;所述骨骼信息包括组成骨骼模型的全部骨骼;所有骨骼按照父子关系组织成一棵树,树根代表整个骨架,其余每一节点包括叶子节点代表一个骨骼,每一个骨骼包括该骨骼在父骨骼坐标系中的变换矩阵,通过该变换矩阵确定该骨骼在父骨骼坐标系中的位置;所述关键帧信息包括组成骨骼运动的关键帧序列,每个关键帧保存着每一骨骼在该时刻相对于父骨骼坐标系的变换矩阵,及骨骼的位置和朝向信息。
特别地,所述步骤C中具体包括:根据角色模型文件中存储的骨骼运动的关键帧序列,在相邻的两个关键帧间进行线性插值和球面线性插值计算,确定某一时刻各个骨骼的新位置和新朝向,然后从根骨骼开始遍历骨架,计算每一个骨骼相对于世界坐标系的变换矩阵;
所述步骤D具体包括:按照网格蒙皮模型上各个顶点中保存的影响它的骨骼索引和相应的影响权重,根据公式:顶点的新位置=每个骨骼的世界矩阵*每个骨骼Tpos矩阵的逆矩阵,每个骨骼的世界矩阵=每个骨骼Tpos的世界矩阵*插值后矩阵*父骨骼的世界矩阵,根据顶点受那些骨骼的影响利用平均加权得到顶点的准确位置,实现骨骼蒙皮动画。
特别地,所述步骤A具体包括:采用poser或3ds MAX软件的任一种创建构成角色模型的骨骼模型和网格蒙皮模型。
特别地,所述步骤B中影响权重可以通过建模软件计算,也可以手工设置。
本发明提供的骨骼蒙皮动画的实现方法克服了关节动画中的接缝问题,效果逼真、生动,比顶点动画更加灵活,而且在完成良好动画效果的同时,所占用的内存空间又特别少,可以更容易,更快捷的创建。
附图说明
图1为本发明实施例提供的骨骼蒙皮动画的实现方法流程图;
图2为本发明实施例提供的人体骨骼的继承关系示意图;
图3为本发明实施例提供的某一个时刻T在相邻关键帧中平移分量所占的权重示意图;
图4为本发明实施例提供的沿球面连接两个四元数的弧插值示意图;
图5为本发明实施例提供的Bone2骨骼的T时刻所处的时间位置示意图;
图6为本发明实施例提供的Bone5骨骼的T时刻所处的时间位置示意图;
图7为本发明实施例提供的Bone6骨骼的T时刻所处的时间位置示意图;
图8为本发明实施例提供的.ANI文件中骨骼的排序列表。
具体实施方式
下面结合附图和实施例对本发明作进一步说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
请参照图1所示,图1为本发明实施例提供的骨骼蒙皮动画的实现方法流程图。
本实施例中骨骼蒙皮动画的实现方法具体包括如下步骤:
步骤S101、创建构成角色模型的骨骼模型和网格蒙皮模型。其中,所述骨骼模型由按一定层次组织起来的若干个骨骼组成,骨骼的层次描述了角色的结构。所述网格蒙皮模型即角色的皮肤,是在骨骼影响下变化的一个可变形网格。
于本实施例中可以采用poser或3ds MAX软件的任一种创建构成角色模型的骨骼模型和网格蒙皮模型。poser是Metacreations公司推出的一款三维动物、人体造型和三维人体动画制作的极品软件。3ds MAX是Discreet公司开发的(后被Autodesk公司合并)基于PC系统的三维动画渲染和制作软件。
步骤S102、确定影响网格蒙皮模型上网格顶点的骨骼,并根据骨骼与顶点的几何关系、物理关系确定其影响权重。所述影响权重可以通过建模软件计算,也可以手工设置。
步骤S103、根据角色模型文件中存储的骨骼运动的关键帧序列,在相邻的两个关键帧间进行插值计算,确定某一时刻各个骨骼的新位置和新朝向。
在本实施例中角色模型文件中保存的信息具体包括网格蒙皮信息、骨骼信息和关键帧信息,其中,所述网格蒙皮信息为角色的多边形模型,该多边形模型由三角形面组成,每个三角形面有三个指向模型顶点表的索引,通过该索引可以确定三个顶点,每个顶点中包括顶点位置、法向量、纹理材质及影响该顶点的骨骼和其影响权重;所述骨骼信息包括组成骨骼模型的全部骨骼;所有骨骼按照父子关系组织成一棵树,树根代表整个骨架,其余每一节点包括叶子节点代表一个骨骼,每一个骨骼包括该骨骼在父骨骼坐标系中的变换矩阵,通过该变换矩阵确定该骨骼在父骨骼坐标系中的位置;所述关键帧信息包括组成骨骼运动的关键帧序列,每个关键帧保存着每一骨骼在该时刻相对于父骨骼坐标系的变换矩阵,及骨骼的位置和朝向信息。
步骤S104、按照网格蒙皮模型上各顶点中保存的影响它的骨骼索引和相应的影响权重计算各顶点在世界坐标系下的新位置和新朝向,实现骨骼蒙皮动画。
根据角色模型文件中存储的骨骼运动的关键帧序列,在相邻的两个关键帧间进行线性插值和球面线性插值计算,确定某一时刻各个骨骼的新位置和新朝向,然后从根骨骼开始遍历骨架,计算每一个骨骼相对于世界坐标系的变换矩阵;因为模型的顶点定义在模型坐标系中,而对于游戏引擎中,要把模型坐标系中的顶点位置转化为世界坐标系才可以进行渲染,按照网格蒙皮模型上各个顶点中保存的影响它的骨骼索引和相应的影响权重,根据公式:顶点的新位置=每个骨骼的世界矩阵*每个骨骼Tpos矩阵的逆矩阵,而每个骨骼的世界矩阵=每个骨骼Tpos的世界矩阵*插值后矩阵*父骨骼的世界矩阵,而有些特殊顶点可能受多块骨骼的影响,根据顶点受那些骨骼的影响利用平均加权得到顶点的准确位置,实现骨骼蒙皮动画。在上述公式中,它的任何变换均是相对于世界坐标系原点,因此需要把最初状态顶点移动到相当于父骨骼节点是原点的位置上,再进行矩阵变换;而最终的到的是每个骨骼的世界矩阵(每个骨骼相对于原点的变换矩阵)。然后只要把各个顶点附在相应的骨骼上,就可以渲染成动画。
下面对本发明技术方案基于的原理及实现的细节进行说明。
以人体骨骼为例,各个骨骼的继承关系如图2所示。从图1可以看出,Bone1为根骨骼,其子骨骼是Bone2,Bone3,Bone4,而Bone2又是Bone5和Bone6的父骨骼,Bone3的子骨骼是Bone7,Bone4的子骨骼是Bone8和Bone9,可以看出相对于Bone1时,Bone2是子骨骼,相对于Bone5和Bone6,Bone2又是父骨骼。有这样的相对关系,那么每个骨骼的坐标系也不同,它们有自己的局部坐标系也有相对于其父骨骼的坐标系,而导出到骨骼蒙皮动画应用游戏场景中要把各个骨骼的坐标系统一为相对于根骨骼的世界坐标系。
骨骼除了自身的变换,还要相对于其父骨骼关联的坐标系进行变换,骨骼的变换是最常见的,也是最复杂的,三维物体的变换是需要使用不同的坐标系来描述物体所变换的方向,与三维物体模型变换的主要坐标系有:
第一:世界坐标系,它是所有坐标系的参考对象,无论物体怎么变换,世界坐标的坐标原点和坐标轴的方向都是固定不变的。
第二:局部坐标系,即物体自身的坐标系,它通常与某个特定的物体相连,他们随着物体的方向改变而改变。
首先在从3ds MAX软件里导出角色模型时,在模型里动作关键帧在导出之前都已经设置完毕,即在各个关键帧中模型都有在该时刻的动作状态,在第0帧的时候,我们规定整个模型的骨骼处于一个静态的姿势(静帧),这个状态我们称为Tpos状态。每个骨骼的每时刻的Tpos状态下的世界矩阵保存在.MMB文件里,这些数据包含了骨骼ID,骨骼名称,变换矩阵,子骨骼列表,子骨骼相对于父骨骼的相对变换矩阵。
为了方便理解和阐述,设定每个骨骼Tpos状态下的世界矩阵可以表示为:Matrix_Tpos_Bone1,Matrix_Tpos_Bone2,Matrix_Tpos_Bone3……。当模型导出到游戏场景中,在第0帧的时刻程序规定是不播放的,首先每个骨骼都有若干个骨骼相连,每骨骼都有自己的坐标系和相对于父骨骼的坐标系。在动作播放的时候,每一个关键帧中保存的都是每个骨骼相对于Tpos世界坐标系又相对于父骨骼位置的平移,旋转,缩放变量值。每个关键帧播放动作都是独立的,也就是说第一帧(Key1)播放动作是从第0到第一帧完成的,第二关键帧(Key2)的播放状态也是第0帧到第2帧完成的。那么我们在第一帧和第二帧之间的动作会出现很不连贯动画,这就是我们为什么要对相邻的关键帧进行插值计算,本发明采用了线性插值和球面线性插值算法使动作变的过渡自然。具体的实现方法是在平移和缩放是采用线性插值来计算,而旋转是通过球面插值来实现。
然而,每个关键帧中保存骨骼既相对于Tpos状态又相对于父骨骼的变换矩阵,这些变换的矩阵组成一系列的序列帧。这些序列帧保存在.ANI文件里。设Key1下某骨骼自身的世界矩阵为Matrix_Key1_Self,它的父骨骼的世界矩阵为Matrix_Key1_Parent,那么子骨骼相对于父骨骼的矩阵为:
Matrix_Key1_Rel_Parent=Matrix_Key1_Self*(Matrix_Key1_Parent)-1-(1)
即骨骼自身的世界矩阵乘以它父骨骼的世界矩阵的逆矩阵。在Tpos世界坐标系下,把第0帧状态下的某个骨骼的世界矩阵记作Matrix_Tpos,关键帧KEY1下相对于父骨骼的矩阵为Matrix_Key1_Rel_Parent,那么key1转成相对于Tpos下世界矩阵为:
Matrix_Key1_Rel_Parent_Tpos=(Matrix_Tpos)-1*Matrix_Key1_Rel_Parent-(2)
在关键帧key2下,基于Tpos下相对于父骨骼矩阵Matrix_Key2_Rel_Parent,那么Key2转成相对于Tpos世界矩阵为:
Matrix_Key2_Rel_Parent_Tpos=(Matrix_Tpos)-1*Matrix_Key2_Rel_Parent
同理可以得出:
Matrix_Key3_Rel_Parent_Tpos=(Matrix_Tpos)-1*Matrix_Key3_Rel_Parent
Matrix_Key4_Rel_Parent_Tpos=(Matrix_Tpos)-1*Matrix_Key4_Rel_Parent
……
通过公式(1)我们可以依次得到:
Matrix_Key1_Rel_Parent=Matrix_Key1_Self*(Matrix_Key1_Parent)-1
Matrix_Key2_Rel_Parent=Matrix_Key1_Self*(Matrix_Key2_Parent)-1
Matrix_Key3_Rel_Parent=Matrix_Key1_Self*(Matrix_Key3_Parent)-1
……
那么key1相对于key0矩阵式为:
Matrix_Key1_Rel_Key0=
Matrix_Key1_Rel_Parent_Tpos*(Matrix_Key0_Rel_Parent_Tpos)-1
那么key2相对于key1矩阵式为:
Matrix_Key2_Rel_Key1=
Matrix_Key2_Rel_Parent_Tpos*(Matrix_Key1_Rel_Parent_Tpos)-1
那么key3相对于key2矩阵式为:
Matrix_Key3_Rel_Key2=
Matrix_Key3_Rel_Parent_Tpos*(Matrix_Key2_Rel_Parent_Tpos)-1
key4相对于key3矩阵式为:
Matrix_Key4_Rel_Key3=
Matrix_Key4_Rel_Parent_Tpos*(Matrix_Key3_Rel_Parent_Tpos)-1
……
所以.ANI文件保存的是Matrix_Key1_Rel_Key0,Matrix_Key2_Rel_Key1,Matrix_Key3_Rel_Key2……
但是,.ANI文件里还可以保存从max脚本文件事先计算出的
Matrix_Key1_Rel_Parent_Tpos,Matrix_Key2_Rel_Parent_Tpos,
Matrix_Key3_Rel_Parent_Tpos,Matrix_Key4_Rel_Parent_Tpos
……
这两种保存的.ANI的文件可以任选其一,但无论如何保存,在加载.ANI文件时,都需要计算得到:
Matrix_Key1_Rel_Key0,
Matrix_Key2_Rel_Key1
Matrix_Key3_Rel_Key2
Matrix_Key4_Rel_Key3
……
所以,如果采用第二种方式保存,那么还需要进一步计算,还原得到
Matrix_Key1_Rel_Key0......
具体计算还原方法是:
Matrix_Key2_Rel_Parent_Tpos=Matrix_Key2_Rel_Key1*Matrix_Key1_Rel_Key0;即用当前读到的矩阵乘以上帧的矩阵。
当对这些数据插值算法的时候,是对
Matrix_Key1_Rel_Parent_Tpos,Matrix_Key2_Rel_Parent_Tpos,Matrix_Key3_Rel_Parent_Tpos,Matrix_Key4_Rel_Parent_Tpos,...这些矩阵进行球面线性插值计算。
当读.ANI文件时,具体到每个骨骼进行插值矩阵,设定在Tpos状态下,Bone1,Bone2,Bone3骨骼等在各个关键帧中相对于父骨骼的矩阵变换分别记作:
对于Bone1骨骼的变换记作为:
Matrix_key0_Rel_Parent_Tpos_bone1
Matrix_key1_Rel_Parent_Tpos_bone1
Matrix_key2_Rel_Parent_Tpos_bone1
Matrix_key3_Rel_Parent_Tpos_bone1
对于Bone2骨骼变换记作为:
Matrix_key0_Rel_Parent_Tpos_bone2,
Matrix_key1_Rel_Parent_Tpos_bone2,
Matrix_key2_Rel_Parent_Tpos_bone2,
对于Bone3骨骼变换记作为:
Matrix_key0_Rel_Parent_Tpos_bone3,
Matrix_key1_Rel_Parent_Tpos_bone3,
需要说明的是,根据美术人员设定每个骨骼运动不同的关键帧,每个骨骼的关键帧序列数量可能不同。
下面我们重点说明如何对相邻关键帧的同一个骨骼进行插值计算。
具体的插值矩阵算法如下:
第一步:先把
Matrix_Key1_Rel_Parent_Tpos,Matrix_Key2_Rel_Parent_Tpos,Matrix_Key3_Rel_Parent_Tpos,Matrix_Key4_Rel_Parent_Tpos……矩阵分解为各个坐标轴上的平移,旋转,缩放分量。具体的分解办法:
假设矩阵Matrix是4x4浮点数据
M41,M42,M43为平移分量。
设在T1时刻,相对于父骨骼又相对于Tpos的骨骼矩阵分解出的平移分量为(x1,y1,z1),相对于父骨骼又相对于Tpos的骨骼矩阵分解出的平移分量为(x2,y2,z2)。如图3所示,根据流逝的时间T,先计算两个关键帧中所影响的权重值,这个权重那么在key1与key2之间插值的平移分量是:
(x,y,z)=(x1*w+(1-w)*x2,y1*w+(1-w)*y2,z1*w+(1-w)*z2)
对于缩放分量,先计算缩放分量的绝对值:
在X轴方向的缩放分量记为:
在y轴方向的缩放分量记作:
在z轴方向的缩放分量我们记作为:
假设缩放是正向的缩放,没有负向缩放,即scaleX>0,scaleY>0,scaleZ>0;到这里为止,即可以从矩阵分解出平移分量和缩放分量。
而骨骼的旋转是相对复杂的,当骨骼绕关节旋转的时候,本发明采用四元数表示骨骼的旋转,如果想得到两个关键帧之间的角位置就可以使用四元数球面线性插值来得到中间量。下面详细讲述一下球面线性插值的算法。
如图4所示,设q1和q2都是单位向量,我们要计算q,它是沿着q1到q2弧的平滑插值,设θ是q1到q2旋转的角度,那么q就是绕q2沿弧旋转tθ的结果。
那么从任意时刻t->[t1,t2],四元素为q以及参数t(0≤t≤1),其中球面线性插值的计算公式如下:
其中θ是q1到q2旋转的角度,在t1时刻,记作四元数q1(x1,y1,z1,w1),t2时刻,记作四元数q2(x2,y2,z2,w2),考虑到四元数q和-q表示旋转实质相同,而所用的旋转向量是相反的,所以当插值的两个四元素q1和q2的转动轴大于90°时,可以用-q1代替q1或-q2代替q2。这样就保证了x,y,z,w四个数值都进行了球面线性插值。
从3ds MAX导出的角色模型信息中,得出某个骨骼在t-->[t1-t2]时刻的旋转向量记作为x’,y’,z’和θ*2为旋转角度
x=sinθ*x’
y=sinθ*y’
z=sinθ*z’
w=cosθ
且满足x’*x’+y’*y’+z’*z’=1为单位向量,用v’表示这个旋转向量,可以简写成:v’=(x’,y’,z’)为向量。
那么四元素q可以表示为:(sinθ*v’,cosθ)。
而四元素N(nx,ny,nz),θ,这个是绕N旋转θ的四元素,由于任何四元数既可以写成(x,y,z,w)=(-x,-y,-z,-w),那么不妨设w=cos(θ/2)为大于0,而绕(nx,ny,nz)旋转θ的角度四元素转成3x3的矩阵A是
还需要从上述矩阵分解出旋转分量,即矩阵B,不妨设沿着x,y,z缩放分量分别是sx,sy,sz,那么比较
通过比较2个3x3矩阵A和B,计算旋转分量。
而四元素是(nx*sin(θ/2),ny*sin(θ/2),nz*sin(θ/2),cos(θ/2))
所以可以通过三角函数的二倍角公式得到第一个3x3矩阵:
不妨设P=sin(θ/2) Q=cos(θ/2)
那么
M11+M22-M33=1-4*P*P*nz*nz (a)
M12+M21=4*P*P*nx*ny (b)
M13+M31=4*P*P*nx*nz (c)
由(a)式得到2*P*nz数值 (d)
(d)+(c)得到2*P*nx数值 (e)
由(e)+(b)得到2*P*ny数值 (f)
M21=2*P*P*nx*ny-2*P*Q*nz (g)
可以推导出2*Q数值 (h)
而四元素的q(x,y,z,w)
x=2*P*nx*(0.5f);
y=2*P*ny*(0.5f);
z=2*P*nz*(0.5f);
w=2*Q*(0.5f);
这样就得到四元素的四个旋转分量。
有上述的计算可以获得骨骼在移动,旋转,缩放时的插值矩阵。
综上所述,从动画播放开始可以计算每一时刻在相邻关键帧之间的新插值矩阵,这个插值的矩阵依然是相对于Tpos又相对于父骨骼的矩阵。
由计算出的插值矩阵,进一步可以计算出子骨骼相对于父骨骼的相对矩阵即:每个骨骼Tpos的世界矩阵*插值后矩阵=相对于父骨骼的矩阵;而要得到每个骨骼的世界矩阵,其计算方法如下:相对于父骨骼的矩阵*父骨骼的世界矩阵=该骨骼在某时刻插值后的世界矩阵。
随着动画播放开始,时间的流逝,假设Bone2骨骼有7个关键帧,假设某一时刻为T,如图5所示,可以计算出该时刻处于Key3和Key4之间,插值后的矩阵记作:Matrix_Lerp_T_bone2。
同理,假设Bone5骨骼有5个关键帧,如图6所示,可以计算出该时刻处于Key1和Key2之间,插值后的矩阵记作:Matrix_Lerp_T_bone5。
假设Bone6骨骼只有1个关键帧,如图7所示,插值后的矩阵记作:Matrix_Lerp_T_bone6。
从对上述矩阵分析可知,要得到每个骨骼的世界矩阵就先要计算出其父骨骼的世界矩阵。由图2可以看出,所有的骨骼都是继承与Bone1根骨骼的,例如要想知道Bone6的骨骼矩阵就要知道Bone2的骨骼矩阵,依次类推就要知道Bone1的骨骼矩阵,所以,如图8所示,本发明把.ANI文件按照先父后子的顺序对骨骼进行排序。
计算出每个骨骼任意时刻的世界矩阵,就可以计算出父骨骼的世界矩阵,而后计算出子骨骼的世界矩阵。骨骼运动就会牵连到蒙皮顶点运动,本发明用.MESH文件保存这顶点信息即网格蒙皮信息,其包括顶点位置、法向量、纹理材质及影响该顶点的骨骼和其影响权重。
前面所述的角色模型导出的状态是在Tpos位置下,所以需要把矩阵转化为Tpos状态下的矩阵,具体方法是:每个骨骼Tpos位置的矩阵的逆矩阵*每个骨骼的世界矩阵。得到这个新矩阵,就可以依次计算每个骨骼新的矩阵,新的矩阵作为一个骨骼数组传入GPU,根据顶点受那些骨骼影响的权重,计算出顶点在世界坐标中新位置和新朝向。
不妨设顶点A受bone4,bone5,bon6三个骨骼的影响,受三个骨骼影响的权重分别为weight_bone4=0.3,weight_bone5=0.2,weight_bone6=0.5,在此可以看出,受三个骨骼影响的权重值和必须为1。
那么顶点A受Bone4骨骼影响的位置A1为:
其中,
Matrix_Rel_Tpos_bone4=(Matrix_Tpos_bone4)-1*Matrix_Tpos_bone4*Matrix_Lerp_T_bone4*Matrix_Parent
顶点A(Tpos位置)*Matrix_Rel_Tpos_bone4*weight_bone4
那么顶点A受Bone5骨骼影响的位置A2为:
其中,Matrix_Rel_Tpos_bone5=
(Matrix_Tpos_bone)-1*Matrix_Tpos_bone5*Matrix_Lerp_T_bone5*Matrix_Parent
顶点A(Tpos位置)*Matrix_Rel_Tpos_bone5*weight_bone5
那么顶点A受Bone6骨骼影响的位置A3为:
其中,Matrix_Rel_Tpos_bone6=(Matrix_Tpos_bone6)-1*Matrix_Tpos_bone6*Matrix_Lerp_T_bone6*Matrix_Parent
顶点A(Tpos位置)*Matrix_Rel_Tpos_bone6*weight_bone6
那么顶点A受骨骼影响的权重值加权后,顶点A的新位置A=A1+A2+A3
由此可以推算出该时刻,角色模型上所有点变换后的位置,程序是每帧都在调用的,每一帧顶点的位置都不相同,这样本发明就实现了蒙皮网络上的顶点随着骨骼运动的画面。
本发明的技术方案克服了关节动画中的接缝问题,效果逼真、生动,比顶点动画更加灵活,而且在完成良好动画效果的同时,所占用的内存空间又特别少,可以更容易、更快捷的创建,再次是便于修改,如果想的得到更细致的模型,只需要加入额外的关键帧,使角色模型动画变的更加真实。本发明可以大大减少美工做模型动画的时间,大大减少游戏内容的创建过程,也确保了模型被导出到游戏所用的格式时,没有动画或者特征的失真。因为骨骼的自由性,所以可以随意的定位模型,也可以实现运行时创建动画。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (3)
1.一种骨骼蒙皮动画的实现方法,其特征在于,包括如下步骤:
A、创建构成角色模型的骨骼模型和网格蒙皮模型,其中,所述骨骼模型由按一定层次组织起来的若干个骨骼组成,骨骼的层次描述了角色的结构;所述网格蒙皮模型即角色的皮肤,是在骨骼影响下变化的一个可变形网格;
B、确定影响网格蒙皮模型上网格顶点的骨骼,并根据骨骼与顶点的几何关系、物理关系确定其影响权重;
C、根据角色模型文件中存储的骨骼运动的关键帧序列,在相邻的两个关键帧间进行插值计算,确定某一时刻各个骨骼的新位置和新朝向;其中,所述角色模型文件中保存的信息具体包括网格蒙皮信息、骨骼信息和关键帧信息,其中,所述网格蒙皮信息为角色的多边形模型,该多边形模型由三角形面组成,每个三角形面有三个指向模型顶点表的索引,通过该索引可以确定三个顶点,每个顶点中包括顶点位置、法向量、纹理材质及影响该顶点的骨骼和其影响权重;所述骨骼信息包括组成骨骼模型的全部骨骼;所有骨骼按照父子关系组织成一棵树,树根代表整个骨架,其余每一节点包括叶子节点代表一个骨骼,每一个骨骼包括该骨骼在父骨骼坐标系中的变换矩阵,通过该变换矩阵确定该骨骼在父骨骼坐标系中的位置;所述关键帧信息包括组成骨骼运动的关键帧序列,每个关键帧保存着每一骨骼在该时刻相对于父骨骼坐标系的变换矩阵,及骨骼的位置和朝向信息;所述步骤C具体包括:根据角色模型文件中存储的骨骼运动的关键帧序列,在相邻的两个关键帧间进行线性插值和球面线性插值计算,确定某一时刻各个骨骼的新位置和新朝向,然后从根骨骼开始遍历骨架,计算每一个骨骼相对于世界坐标系的变换矩阵;
D、按照网格蒙皮模型上各个顶点中保存的影响它的骨骼索引和相应的影响权重,根据公式:顶点的新位置=每个骨骼的世界矩阵*每个骨骼Tpos矩阵的逆矩阵,每个骨骼的世界矩阵=每个骨骼 Tpos的世界矩阵*插值后矩阵*父骨骼的世界矩阵,根据顶点受那些骨骼的影响利用平均加权得到顶点的准确位置,实现骨骼蒙皮动画。
2.根据权利要求1所述的骨骼蒙皮动画的实现方法,其特征在于,所述步骤A具体包括:采用poser或3ds MAX软件的任一种创建构成角色模型的骨骼模型和网格蒙皮模型。
3.根据权利要求2所述的骨骼蒙皮动画的实现方法,其特征在于,所述步骤B中影响权重可以通过建模软件计算,也可以手工设置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410291455.3A CN104021584B (zh) | 2014-06-25 | 2014-06-25 | 一种骨骼蒙皮动画的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410291455.3A CN104021584B (zh) | 2014-06-25 | 2014-06-25 | 一种骨骼蒙皮动画的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104021584A CN104021584A (zh) | 2014-09-03 |
CN104021584B true CN104021584B (zh) | 2017-06-06 |
Family
ID=51438320
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410291455.3A Expired - Fee Related CN104021584B (zh) | 2014-06-25 | 2014-06-25 | 一种骨骼蒙皮动画的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104021584B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106780683A (zh) * | 2017-02-23 | 2017-05-31 | 网易(杭州)网络有限公司 | 骨骼动画数据的处理方法及装置 |
Families Citing this family (51)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104268920B (zh) * | 2014-09-05 | 2017-08-18 | 无锡梵天信息技术股份有限公司 | 一种利用布娃娃物理系统模拟人物角色死亡的方法 |
CN104700444A (zh) * | 2015-03-10 | 2015-06-10 | 上海鸿利数码科技有限公司 | 一种图片动画的实现方法 |
CN104658038B (zh) * | 2015-03-12 | 2019-01-18 | 南京梦宇三维技术有限公司 | 基于动作捕捉的三维数字内容智能制作方法及制作系统 |
US10489956B2 (en) * | 2015-07-27 | 2019-11-26 | Autodesk, Inc. | Robust attribute transfer for character animation |
CN105488834B (zh) * | 2015-12-01 | 2019-03-19 | 网易(杭州)网络有限公司 | 角色面部朝向的调整方法及装置 |
CN105551072B (zh) * | 2015-12-11 | 2018-11-30 | 网易(杭州)网络有限公司 | 实现角色模型局部实时运动的方法及系统 |
CN105528804B (zh) * | 2015-12-17 | 2019-01-08 | 网易(杭州)网络有限公司 | 计算机动画中骨骼链的处理方法及装置 |
CN105976418A (zh) * | 2016-06-28 | 2016-09-28 | 珠海金山网络游戏科技有限公司 | 一种人物动态骨骼的设计系统和方法 |
CN106548392B (zh) * | 2016-10-27 | 2020-08-07 | 河海大学常州校区 | 一种基于webGL技术的虚拟试衣实现方法 |
WO2018095273A1 (zh) | 2016-11-24 | 2018-05-31 | 腾讯科技(深圳)有限公司 | 图像合成方法、装置以及匹配实现方法、装置 |
CN106780681B (zh) * | 2016-12-01 | 2020-04-28 | 北京像素软件科技股份有限公司 | 一种角色动作生成方法和装置 |
CN106709976B (zh) * | 2016-12-22 | 2020-04-24 | 厦门黑镜科技有限公司 | 骨骼动画的生成方法和装置 |
CN106846499B (zh) * | 2017-02-09 | 2020-04-03 | 腾讯科技(深圳)有限公司 | 一种虚拟模型的生成方法及装置 |
CN107093200A (zh) * | 2017-03-29 | 2017-08-25 | 珠海金山网络游戏科技有限公司 | 一种骨骼蒙皮动画网格表面附加模型的方法 |
CN107038430B (zh) * | 2017-05-05 | 2020-09-11 | 成都通甲优博科技有限责任公司 | 一种构造人体姿态数据样本的方法及其装置 |
US10410431B2 (en) | 2017-07-11 | 2019-09-10 | Nvidia Corporation | Skinning a cluster based simulation with a visual mesh using interpolated orientation and position |
CN107610210B (zh) * | 2017-09-15 | 2020-10-02 | 苏州蜗牛数字科技股份有限公司 | 骨骼动画系统优化方法、装置及骨骼动画系统 |
CN108597015A (zh) * | 2018-01-08 | 2018-09-28 | 江苏辰锐网络科技有限公司 | 三维生物模型骨骼自动绑定系统、方法、设备及计算机程序产品 |
CN110298911A (zh) * | 2018-03-23 | 2019-10-01 | 真玫智能科技(深圳)有限公司 | 一种实现走秀的方法及装置 |
CN108510582B (zh) * | 2018-04-02 | 2021-12-14 | 苏州蜗牛数字科技股份有限公司 | 一种匹配任意骨骼模型的刚体生成方法 |
CN108711182A (zh) * | 2018-05-03 | 2018-10-26 | 广州爱九游信息技术有限公司 | 渲染处理方法、装置及移动终端设备 |
CN108932746A (zh) * | 2018-05-21 | 2018-12-04 | 电子科技大学 | 一种人体三维动画关节皮肤变形方法 |
CN108846884A (zh) * | 2018-05-29 | 2018-11-20 | 电子科技大学 | 一种三维动画算法的自适应权重设置方法 |
CN109035372B (zh) * | 2018-06-08 | 2023-01-24 | 广州虎牙信息科技有限公司 | 编辑动态模型的方法、装置、设备及存储介质 |
CN110634177A (zh) * | 2018-06-21 | 2019-12-31 | 华为技术有限公司 | 一种物体建模运动方法、装置与设备 |
CN109345615B (zh) * | 2018-10-25 | 2023-06-09 | 网易(杭州)网络有限公司 | 蒙皮数据生成方法以及装置、电子设备及存储介质 |
CN111369649B (zh) * | 2018-12-26 | 2023-09-01 | 苏州笛卡测试技术有限公司 | 一种基于高精度三维扫描模型的制作计算机蒙皮动画的方法 |
CN109872375B (zh) * | 2019-01-10 | 2023-04-14 | 珠海金山数字网络科技有限公司 | 一种骨骼动画关键帧压缩方法及装置 |
CN110009749B (zh) * | 2019-04-17 | 2023-10-20 | 珠海金山数字网络科技有限公司 | 一种虚拟对象定位方法、装置、计算设备及存储介质 |
CN110136232B (zh) * | 2019-05-16 | 2023-10-03 | 北京迈格威科技有限公司 | 骨骼蒙皮动画的处理方法、装置、电子设备及存储介质 |
CN110570499B (zh) * | 2019-09-09 | 2023-08-15 | 珠海金山数字网络科技有限公司 | 一种表情生成方法、装置、计算设备及存储介质 |
CN110570500B (zh) * | 2019-09-12 | 2023-11-21 | 网易(杭州)网络有限公司 | 角色绘制方法、装置、设备及计算机可读存储介质 |
CN111028321A (zh) * | 2019-12-16 | 2020-04-17 | 网易(杭州)网络有限公司 | 蒙皮检测方法、装置以及电子终端 |
CN111199571A (zh) * | 2019-12-20 | 2020-05-26 | 江苏原力动画制作股份有限公司 | 一种基于连接关系的控制物体变形方法 |
CN111127605A (zh) * | 2019-12-23 | 2020-05-08 | 北京像素软件科技股份有限公司 | 游戏角色视角方向控制方法、装置及电子设备 |
CN111383309B (zh) * | 2020-03-06 | 2023-03-17 | 腾讯科技(深圳)有限公司 | 一种骨骼动画驱动方法、装置及存储介质 |
CN111402369B (zh) * | 2020-03-10 | 2023-11-03 | 京东科技控股股份有限公司 | 互动广告的处理方法、装置、终端设备及存储介质 |
CN111696184B (zh) * | 2020-06-10 | 2023-08-29 | 上海米哈游天命科技有限公司 | 骨骼蒙皮融合确定方法、装置、设备和存储介质 |
CN111714885B (zh) * | 2020-06-22 | 2024-07-23 | 网易(杭州)网络有限公司 | 游戏角色模型生成、角色调整方法、装置、设备及介质 |
CN112270734B (zh) * | 2020-10-19 | 2024-01-26 | 北京大米科技有限公司 | 一种动画生成方法、可读存储介质和电子设备 |
CN112509098B (zh) * | 2020-11-30 | 2024-02-13 | 北京百度网讯科技有限公司 | 动画形象生成方法、装置及电子设备 |
CN112669419A (zh) * | 2020-12-22 | 2021-04-16 | 北京像素软件科技股份有限公司 | 用于渲染的方法、中央处理器、图像处理器、系统和存储介质 |
CN112598773A (zh) * | 2020-12-31 | 2021-04-02 | 珠海金山网络游戏科技有限公司 | 骨骼蒙皮动画的实现方法及装置 |
CN112712578B (zh) * | 2020-12-31 | 2022-09-27 | 魔珐(上海)信息科技有限公司 | 虚拟角色模型创建方法、装置、电子设备和存储介质 |
CN112891954B (zh) * | 2021-02-02 | 2024-02-13 | 网易(杭州)网络有限公司 | 虚拟对象的模拟方法、装置、存储介质及计算机设备 |
CN112991503B (zh) * | 2021-04-22 | 2021-07-27 | 腾讯科技(深圳)有限公司 | 一种基于蒙皮权重的模型训练方法、装置、设备及介质 |
CN113192166B (zh) * | 2021-05-24 | 2022-08-30 | 上海曼恒数字技术股份有限公司 | 一种骨骼树还原方法及系统 |
CN113781612B (zh) * | 2021-08-25 | 2023-12-22 | 福建天晴数码有限公司 | 一种动作资源风格转换方法及系统 |
CN113805532B (zh) * | 2021-08-26 | 2023-05-23 | 福建天泉教育科技有限公司 | 一种制作实体机器人动作的方法及终端 |
CN115661310B (zh) * | 2022-12-22 | 2023-03-14 | 海马云(天津)信息技术有限公司 | 虚拟数字人表情逼近方法、装置、存储介质、电子设备 |
CN117152382A (zh) * | 2023-10-30 | 2023-12-01 | 海马云(天津)信息技术有限公司 | 虚拟数字人面部表情计算方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6300960B1 (en) * | 1997-08-04 | 2001-10-09 | Pixar Animation Studios | Realistic surface simulation in computer animation |
CN101197049A (zh) * | 2007-12-21 | 2008-06-11 | 西北工业大学 | 基于三维运动参数的三维运动模型全自动驱动方法 |
CN101473351A (zh) * | 2006-05-19 | 2009-07-01 | 索尼株式会社 | 肌肉与骨骼形状蒙皮 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6822653B2 (en) * | 2002-06-28 | 2004-11-23 | Microsoft Corporation | Methods and system for general skinning via hardware accelerators |
-
2014
- 2014-06-25 CN CN201410291455.3A patent/CN104021584B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6300960B1 (en) * | 1997-08-04 | 2001-10-09 | Pixar Animation Studios | Realistic surface simulation in computer animation |
CN101473351A (zh) * | 2006-05-19 | 2009-07-01 | 索尼株式会社 | 肌肉与骨骼形状蒙皮 |
CN101197049A (zh) * | 2007-12-21 | 2008-06-11 | 西北工业大学 | 基于三维运动参数的三维运动模型全自动驱动方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106780683A (zh) * | 2017-02-23 | 2017-05-31 | 网易(杭州)网络有限公司 | 骨骼动画数据的处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104021584A (zh) | 2014-09-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104021584B (zh) | 一种骨骼蒙皮动画的实现方法 | |
US9378589B2 (en) | Apparatus and method for generating digital clone | |
Merry et al. | Animation space: A truly linear framework for character animation | |
Kavan et al. | Spherical blend skinning: a real-time deformation of articulated models | |
Hornung et al. | Character animation from 2d pictures and 3d motion data | |
US10062197B2 (en) | Animating a virtual object in a virtual world | |
Lin et al. | Learning implicit templates for point-based clothed human modeling | |
Abu Rumman et al. | Position‐based skinning for soft articulated characters | |
Liebowitz et al. | Uncalibrated motion capture exploiting articulated structure constraints | |
Tewari et al. | Meshing genus-1 point clouds using discrete one-forms | |
Jacka et al. | A comparison of linear skinning techniques for character animation | |
US9652879B2 (en) | Animation of a virtual object | |
Celikcan et al. | Example‐Based Retargeting of Human Motion to Arbitrary Mesh Models | |
Chaudhuri et al. | A system for view‐dependent animation | |
CN111932659A (zh) | 骨骼模型数据的处理方法、计算机设备及存储介质 | |
Fondevilla et al. | Fashion transfer: Dressing 3d characters from stylized fashion sketches | |
Chen et al. | Skeleton-driven surface deformation through lattices for real-time character animation | |
Stoll et al. | A volumetric approach to interactive shape editing | |
Kim et al. | GALA: Generating Animatable Layered Assets from a Single Scan | |
Tejera et al. | Space-time editing of 3d video sequences | |
Mukundan | Character Animation | |
Mukundan et al. | Skeletal animation | |
Ma et al. | An analytical research using image processing to create an architectural virtual scene | |
US8416246B2 (en) | Generating a surface representation of an item | |
US20230196702A1 (en) | Object Deformation with Bindings and Deformers Interpolated from Key Poses |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170606 |