好文档 - 专业文书写作范文服务资料分享网站

骨骼动画及微软示例:Skinned Mesh的解析

天下 分享 时间: 加入收藏 我要投稿 点赞

骨骼动画及微软示例:

Skinned Mesh的解析

骨骼动画是D3D的一个重要应用。尽管微软DXSDK提供了示例Skinned Mesh,但由于涉及众多概念和技术局,顺利上手。文中所述都是参照各种资料加上自己的理解,也有可能出些偏差,有则回贴拍砖,无则权当一笑一骨骼动画原理

原理方面在网上资料比较多,大家都基本明白。在此说一下重点: ! |' s9 _9 L; M! x\总体上,绝大部分动画实现原理一致,就是“提供一种机制,描述各顶点位置随时间的变化”。有三种方法:

1.1关节动画:

由于大部分运动,都是皮肤随骨骼在动,皮肤相对于它的骨骼本身并没有发生运动,所以只要知,从子骨骼用矩阵乘法累积到最顶层根骨骼,就可以得到每个子骨骼相对于世界坐标系的转换矩阵。

这种动画,只须用普通Mesh保存最初始的各顶点坐标,以及一系列后续时刻所对应的各骨骼的运动矩阵。不通过运算调节动作。缺点是在两段骨骼交接处,容易产生裂缝,影响效果。

1.3骨骼蒙皮动画(skinned Mesh) / A' R4 r5L; R4 C 1.2渐变动画:

通过保存一系列时刻的顶点坐标来完成动画。虽然比较逼真,但占用大量空间,灵活性也不高

$ T3 P# J, y4 F9 Q& r\

相当于上面两方法的折中。现在比较流行。

1 / 25

在关节动画的基础上,利用顶点混合(Vertex Blend)技术,对于关节附近的顶点,由影响这些顶点的两段(或裂缝问题。

+ r2 E/ c+ O+ R: o

这里,引入一个D3D技术概念:

“Vertex Blending”---顶点混合技术。比如说,你肯定用过SetTransform个问题后文会讲到。你也可以在微软的DXSDK的帮助文件中搜索“GeometryBlending”主题,有裂缝及其二X文件如何保存骨骼动画

理解X文件格式,对用好相关的DX函数是非常重要的。

不含动画的普通X文件,有一个Mesh单元,保存了各顶点信息、各三角面的索引信息、材质种类及定义等。

动画X文件,则在这个单元中增加了“各骨骼蒙皮信息”、“骨骼层次及结构信息”、“各时刻骨骼矩阵信息”等。

( ?

2.1网格蒙皮信息:

首先,在Mesh{}单元中,在原有的普通网格顶点数据基础上,新增了XSkinMeshHead其中,XSkinMeshHeader是总括,举一实例,如下:

XSkinMeshHeader{& a2 `8 J- o( l- p% m R$ p8 RK- t. ?\ D. |

x7 `& l! A0 d) b#O9 {5@7 G2,//一个顶点可以受到骨骼影响的最大骨骼数,可用于计算共同作用时减少遍历次数35 //当前Mesh的骨骼总数。

}4,//一个三角面可以受到骨骼影响的最大骨骼数。这个数字对硬件顶点混合计算提出了基本要求。

2 / 25

由于每个骨骼的蒙皮信息都需要用SkinWeights结构去描述,所以有多少块骨骼,在Mesh中就有多少个Sk注意,一般把SkinWeights视作Mesh的一部分。这种Mesh又称Skinned Mesh (蒙皮网格)SkinWeights结构如下:

{STRINGtransformNodeName;//骨骼名 8 p- J7 G/ e- y+ B8 [ + t4 \\+ `0 B/ q& `3 Y4G; K

DWORDnWeights;//权重数组的元素个数,即该骨骼相关的顶点个数array DWORD vertexIndices[nWeights];//受该骨骼控制的顶点索引,实际上定义了该骨骼的蒙皮array float weights[nWeights];//蒙皮各顶点的受本骨骼影响的权值

$ L G( `* C$ p2 }- Q! S1 M%l) QMatrix4matrixOffset;//骨骼偏移矩阵,用来从初始Mesh坐标,反向计算顶点在子骨骼坐标}

0 K2 Q, Y) @/ Y; q0 d# R * d* J2 \\:

S- {* L) W4N在有的书中,把上面的matrixOffset叫骨骼权重矩阵,是不恰当的。应该称为骨骼偏移矩阵比较合适。

[问题]在整个动画过程中,子骨骼运动矩阵的数值是不断变化的。上面的骨骼偏移矩阵变化吗?有没有必要重答:

各骨骼的偏移矩阵matrixOffset专门用来从原始Mesh数据计算出各顶点相对于骨骼坐标系的原始坐标。

矩阵是与原始Mesh顶点数值相关联的,在整个动画过程中是不变的,也不应该变。在动画过程中变化是当前码如下:

D3DXMatrixMultiply( &matTemp,

&pMeshContainer->pBoneOffsetMatrices[iMatrixIndex], pMesh即,

D3DXMatrixMultiply(输出最终世界矩阵,该骨骼的偏移矩阵,该骨骼的变换矩阵)' F8 z; ~# v. W\

3 / 25

骨骼动画及微软示例:Skinned Mesh的解析

骨骼动画及微软示例:SkinnedMesh的解析骨骼动画是D3D的一个重要应用。尽管微软DXSDK提供了示例SkinnedMesh,但由于涉及众多概念和技术局,顺利上手。文中所述都是参照各种资料加上自己的理解,也有可能出些偏差,有则回贴拍砖,无则权当一笑一骨骼动画原理原理方面在网上资料比较多,大家都基本明白。在此说一下重点:
推荐度:
点击下载文档文档为doc格式
1p6sv0blf628mwx1483k6i8ss1c8w101bkz
领取福利

微信扫码领取福利

微信扫码分享