- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于XNA人体骨骼蒙皮动画关键技术探究
基于XNA人体骨骼蒙皮动画关键技术探究摘 要: 人体骨骼蒙皮动画技术是计算机动画领域研究的热点和难点。针对当前骨骼蒙皮动画中关节断裂、皮肤塌陷、顶点计算量大、执行效率低等问题,首先分析了其原理及实现过程,然后以Visual Studio 2012+XNA4.0为平台,设计实现了一个骨骼蒙皮动画的引擎框架,并采用优化旋转算法、动画混合、GPU更新顶点等关键技术,提高了动画的执行效率,增强了动画的真实感。
关键词: 骨骼蒙皮动画; XNA; GPU; 动画混合
中图分类号:TP391.9 文献标志码:A 文章编号:1006-8228(2013)03-13-04
0 引言
计算机动画技术已被广泛应用到电影、游戏、军事、航空等领域,它的研究对象包括现实生活或虚拟世界中的云雾雨、河流、各种植物、动物等等,但其中最有难度和最有挑战性的对象之一就是人体动画[1]。人体运动非常复杂,人的形状不规则,肌肉随着人体的运动而变形,头发、皮肤和衣服模拟起来很困难。另外,由于人类对自身的运动非常熟悉,不协调的运动很容易被观察者所察觉。人体的行为通常包括细微行为(如表情变化)、局部行为(如闭眼、手势等)和全身行为(如走、跳、跑等)。本文在分析骨骼蒙皮动画原理的基础上,利用XNA4.0较好地实现了人体骨骼蒙皮动画,并采用多种关键技术对动画进行优化。
1 骨骼蒙皮动画原理
目前实时人体动画技术可分为三类:关键帧动画、关节动画和骨骼蒙皮动画。
关键帧动画需要首先存储每一帧动画的网格模型,实质上是一种以空间换时间的动画技术。它的优点是计算量小,速度快,角色也更逼真。如果场景中有几百个动画模型共享相同的动画,这种方法将很有用。但是它的局限性也很明显,首先是占用空间较大,其次是灵活性差,很难与用户进行交互,所以关键帧动画一般用于简单的连续动作的模拟。XNA中使用关键帧动画模型很简单,因为XNA有处理静态模型的类。
关节动画是基于面模型的建模方法中的一种,它将骨架层(Skeleton layer)(如图1左)和皮肤层(Skin layer)(如图1右)进行刚性连接,动画过程中,通过骨架运动带动相应的皮肤顶点运动[2]。在该方法中,皮肤相对于与之相连的骨骼并没有发生运动,所以只需要用矩阵描述各个骨骼的相对于父骨骼运动,不考虑皮肤的弹性变形,实现简单,计算速度比关键帧动画慢。但由于是刚性连接,在两段骨骼交接处,容易产生裂缝,影响效果。所以关节动画适合对皮肤精度要求不高的场合,如模拟机器人行为。
骨骼蒙皮动画可以看作是关键帧动画和关节动画的组合,是目前比较流行的动画技术。它在关节动画的基础上,利用顶点混合(Vertex Blend)技术,改变皮肤层顶点的数据结构,使其存储影响这些顶点位置的骨骼信息及影响的权值,然后通过“蒙皮”算法得到顶点的最终位置。使用“蒙皮”算法相当于在骨骼关节上动态蒙皮,有效解决了裂缝问题。但由于“蒙皮”算法中权值的指定是由人工完成,而且在较大关节部分(如肩膀)权值的指定很困难,容易出现如“塌陷(collapse)”、“裹糖纸( candy wrapper)”效应等变形问题[2]。文献[3]中,夏开建等提出了一种改进的“蒙皮”算法,使用向皮肤可变区域中增加辅助节点的方法很好地改善了变形问题,本文将按此改进的“蒙皮”算法进行皮肤顶点位置的计算。
2 基于XNA的骨骼蒙皮动画的设计
2.1 动画模型的创建
骨骼蒙皮动画的创建一般分为模型的创建和动画的创建,逼真的动画模型需要由具有丰富经验的建模师和动画师通过专业的3D软件如3DMAX、Maya等实现。模型中还需要存储相关数据信息:
2.1.1 模型数据
静态的模型包括骨骼层以及包围它的皮肤层。模型中需要存储用于骨骼蒙皮动画的相关信息,主要包括骨骼的层次结构和皮肤的顶点信息。骨骼的层次结构是指按照角色的身体特征构成一个层次结构。图2给出了人体骨骼的层次结构,箭头由父骨骼指向子骨骼,从子骨骼用矩阵乘法累积到最顶层的根骨骼,就可求得每个子骨骼相对于世界坐标系的变换矩阵。皮肤的顶点信息包括顶点的索引、与顶点关联的骨骼索引及权值、顶点的颜色、顶点的法向量等。
2.1.2 动画数据
从程序员的角度来看,动画数据就是动画过程中的骨骼关键帧以及变换矩阵,由它们来决定模型的运动。在XNA中,可以将动画的变换矩阵存放在模型内部,但是对于动画比较复杂的模型,一般存储在单独的animation文件中,这样便于对模型进行驱动和人机交互,以及进行动画混合。
2.2 数据的载入
在使用XNA进行游戏编程时,首先要将3D软件创建的动画模型文件(X格式或FBX格式)转换成XNB格式,才能被XNA的内容读取器(Content Reade
文档评论(0)