OGRE中表情动画导入存在的问题
来源:互联网 发布:淘宝上卖盗版书的店铺 编辑:程序博客网 时间:2024/06/06 14:06
在使用maya导出插件多次失败之后,对导出插件存在的问题进行了一下总结:
MayaOGRE导出插件存在的问题:在模型制作过程中为了调节动画的方便,动画师往往会把一个模型分成多个部分进行操作,当模型分组后如一个人脸模型由眼睛、牙齿、口腔等部分构成,分别给上材质,直接使用Maya-OGRE导出插件导出会报错,使得导出的模型文件 *.mesh 中的动画不能直接在ogre中使用,如果强行控制动画会导致程序奔溃。其原因在于OGRE中的*.material文件描述的纹理与模型的对应关系混乱了,同时OGRE中的pose动画无法找到模型不同组之间的动画对应关系。对于如何解决上面的问题,我还在寻找答案中。
因为我程序中是使用maya2013建立的模型,而导出插件貌似只支持maya2011。因此,需要将2013的文件导入maya2011中,并保存成*.ma文件,再次打开保存好的文件,使用中的Ogre选项。
具体使用流程如下:
在OutPut Directory中输入“输出路径”
File Basename 输入你要生成的文件名称
然后点击一下
导出插件界面其他地方需要勾上的选项如图:
如果你的模型中除了顶点动画之外还有骨骼信息,就可以勾上
中的 Export skeleton
同时在
中勾上对应选项。
所有需要的选项都勾选上之后点击
点击上面图标之后maya就会产生相应的模型导出成功与否的信息如下图:
这个是maya的插件使用输出信息,当导出模型中含有动画信息的时候,上面的输出信息中有ERROR的话。在OGRE中使用就会导致程序奔溃。
当模型导出成功之后就可以再OGRE 中直接使用了。
将maya-ogre导出的文件分别对应放在如下文件夹中
OgreSDK_vc10_v1-7-4\media\models (*.mesh文件),
OgreSDK_vc10_v1-7-4\media\materials\scripts (*.material文件),
OgreSDK_vc10_v1-7-4\media\materials\textures (纹理文件如: jpg,bmp,png等等)
放好文件之后加载动画模型以及动画的流程如下:
1) 加载mesh纹理
2) 创建动画 createAnimation
3) 创建顶点轨迹跟踪 createVertexTrack
4) 创建顶点姿势关键帧 createVertexPoseKeyFrame, 只用了一个帧
5) 增加所有的姿势关联 addPoseReference
6) 关键帧的更新姿势关联 updatePoseReference
7) 调用动画状态的父通知来更新动画 getParent()->_notifyDirty();
在OGRE的FacialAnimation例子中,setupContent函数中一般进行各种初始化。
void setupContent(void){// setup some basic lighting for our scenemSceneMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5));mSceneMgr->createLight()->setPosition(40, 100, 50);//步骤1: //mHeadMesh 是一个MeshPtr对象,用来后面创建mesh动画用. mHeadMesh = MeshManager::getSingleton().load("face.mesh", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);// 步骤2: createAnimation("Manual", 0);创建动画将其命名为Manual,并将长度初始化为0; // 步骤3: createVertexTrack(1, VAT_POSE); 创建顶点动画迹(Track),这里只有针对索引值为0的Pose动画,故第一个参数为1[1], // 这些动画pose被定义在<poses>标签中,可以查看.mesh文件中的<poses>标签对应的内容// 步骤4:createVertexPoseKeyFrame(0);创建手动动画,并将关键帧起始位置置为0// ************************************* mManualKeyFrame = mHeadMesh->createAnimation("Manual", 0)->createVertexTrack(1, VAT_POSE)->createVertexPoseKeyFrame(0); //mManualKeyFrame中添加自己定制的N个动画,个数不能超过定义的动画个数,那么界面上将出现相应数量的slider,//步骤5://当前的人脸有7个动画for (unsigned int i = 0; i <7; i++) mManualKeyFrame->addPoseReference(i, 0); //创建模型实例Entity* head = mSceneMgr->createEntity("Head", "face.mesh");mSceneMgr->getRootSceneNode()->createChildSceneNode(Vector3(0, -10, 0))->attachObject(head); //从mesh中得到名为Manual的动画参数mManualAnimState = head->getAnimationState("Manual"); Node *mNode = head->getParentNode(); //setYawPitchDist函数只有在CS_ORBIT模式下有效。mCameraMan->setStyle(CS_ORBIT);mCameraMan->setYawPitchDist(Radian(0), Radian(0), 130);mTrayMgr->showCursor(); mFacialContral = new FacialContral(mManualKeyFrame,mManualAnimState,mNode); mFacialContral->initKinect();mPlayAnimation = false; // by default, the speaking animation is enabledsetupControls();}
下面是步骤6和7:
void sliderMoved(OgreBites::Slider * slider){// update the pose reference controlled by this slider//步骤6:mManualKeyFrame->updatePoseReference(StringConverter::parseInt(slider->getName().substr(4)), slider->getValue()); // dirty animation state since we're fudging this manually//步骤7:mManualAnimState->getParent()->_notifyDirty();}
到这里为止 动画的导入就完成了。
当然,如果你还要使用kinect里面的动画单元(AU)对模型进行控制的话,你还需要建立与kinect人脸跟踪API提供的AU相对应的动画模型。
下面是SDK文档里面对它提供的表情动画单元的描述
AU Name and Value
Avatar Illustration
AU Value Interpretation
Neutral Face
(all AUs 0)
AU0 – Upper Lip Raiser
(In Candid3 this is AU10)
0=neutral, covering teeth
1=showing teeth fully
-1=maximal possible pushed down lip
AU1 – Jaw Lowerer
(In Candid3 this is AU26/27)
0=closed
1=fully open
-1= closed, like 0
AU2 – Lip Stretcher
(In Candid3 this is AU20)
0=neutral
1=fully stretched (joker’s smile)
-0.5=rounded (pout)
-1=fully rounded (kissing mouth)
AU3 – Brow Lowerer
(In Candid3 this is AU4)
0=neutral
-1=raised almost all the way
+1=fully lowered (to the limit of the eyes)
AU4 – Lip Corner Depressor
(In Candid3 this is AU13/15)
0=neutral
-1=very happy smile
+1=very sad frown
AU5 – Outer Brow Raiser
(In Candid3 this is AU2)
0=neutral
-1=fully lowered as a very sad face
+1=raised as in an expression of deep surprise
下面show一下自己做的结果。
上图做了一下嘴巴张开程度的对比
上图做了一下眉毛运动的对比
上图为嘴角的运动范围对比。
- OGRE中表情动画导入存在的问题
- ogre中每个骨骼动画分多个文件导出,解决动作变形的问题
- Eclipse中导入项目,名称已存在无法导入问题
- Ogre的骨骼动画
- Eclipse 中导入已存在的工程
- 解决oracle中存在blob大字段时的导入导出的问题
- 【原创】eclipse的JavaEE web工程中存在WebContent目录如何导入MyEclipse问题的解决
- Android 中 导入已存在的 sqlite数据库时出现的问题
- 关于EXCEL数据导入到SQLSERVER中字段存在NULL的问题
- (my)eclipse工作空间中删除项目重新导入会遇到项目已经存在的问题
- 解决在eclipse中导入项目名称已存在的问题
- 关于EXCEL数据导入到SQLSERVER中字段存在NULL的问题
- 解决在eclipse中导入项目名称已存在的问题
- JDBC中存在的问题
- 项目中存在的问题
- DIY OGRE的面部动画
- DIY OGRE的面部动画
- DIY OGRE的面部动画
- 伪终端设备之我见
- 变量类型转换
- gets函数有问题?
- SharePoint2010单点登录(转)
- 写好代码 [comments after India project]
- OGRE中表情动画导入存在的问题
- C# WinForm 文件上传下载
- 漂亮的左右滑动的案例
- HIS功能划分图
- Photoshop自由变换图形大小
- tizen开发(3)
- Centos5下进行Redmine环境搭建,邮件服务配置,LDAP配置
- android中的sqlite数据库加密
- C# 验证码的一种实现