Archive

Posts Tagged ‘骨骼动画’

骨骼动画的数据压缩(一)

June 12th, 2010 No comments

这里说的骨骼动画数据,是指美术用Max,Maya或者XSI之类的3d工具制作的角色动画,通常要导出成引擎可以读取的特殊格式,为游戏所用。对于目前越来越强调动作感的网络游戏来说,动画资源占整个安装包尺寸的比例在不断上升,动画数据的压缩也在变得原来越重要,更不用说采用大量实时渲染过场动画的次世代Console游戏了。

每个引擎都有自己独特的动画文件格式,但里面的内容都大同小异。所谓动画,就是一系列关键帧的集合,每个关键帧可以描述了角色整个骨架的完整姿态信息,也就是每一块骨骼在3d空间中的位置和方向。

假设我们有一个包含50块骨骼的骨架,采用30fps的帧率,一个长度为两秒的动画需要占用多大的空间呢?我们来计算一下。我们知道空间的方位可以用一个矩阵来描述,一个矩阵包含4 x 4 = 16个浮点数,也就是64字节;我们有50块骨骼,那么每个关键帧就需要50 x 64 = 3200字节,另外关键帧还需要一个4字节的时间值,那么就是3204字节;两秒的30fps动画一共包含60个关键帧,于是可以算出最终的大小是3204 x 60 = 192240字节,不到200k的样子。这就是未经压缩的数据大小,当然这里忽略了一些诸如骨骼名字之类的信息,和我们要讨论的动画压缩关系不大,就不算在内了。

Read more…

Categories: 程序/算法 Tags: , ,

Grandpa SDK 0.7发布

February 25th, 2010 No comments

下载Grandpa SDK 0.7

Grandpa主页

主要修改:

  • Max插件能自动保存最后一次成功导出的设置
  • 添加IVertexStream接口,顶点数据分为静态和动态两个stream
  • 完善IEventHandler接口,支持任意用户自定义动画事件
  • 添加IProperty接口,用户可以在模型,部件和材质文件中添加自定义属性
  • 添加ISkin接口,支持GPU蒙皮

详情请见更新历史

Categories: 程序/算法 Tags: , ,

Grandpa SDK 0.6发布

January 17th, 2010 1 comment

下载Grandpa SDK 0.6

Grandpa主页

据说贴一张图能显著提高点击率 🙂

主要修改:

  • 支持资源异步加载
  • 用户可定制资源管理
  • 支持动画分段播放
  • 大幅提高资源加载速度
Categories: 程序/算法 Tags: , ,

Grandpa SDK 0.51发布

December 12th, 2009 No comments

下载Grandpa SDK 0.51

Grandpa主页

What’s new:

  1. 提供max8和max9两个导出插件(原来只支持max9)
  2. 修正了模型包围盒没有更新的bug
  3. IModel::playAnimation现在返回IAnimation*(原来返回void)
Categories: 程序/算法 Tags: , ,

高跟鞋问题的骨骼动画解决方案

September 13th, 2009 1 comment

解释一下标题,所谓高跟鞋问题是指女性3d角色的动画如何根据穿的是平底鞋或高跟鞋(甚至是任意高度的鞋跟)进行自动调整的问题。因为显而易见地,如果不做调整的话脚部的姿态不可能同时适应平底鞋和高跟鞋。而如果对角色的每个动作都分别制作平底鞋和高跟鞋两个版本的话无疑极大加重了美术的负担,况且高跟鞋的鞋跟还可以不止一个高度。

highheel

Read more…

Categories: 程序/算法 Tags: ,

Grandpa SDK 0.5 发布

September 4th, 2009 2 comments

Grandpa是一个精巧,高效而且功能强大的C++骨骼动画库。

非商业应用免费,商业应用请联系我

转贴请注明出处。

去Grandpa主页了解详情

Categories: 程序/算法 Tags: , ,

骨骼动画反向动力学(IK)的实现

March 15th, 2008 8 comments

反向动力学,Inverse Kinematics,简称IK。简单地说,由父骨骼的方位和子骨骼的相对变换得到子骨骼的方位,称为正向动力学(Forward Kinematics,FK);而IK则是先确定子骨骼的方位,反向推导出其继承链上n级父骨骼方位的方法。

IK在游戏里最常见的应用是foot placement,就是当角色站在一个不平的表面上(台阶,斜坡)时,自动调整两脚的高低(当然,同时会影响小腿和大腿的姿态)以便看上去脚是真正“踩”在地面上的,而不是浮在空气中或者陷入地面以下。

如果不用IK的话,要解决这个问题就只能为所有可能的地形起伏情况制作不同的角色动作,其工作量是不可想象的。另外的应用就是象《波斯王子》,《古墓丽影》这样的游戏,经常会需要主角向前跃起然后抓住一样东西,比如一根旗杆。主角的弹跳能力通常是固定的,游戏也不可能要求玩家控制角色在一个精确的特定地点朝一个精确的特定方向跳跃,一般都是允许一个误差范围。那么问题就出现了,当主角飞到旗杆附近时,可能旗杆在头顶上,也可能在肩膀之下,或者偏左偏右都有可能,这时IK就可以使主角的双手自然地伸向旗杆,不管它在哪里(当然,必须physically possible,也就是在生理学上够得着的距离内)。

下面是去年写的一个demo视频

Read more…

Categories: 程序/算法 Tags: ,