《动画技术论述ppt课件.ppt》由会员分享,可在线阅读,更多相关《动画技术论述ppt课件.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第12章章 动画技术动画技术骨骼动画基础刚体动画蒙皮动画刚体动画蒙皮动画刚体动画蒙皮动画理解骨骼动画原理理解蒙皮动画原理12.1 骨骼动画基础骨骼动画基础1为什么使用顶点混合为什么使用顶点混合12.1.1 顶点混合概念顶点混合概念骨骼动画是用于在计算机上模拟或再现动物运行的技术。一个骨骼动画由骨骼支撑下的顶点运动构成。如果有网格附着在骨骼上,就必须将网格分割成受不同骨骼控制的片断,骨骼运动时势必导致网格断裂,或者部分重叠。实际应用模型动画是采用网格与多个骨骼共同协作完成的。将蒙皮分割成受到不同骨骼控制的片段适合刚体动画例如机器人关节处出现断裂、重叠现象12.1 骨骼动画基础骨骼动画基础1为什
2、么使用顶点混合为什么使用顶点混合12.1.1 顶点混合概念顶点混合概念要使网格在弯曲时实现平滑过渡,需要使用顶点混合技术。渲染系统在顶点上使用额外的世界变换矩阵进行变换,得到多个结果,然后再进行线性混合。所谓混合就是根据多个顶点,按照一定的比例计算中间值即权重,混合:根据多顶点,按照一定比例计算出一个中间值。权重:这个比例称之为权重(weight),它代表了一个顶点对结果的影响程度,所有顶点的权重之和为1。l混合与权重12.1 骨骼动画基础骨骼动画基础2顶点权重顶点权重12.1.1 顶点混合概念顶点混合概念假设顶点为Vn,该顶点的权重为Wn 。一般由建模软件计算。vBlend=V1W1+V2(
3、1.0-W1)/2个影响vBlend=V1W1+V2W2+V3(1.0-(W1+W2) /3个影响vBlend=V1W1+V2W2+V3W3+V4(1.0-(W1+W2+W3) /4个影响几个权重之和为1.0,因此其中一个可以通过其他权重计算出来,在存储时可以少存储1个权重。DirectX支持最多4个世界顶点的混合,因此每个顶点可以包含24个矩阵信息(矩阵索引)和13个权重信息。12.1 骨骼动画基础骨骼动画基础2顶点权重顶点权重12.1.1 顶点混合概念顶点混合概念权重信息由美术师设计角色时用建模工具定义。水平部分受到水平骨骼影响的权重为1,在关节附近影响的程度减小,权重也减小,超过一定范围
4、不受水平骨骼影响。12.1 骨骼动画基础骨骼动画基础3在在DirectX中使用顶点混合中使用顶点混合12.1.1 顶点混合概念顶点混合概念 Vn=VTnWnl权重存储每个顶点受到各个骨骼影响的权重各不相同。骨骼数量较少在顶点中附加几个骨骼的权重信息很容易。权重信息是存储在顶点中的DirectX支持最多顶点3个权重用于混合,每个权重对应特定的矩阵。12.1 骨骼动画基础骨骼动画基础3在在DirectX中使用顶点混合中使用顶点混合12.1.1 顶点混合概念顶点混合概念1)设置世界变换矩阵。顶点混合使用额外的世界变换矩阵。矩阵类型:D3DTS_WORLDMATRIX(n)或D3DTS_WORLDn
5、。其中n取0255,矩阵索引可使用一个字节存储。m_pD3DDevice-SetTransform( D3DTS_WORLDMATRIX(0), &matBlend0);m_pD3DDevice-SetTransform( D3DTS_WORLDMATRIX(1), &matBlend1);m_pD3DDevice-SetTransform( D3DTS_WORLDMATRIX(2), &matBlend2);12.1 骨骼动画基础骨骼动画基础3在在DirectX中使用顶点混合中使用顶点混合12.1.1 顶点混合概念顶点混合概念2)指定权重个数。d3dDevice-SetRenderState
6、( D3DRS_VERTEXBLEND,D3DVBF_2WEIGHTS );DirectX支持多达3个权重(4个世界变换矩阵)用于顶点混合。typedef enum _D3DVERTEXBLENDFLAGS D3DVBF_DISABLE = 0,/关闭 D3DVBF_1WEIGHTS = 1,/1权重,2个矩阵 D3DVBF_2WEIGHTS = 2,/2权重,3个矩阵 D3DVBF_3WEIGHTS = 3,/3权重,4个矩阵 D3DVBF_TWEENING = 255,/用D3DRS_TWEENFACTOR对两个点混合 D3DVBF_0WEIGHTS = 256/使用单一矩阵,权重为1.0
7、 D3DVERTEXBLENDFLAGS;12.1 骨骼动画基础骨骼动画基础3在在DirectX中使用顶点混合中使用顶点混合12.1.1 顶点混合概念顶点混合概念3)顶点定义。权重的格式:D3DFVF_XYZB1、D3DFVF_XYZB2或D3DFVF_XYZB3 。顶点应该包含每个矩阵的权重信息,用于指定顶点混合系数。#define D3DFVF_BLENDVERTEX (D3DFVF_XYZB3|D3DFVF_NORMAL|D3DFVF_TEX1)struct BLENDVERTEX D3DXVECTOR3 v; /位置 FLOAT blend1; /权重1 FLOAT blend2; /
8、权重2 FLOAT blend3; /权重3 D3DXVECTOR3 n; /法线 FLOAT tu, tv; /纹理坐标;12.1 骨骼动画基础骨骼动画基础4索引顶点混合索引顶点混合12.1.1 顶点混合概念顶点混合概念骨骼系统比较复杂时,需要反复切换矩阵,效率较低。DirectX提供一种索引的方法使用矩阵:索引顶点混合(Indexed Vertex Blending)注意:这里的索引是对混合进行索引,和顶点索引没有任何关系。设备可以设置多达255个矩阵,用4个字节足够存储4个索引:m_pD3DDevice-SetRenderState(D3DRS_INDEXEDVERTEXBLENDENA
9、BLE,TRUE ); 12.1 骨骼动画基础骨骼动画基础12.1.2 运动插值运动插值 关键帧动画使用像素图,因此只能做到近似的平滑。骨骼动画也使用关键帧存储一系列关键的状态数据,利用这些数据可以计算出关键帧中间的一些状态,因此能够实现平滑的动画。矩阵存储骨骼状态,但插值困难,一般都是用缩放、旋转和平移变量进行插值。存储运动数据的数据类型:向量:存储缩放比例和平移量。四元数:存储转动量。12.1 骨骼动画基础骨骼动画基础12.1.2 运动插值运动插值 1向量线性插值向量线性插值向量插值较为简单,插值方法分为线性插值和二次曲线插值算法。V=Vn*t+Vn+1*(1-t)D3DXVECTOR3
10、*D3DXVec3Lerp( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2, FLOAT s/插值系数t);骨骼动画也是利用类似传统2维动画关键桢实现的,由于一个模型的皮肤顶点数据量庞大,所以不可能记录每桢皮肤顶点的坐标信息,所以我们存储的是数量较少的骨骼的每桢的顶点变化信息,播放时让每个骨骼按照记录的状态切换到相应的位置,再去用某种方式再去影响皮肤位置就能模拟动物运动了。12.2 刚体动画刚体动画12.2.1 骨骼模型的构成骨骼模型的构成1为什么要使用骨骼动画为什么要使用骨骼动画直接存储、播放顶点帧动画,由
11、于顶点较多,存储和渲染效率较低。实际使用骨骼存储动画信息。皮肤的位置由骨骼驱动,骨骼的运动是造成动物运动的关键。动画数据只要存储每个骨骼的运动信息。动画设计师可以专门地从事动画设计,可以用动作捕捉仪或是用三维建模工具建立动画序列。骨骼动画的思想很简单 ,自然界中的大多数动物都用有一套骨骼,身体的皮毛血肉都依附于骨骼,当骨骼开始运动的时候,都依附于骨骼的皮肉都随骨骼一起运动。在三维图形编程领域,角色的躯体是由网格来表示的,网格由大量三角形组成,三角形由定点组成,为了模仿现实世界中角色自身的动作,就需要为角色网格添加一套骨骼,同时需要确定那些顶点依附于那块骨骼,这样当骨骼运动的时候就能牵引依附骨骼
12、的顶点一起运动,这就是骨骼动画的基本原理。每个骨骼都包含完整的坐标系统,在这个坐标系下如果存在一个网格,顶点都是以本地坐标系的形式存储的,那么在渲染他的时候需要将他转换到世界坐标系。骨骼在转化为数学模型时,包含名称和一个矩阵,这个矩阵用于将顶点从本地空间转换到父结点 空间的变换矩阵。那么我们就需要将子结点的所有顶点和这个矩阵进行相,然后父结点再乘以父结点的父结点,直到根节点为止。最终才能把模型中所有的顶点转换到世界空间。12.2 刚体动画刚体动画12.2.1 骨骼模型的构成骨骼模型的构成3骨骼的数学模型骨骼的数学模型 MCM2= MTM2* MTM1 从bone2转换到世界坐标系的变换矩阵为:
13、其中:从bone1的坐标系转换到世界坐标系的转换矩阵为MTM1从bone2的坐标系转换到bone1的坐标系的转换矩阵为MTM2 MCM3=MTM3*MCM212.2 刚体动画刚体动画12.2.1 骨骼模型的构成骨骼模型的构成3骨骼的数学模型骨骼的数学模型12.2 刚体动画刚体动画12.2.2 动画信息动画信息1动画序列动画序列既然骨骼的的状态是由自身的变换矩阵决定的,那么要实现骨骼动画,只要不断改变这个变换矩阵(通过2各关键帧之间的插值计算获得),并且不断的进行渲染。每个关键帧存储各个骨骼的状态信息,它可以是一系列数组。数组元素包含:状态信息(位移、缩放和旋转角度)和时间。每个骨骼的状态信息都
14、是相对于父节点的信息,因此,每个骨骼的运动信息可以根据实际帧数单独存储。每个骨骼对应一个数组。12.2 刚体动画刚体动画12.2.2 动画信息动画信息1动画序列动画序列一个骨骼系统可以有多个动画序列和它对应。骨骼系统支持多种动画。在播放的时候可以切换不同的动画序列就可以了。在DirectX中:实现动画序列的接口为:ID3DXAnimationSet。单个骨骼动画控制的接口为:ID3DXKeyFrameInterpolator 。它内置了缩放,平移,和旋转的关键桢。动画控制接口:ID3DXAnimationController 。负责管理骨骼,蒙皮和动画信息。12.2 刚体动画刚体动画12.2.
15、2 动画信息动画信息2动画的播放动画的播放当要更新骨骼时,需要遍历当前动作序列,更新所有骨骼的状态信息。状态信息是相对于父节点的,因而不能直接用于三角形渲染,必须计算骨骼的世界变换矩阵。首先根据动画序列中每个骨骼的关键桢信息,计算当前的时刻的状态,这个状态以向量和四元数的形式存储,需要转为矩阵,然后用这些矩阵逐一的更新所有的骨骼节点的本地父结点空间的变换矩阵。Directx使用AnimationController实现本地到父结点的空间变化 根据动画序列中每个骨骼的关键帧信息更新骨骼相对变换矩阵 更新骨骼节点的世界变换矩阵(递归函数) 12.3 蒙皮蒙皮蒙皮即Mesh,它和骨骼关联(绑定)后才
16、能在骨骼的作用下产生变形,从而实现动画。小结(理论课)小结(理论课)本章主要介绍了骨骼动画的基本原理:骨骼动画基础刚体动画蒙皮动画小测验(题目部分)单选题单选题1 下列选项中对顶点混合理解正确的是(下列选项中对顶点混合理解正确的是( )。)。A顶点混合就是将几个顶点合并生成一个顶点以减少三角形面数顶点混合就是将几个顶点合并生成一个顶点以减少三角形面数B顶点混合就是将几个矩阵合并成一个矩阵以便减少计算量顶点混合就是将几个矩阵合并成一个矩阵以便减少计算量C顶点混合就是将一个顶点经过几种不同的变换再求平均值顶点混合就是将一个顶点经过几种不同的变换再求平均值D顶点混合就是对一个顶点进行几种不同变换,再
17、求加权平均值顶点混合就是对一个顶点进行几种不同变换,再求加权平均值2DirectX中一个顶点最多支持几个权重?(中一个顶点最多支持几个权重?( )A2B8C3D2553DirectX中当使用索引顶点混合时,最多有几个权重和几个矩阵索引?(中当使用索引顶点混合时,最多有几个权重和几个矩阵索引?( )A4,4B4,3C3,4D3,255多选题多选题4关于插值方法,下列说法错误的是(关于插值方法,下列说法错误的是( )。)。A二次曲线插值比线性插值平滑二次曲线插值比线性插值平滑B四元数最好使用线性插值,即四元数最好使用线性插值,即QQ1*w1Q2*(1-W1)C一个顶点所有权重之和为一个顶点所有权重
18、之和为1D骨骼动画中的插值是对矩阵加权平均求一个混合矩阵骨骼动画中的插值是对矩阵加权平均求一个混合矩阵小测验(答案部分)单选题单选题1 下列选项中对顶点混合理解正确的是(下列选项中对顶点混合理解正确的是( D )。)。A顶点混合就是将几个顶点合并生成一个顶点以减少三角形面数顶点混合就是将几个顶点合并生成一个顶点以减少三角形面数B顶点混合就是将几个矩阵合并成一个矩阵以便减少计算量顶点混合就是将几个矩阵合并成一个矩阵以便减少计算量C顶点混合就是将一个顶点经过几种不同的变换再求平均值顶点混合就是将一个顶点经过几种不同的变换再求平均值D顶点混合就是对一个顶点进行几种不同变换,再求加权平均值顶点混合就是
19、对一个顶点进行几种不同变换,再求加权平均值2DirectX中一个顶点最多支持几个权重?(中一个顶点最多支持几个权重?( C )A2B8C3D2553DirectX中当使用索引顶点混合时,最多有几个权重和几个矩阵索引?(中当使用索引顶点混合时,最多有几个权重和几个矩阵索引?( C )A4,4B4,3C3,4D3,255多选题多选题4关于插值方法,下列说法错误的是(关于插值方法,下列说法错误的是( BD )。)。A二次曲线插值比线性插值平滑二次曲线插值比线性插值平滑B四元数最好使用线性插值,即四元数最好使用线性插值,即QQ1*w1Q2*(1-W1)C一个顶点所有权重之和为一个顶点所有权重之和为1D骨骼动画中的插值是对矩阵加权平均求一个混合矩阵骨骼动画中的插值是对矩阵加权平均求一个混合矩阵结束结束