Ogre集成Havok ragdoll

  贴一个星际2虫群之心的单位死亡动画演示~很给力哟,请自行FQ

 

  https://www.youtube.com/watch?v=RlM2K-rHi9k

 

  毕业做毕设时用过PhysX的Wheel,它家的机车示例跟我后来考察的Havok家的相比,后者显然十分霸气和豪华,自此Havok给我留下了很好的印象.

 

   前段时间在工作中使用了PhysX的Max插件做ragdoll,本以为它已经很不错了,这段时间玩了Havok的Max插件+FilterManager+HCT 来制作ragdoll后,我感到很给力,不光Havok的文档,Demo代码很齐全和详尽,而且它技术支持做得真是好,试用版的使用者在论坛提出的每个问题,团队都会一一耐心解答.

 

  我这里集成Havok的ragdoll到Ogre时,没有使用Havok的Animation模块来替换掉Ogre的,因为我想保持Ogre原生的代码,以后想扩展animation blend tree等进一步功能时,自己能手动进行改造.就Havok的ragdoll这一块来说,已经把物理层的繁琐细节都封装起来了,提出了skeleton mapper的概念,暴露给外部的是hkaRagdollInstance这个类.通过下面明确的几个步骤,就能在抽象层次比较高的层面完成Ogre和Havok物理的交互,而不用纠缠于rigid body, constraint.....


  1) map high-res pose to ragdoll pose
  2) drive ragdoll rigid bodies and step physics
  3) map ragdoll pose to high-res pose
  4) render

  

  目前已经成功导入了Havok肢解demo的资源:zombie. Skin和ragdoll的max文件都有,我们需要自己导出.mesh和.hkt.

  十分需要注意的几点有:

1. ragdoll(.hkt)的导出坐标系要与Ogre的一致,也就是yz互换,z变负.通过Havok的TransformScene filter即可.

          

2. ragdoll和mesh导出时的reference pose要一致.

3. The Triangle Pelvis Setup...参看Havok user guide的Skeleton Mappers章节

4. Twist Bones for Ragdolls...同上.  以上4点都是ragdoll制作中可能遇到的问题,毕竟布娃娃这个东西大部分是要靠美术手工制作的.

5. 代码中禁止掉ragdoll各部分间的自碰撞.否则会出现癫痫表现...

 

  相关的代码和资源都在我github上,有需要的朋友可以自行查看.需要注意的是,目前只成功运转了这个zombie,我尝试制作了SC2角色的ragdoll(枪兵和光头哥),都不能正常运作.无奈于对Max的骨骼动作相关制作不甚了解,这里就先搁置了(本来我的计划是成功后继续集成肢解dismemberment功能,这个相当有趣).

 

 

 

posted @ 2013-04-29 11:54  mavaL  阅读(960)  评论(0编辑  收藏  举报