骨骼蒙皮动画学习

现在比较流行的动画有三种:1、关键帧动画,2、关节动画,3、骨骼蒙皮动画。根据项目需要,现在主要学习骨骼蒙皮动画。

骨骼蒙皮动画原理:

骨骼蒙皮动画是关键帧动画和关节动画的结合,在关节动画的基础上,利用定点混合(vertex blend)技术,改变皮肤层顶点的数据结构, 使其存储影响这些顶点位置的骨骼信息及影响的权值, 然后通过“蒙皮”算法得到顶点的最终位置。text-stroke-width: 0px; ">使用“蒙皮”算法相当于在骨骼关节上动态蒙皮, 有效解决了裂缝问题。 

基于 XNA的骨骼蒙皮动画的设计

首先使用3D建模软件进行建模,这不是重点,就不做具体说明,需要注意的是,在建模的时候,模型中还要存储相关的数据信息。如模型数据和动画数据。r静态的模型包括骨个层以及包围它的皮肤层。 模型中需要存储用于骨骼蒙皮动画的相关信息, 主要包括骨骼的层次结构和皮肤的顶点信息。 骨骼的层次结构是指按照角色的身体特征构成一个层次结构。 图 2 给出了人体骨骼的层次结构, 箭头由父骨骼指向子骨骼, 从子骨骼用矩阵乘法累积到最顶层的根骨骼, 就可求得每个子骨骼相对于世界坐标系的变换矩阵。

数据载入:在使用 XNA进行游戏编程时, 首先要将3D 软件创建的动画模型文件(X 格式或 FBX 格式) 转换成 XNB 格式, 才能被XNA的内容读取器(Content Reader)读取。 在XNA中, 程序员使用内容管道(Content Pipeline)来加载硬盘上的资源[4 ] 如 3D模型、2D图像、声音等)。 这个过程分为两步: 当项目被编译时,内容管线从硬盘读取资源, 将它处理成二进制文件存放在硬盘上; 当游戏运行时, 直接从二进制文件中读取数据。 这样做的好处在于: 大量的计算在游戏运行之前处理完毕, 可提高游戏运行速度

虽然 XNA 的内容管道可以很方便地进行资源的加载, 但它并不完全支持骨骼蒙皮动画, 因为它可以导入带有骨骼蒙皮动画数据的 X文件或FBX文件, 但输出时并不处理所有的骨骼蒙皮动画数据。 要在 XNA 中添加对骨骼蒙皮动画的支持, 程序员需要扩展默认的模型处理器(model processor), 创建一个新的处理过程并存储模型的骨骼和动画数据。 图 3 显示了扩展内容管道所需创建的类, 添加了对骨骼蒙皮动画模型的支持,新增加的类使用灰色字体和黑框标识。 除此以外, 还需要创建新的类存储、写入和读取这些数据。

比较重要的过程:骨骼信息的更新和皮肤定点信息的更新

骨骼信息:首先根据动画的播放时间确定该动画在该时刻的两个插值关键帧, 然后按照播放时间对这两个关键帧进行插值, 从而确定每一块骨骼该时刻在局部坐标系下的变换矩阵(平移和旋转信息), 最后与父骨骼在世界坐标系下的变换矩阵相乘便得到了每一块骨骼的在世界坐标系下的变换信息[5]。 在插值过程中, 平移过程可使用普通的线性插值完成, 而旋转过程则通过四元数的球面线性插值来实现。

皮肤定点信息的更新:对于皮肤顶点, 根据每个顶点所关联的骨骼以及对应的权值, 使用“蒙皮”算法计算皮肤顶点的位置。“蒙皮”算法本质上是一种插值算法, 它的基本思想是使关节处的皮肤顶点受到与之邻近的几段骨骼的影响,影响大小由权值确定。 其公式如下:

其中, vd是初始状态的皮肤顶点在世界坐标系中的坐标;Di表示在初始状态下第 i段骨骼由局部坐标系到世界坐标系的变换矩D-i 1vd 阵; 表示皮肤顶点在第 i段骨骼局部坐标系中的坐标值;Mi表示第i段骨骼在当前位置由局部坐标系到世界坐标系的变换矩阵。 ω i表示第 i 段骨骼对于当前顶点的权值, v 表示变形后的皮肤顶点在世界坐标系中的坐标。

整体流程:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值