OGRE中的人脸动画_第1页
OGRE中的人脸动画_第2页
OGRE中的人脸动画_第3页
OGRE中的人脸动画_第4页
OGRE中的人脸动画_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

OGRE中的人脸动画前言:在Ogre的Facial Demo中采用了顶点动画(确切点说是Pose Animation)让面部产生面部表情及发音动画,本文简单介绍了顶点动画的概念,并结合Facial Demo,探讨如何实现Pose Animation。顶点动画是直接使用顶点让网格(mesh)产生动画的一种方式。每一组动作在顶点动画中对应一个顶点数据实体。顶点动画被存储在.mesh文件中,因为它与网格的顶点紧密相连。实际上,顶点动画分为两种子类型。1、Morph Animation(变形动画)变形动画依靠在每个关键帧中及其之间保存和插入顶点绝对位置的快照(snapshot)。当骨骼动画不能恰当处理动画对象时,变形动画会比较有用。在分物体必须从根本改变动画部分的结构和形状时,骨骼动画就不适合了。由于绝对位置数据的使用,不可能在同样的顶点数据中混合多于一个的变形动画;如果你想使用动画混合,你应该使用骨骼动画,因为它更有效。如果你激活了在同一个顶点数据中包含的多个动画,只有最后一个有效。也就是说动画状态的weight选项不能被用于变形动画。变形动画与骨骼动画能够组合应用(参考Ogre Manual 8.3.3 Combining Skeletal and Vertex Animation)。同时,变形动画也能在使用顶点渲染器(shader)的硬件中实现(参考Ogre Manual Morph Animation in Vertex Programs)2、Pose Animation(姿态动画)姿态动画允许将多个潜在地不同效果等级的顶点姿态(vertex poses)混合成最终的顶点状态。该动画通常用于面部动画,在这种动画中每一个面部表情被作为一个独立的动画,我们可以将一个表情混合在另外一个上,如果每个姿态只影响面部的一部分,也可以组合所有的表情。为了产生姿态动画,需要引用预先包含在mesh中的一套动作集,这些动作集采用与源顶点的偏移量来表示。但是并不要求每一个顶点都有偏移量,当用软件处理这些数据时,没有偏移量的顶点会被忽略掉。如果用硬件处理的话,没有偏移量的顶点会自动被填充为0。一旦定义好了姿态,你就可以在动画中引用他们。每一个姿态动画迹(pose animation track)对应着一个单独的几何数据集合(或者是与物体网格对应的,或者是其中一个子网格的),在动画中的每个关键帧可以引用一个或多个姿态(pose),且每一个有其相应的影响值(influence)。你能定义许多关键帧,使用多种姿态的混合,从而产生多个部位协调运动的动画。应该小心多个姿态同时应用的情况。当在硬件中处理姿态动画的时候(参考Ogre Manual Pose Animation in Vertex Programs),每个激活的动作都需要额外的顶点缓冲器加入到渲染器(shader)中,如果采用软件来处理动画,你处理的激活姿态越多消耗的时间也就越长。也就是说,在一个关键帧中如果有两个姿态,在下一帧中也有两个,那么在它们过渡之间实际上就有4个激活的关键帧。你可以综合应用姿态动画和骨骼动画,参考Ogre Manual 8.3.3 Combining Skeletal and Vertex Animation,你也可以采用硬件加速那些混合顶点渲染器(shader)的应用程序(参考Ogre Manual Pose Animation in Vertex Programs)。3、Pose Animation xml结构/ 顶点缓冲器内容/ 主要是为pose和animation提供索引号/ 这些参数主要是对手调动画有效/ 下面这些动画对于自动播放动画有效/ 动画迹/ 关键帧4、如何实现4.1 建模工具对Pose Animation的支持Facial Demo中所用的头部模型是由SoftImage授权使用的XSI面部动画模型,不是所有的导出工具都支持Pose Animation,目前有SoftImage XSI 5.0 Exporter v1.2.3、oFusion Pro for 3ds max、Maya Ogre导出器支持。4.2 关键顶点的寻找通过分析xml中的poseoffset偏移量,可以看到许多非常小的数据,这些数据是由模型导出工具产生的,其实它们完全可以被忽略掉。通过实验,我将原来604个顶点的poseoffset数据减少为75个,而且效果和原来相差不大,说明这75个poseoffset对应的顶点是该动画的关键顶点。4.3 在程序中如何读取Pose Animation下面是包括在场景创建函数createScene中创建动画的代码:/ 载入包含pose animation的meshMeshPtr mesh = MeshManager:getSingleton().load(aaa.mesh, ResourceGroupManager:DEFAULT_RESOURCE_GROUP_NAME);/ 创建动画将其命名为smile,并将长度初始化为0Animation* anim = mesh-createAnimation(smile, 0);/ 创建顶点动画迹,这里只有针对索引值为0的Pose动画,故第一个参数为11/ 这些动画pose被定义在标签中VertexAnimationTrack* track = anim-createVertexTrack(1, VAT_POSE); / 创建手动动画,并将关键帧起始位置置为0manualKeyFrame = track-createVertexPoseKeyFrame(0);/ 创建手动动画所用到的poses引用,并初始化为0manualKeyFrame-addPoseReference(0, 0.0f);/ 创建物体(这里是Dr. Bunsen的头像)Entity* head = mSceneMgr-createEntity(Head1, aaa.mesh);/ 从mesh中得到名为action的动画参数(在标签中定义)actionAnimState = head-getAnimationState(action);/ 是否允许自动播放该动画actionAnimState-setEnabled(true);/ 获取先前从mesh文件中得到的动画smile,并将关键帧起始位置置为0manualAnimState = head-getAnimationState(smile);manualAn

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论