3D 图形引擎中角色动画是一个重要的组成部分,它在虚拟现实、电子游戏,甚至是传统的动画制作中均扮演着极其重要的角色。如何实现一个良好的角色动画以引起越来越多的研究者的关注。目前的许多建模软件都可以快速高效的制作骨骼动画,如3DXMAX和Maya 等,但是如何从这些软件中导出骨骼动画供3D 引擎使用,也是目前骨骼动画系统的一个重要方面。

3D Studio Max,常简称为3DSMAX,是Autodesk 公司开发的基于PC 系统的三维动画渲染和制作软件。在3DSMAX 软件系统下,最大的功能是制作高端的角色人物动画,它集成了自身拥有的一套完整的角色制作及动画实现的工具和命令,并且完美地融合了第三方的插件等诸多优点。Character Studio(以下简称CS)是3DSMAX 的一个及其重要的动画制作组件,它可以方便快捷地模拟人物及两足动物的动作。CS 由两个部分组成,即Biped 和Physique。Biped 是新一代的三维人物及动画模拟系统,它用于模拟人物及任何二足动物的动画过程。使用Biped 来简单地设计步迹即可使人物走上楼梯,或跳过障碍,或按节拍跳舞等。还可以把一种运动模式复制到任意一种二足动物身上而不需要做重复的工作,这样对于诸如群组动画创作就变得轻而易举了。

3DSMAX 是一个开放性的系统,提供了简便的接口和丰富的类库支持。3DSMAX 提供了两个层次的开发工具:MAXScript 和SDK。MAXScript 简单易学,使用方便,但是它的限制很多,而且不能开发底层软件;SDK 则可以充分利用3DSMAX 的丰富的类库,对3DSMAX 进行最为彻底的二次开发。用户通过SDK 中提供的CS 类库,可以开发出适合自己的骨骼动画插件,常用的是根据3D 引擎的需要,开发合适的骨骼动画导出插件。

2 CS 骨骼动画插件工具介绍

生物是由骨架来支撑肢体,并通过肌肉的收缩和拉伸来控制骨骼的运动,从而产生各种姿势和运动。在虚拟场景中,为了让角色的肢体能够灵活地运动,使用虚拟骨骼来控制模型各肢体上的点,各部分的骨骼组成角色的骨架。通过调整骨架,可使角色模型摆出各种造型。

CS 中的Biped 提供了一套具有人类骨架特点的骨架系统,集成了正向动力学系统(forward Kinematics)和反向动力学系统(Inverse Kinematics),可以给其骨架设置任意样式的动作。Biped 的优点在于其骨架能够调整,可以精简枝节数量或是使其变得复杂,还能通过平移、旋转、缩放等变换方式改变造型。Biped 还可以将角色的运动保存至外部文件,这些运动文件能够应用到不同结构Biped 骨架上,自动协调结构差异,得到流畅的动作。

2.1 人体骨架模型

人体是个非常复杂的系统,由200 多个旋转关节组成的复杂形体,要模拟真实的人体运动,需要提供所有的关节数据,所以人体运动的仿真远复杂于一般的刚体。由于人体结构的复杂性,有必要对人体进行抽象和简化。为了更好的描述运动,把人体构造成层次结构。人体骨架建立好后,为了方便的表示关节之间的联动关系,在一个骨骼链上建立一个反向运动学链,通过末端效应器的位置反向求解链上各骨骼的位置。

2.2 创建Biped 骨架

在3DSMAX 的命令面板的Create 栏下打开System 按钮,点击Biped 按钮,在任意视窗中按住鼠标左键并拖动生成一个类似人体的Biped 骨架。用户可以在CreateBiped 卷展栏中调整建立参数来精细定制Biped 骨架,决定其构成部分以及其枝节的数量,在视窗中创建好biped 骨架后,进入Motion 面板,选择Figure 模式,用户在此模式下可对Biped 骨架中的任一骨骼平移、旋转、缩放。由于Biped 骨架是系统预设定的,为了保证其骨架的完整性,用户不可以删除其中的一根骨骼,但可以在其允许的范围内改变其肢节的数量。

2.3 制作Biped 动画

Biped 骨架具备了模拟人体的肢体和关节运动模式的能力,这依赖于其肢体的层级结构和运动关系。Biped 使用了完全独立于3DSMAX 的内置IK 系统,通过对FK 和IK 的自动切换和混合使用,用户可以快速有效地制作各种类型的动画。不仅如此,Biped 还提供了一种更加高效的用于提高动画制作效率的方法——步迹动画。只需要建立一些脚印,Biped 就会利用自身的模拟人类运动的动力学原理,计算骨架各肢体的运动,形成自然流畅的动画。通过选择不同的歩迹类型,可以创作行走、奔跑和跳跃的动作。按照歩迹自动生成的运动只是精简的动画,为动画设计者提供了一个框架,在这个基础上用户再发挥自己的想象空间调整骨架来达到自己想要的效果。Biped 的歩迹动画是根据动力学原理计算歩迹位置及时间关系后自动生成的。通过设置Biped 的动力学参数可以调整Biped 的运动方式。Biped 的运动方式受到以下四个参数的影响:平衡因素(Balance Factor)、动力混合(Dynamics Blend)、弹道张力(BallisticTension)和重力加速度(Gravitational Acceleration)。Biped 可以将歩迹以及骨架的所有运动保存至外部文件,由于Biped 骨架结构的固定性,可将运动信息导入到其它的Biped 骨架上,而且能够自动匹配不同结构和大小尺寸的Biped 骨架,获得逼真和流畅的效果。同时Biped 骨架还可以导入从动作捕捉仪器得到的运动数据,方便逼真的制作人物的运动效果,极大的缩短了制作周期。

3 3DSMAX SDK 骨骼动画插件开发

3.1 SDK 二次开发

MAX SDK 是一个面向对象的程序库,提供了一组强大的可重用类库,专用于开发3DSMAX 插件。事实上,3DSMAX 本身就是一个个的标准插件(几何体、修改器、控制器等)组装而成的。3DSMAX 插件是一些动态链接库,以及为与3DSMAX 紧密集成而添加的一些特殊机制:查找插件的机制,帮助机制以及插件参数配置机制。所有的3DSMAX插件必须是可重入的、线程安全的。

在3DSMAX 中有一个定制好的Microsoft Visual C++应用向导,可以简化制作动态链接库的程式化的过程。通过此应用向导,可以快速生成插件的框架。为插件框架添加功能与编写C++程序一样,只是多了SDK 的可重用类库使用。SDK 的所有类派生自三个抽象基类:Animatable,ReferenceMaker,ReferenceTarget。3.2 3DSMAX 的场景组织

3DSMAX 的整个场景是树状结构,树的节点用INode 来表示,场景的根节点通过Interface::GetRootNode 来获得。INode 中的NumberOfchildren 函数GetChildNode 则用来访问INode 的子节点。要遍历场景中的对象,只需要通过Interface::GetRootNode 和GetChildNode 做一次递归循环即可。INode 仅仅是一个虚拟的节点,它本身仅仅包含一些引用标记和变换信息,并不表示实际的Object,实际的Object 需要附着在INode 上,并以INode 的坐标系为Object 的局部坐标系。

3.3 CS 骨骼动画导出插件

在3D 引擎中,骨骼动画系统是非常重要的一个组成部分。3DSMAX 骨骼动画导出插件可将3DSMAX 中制作好的骨骼动画数据导出供3D 引擎使用。骨骼动画系统,包括角色的蒙皮数据和顶点与骨骼的绑定信息以及动作序列。导出插件分两个步骤导出骨骼动画。

第一,导出角色的蒙皮数据;

第二,导出角色的动作序列。

骨骼动画系统中骨架为动画的载体,所有的蒙皮附着在骨架之上。骨架上的骨骼其实只是一个INode,骨骼仅仅是一些变换矩阵的信息而已。目前没有特别好的办法鉴定那些INode 是骨骼,比较可行的办法是把所有Skin 修改器中使用的INode 都作为骨骼导出,同时还需要保存骨骼之间的父子关系。骨架导出后,进一步需要导出骨架的动作序列。采用的方法是先加载一个已经导出的骨架,遍历这个骨架中所有的骨骼,找到此骨骼对应的INode 对象,然后确定动画的长度和帧数,为每一根骨骼保存一个变换矩阵。此变换矩阵为骨骼的绝对变换矩阵,而不是相对父骨骼的变换矩阵,这样省去了从根骨骼开始计算骨骼的麻烦,但是也多了很多的限制。

比如不能进行动作的混合,不能做动作的差值等。对于动作序列的导出,有两种保存数据的方式,一种是简单的导出每一帧的变换矩阵,而不区分关键帧,这种方法使用简便,易于实现,3D 引擎不需要做复杂的差值处理等,但是此种方法保存的数据量大,读写麻烦。Direct3D 中的骨骼动画导出插件使用的就是这种导出方式;另一种方式是只记录关键帧的变换矩阵,对非关键帧时刻的变换矩阵则通过3D 引擎的差值处理得到,此种方法导出的骨骼动画需要3D引擎具有矩阵差值功能。

4 结束语

骨骼动画技术在虚拟现实、动漫游戏中的应用日益广泛,从3D 建模软件中导出骨骼动画数据非常重要。一个完整的骨骼动画系统导出插件是一个非常复杂的工程,本文只是就3DSMAX 中的CS 骨骼动画导出插件中的主要技术做了一些分析和探索,为导出插件的制作提供了一个大体的框架。

来源于王玉培、郑利平《3DSMAX 中的CS 骨骼动画插件初探》

探讨3DSMAX 中的CS骨骼动画插件相关推荐

  1. Unity即将内置骨骼动画插件Anima2D

    Unity即将内置骨骼动画插件Anima2D Unity一直在寻找新的方法来帮助开发者,并为他们提供最好的工具.在此我们向大家宣布,Unity将内置流行的骨骼动画插件Anima2D,从2017年1月开 ...

  2. mixamo骨骼_C4D中Mixamo自动骨骼动画制作视频教程

    本教程是关于C4D中Mixamo自动骨骼动画制作视频教程,时长:42分,大小:420 MB,MP4高清视频格式,教程使用软件:Cinema 4D,作者:EJ Hassenfratz,共7个章节,语言: ...

  3. Unity3d的2D骨骼动画插件Puppet2D的使用2

     大家好,我是孙广东.   转载请注明出处:http://blog.csdn.net/u010019717 更全的内容请看我的游戏蛮牛地址:http://www.unitymanual.com/s ...

  4. vue中使用 wow.js 动画插件

    1. 安装 npm install wowjs --save (animate.css会被自动安装,但是这里有坑) 官网地址:wowjs animate.css 2. 在main.js中引入anima ...

  5. Cocos2d-x 3.8.1+Cocos Studio 2.3.2捉虫记之控制场景文件中的骨骼动画

    Cocos2d-x 3.8.1+Cocos Studio 2.3.2捉虫记之控制场景文件中的骨骼动画 引子 这段时间一直努力在把早期版本的拇指接龙游戏(Cocos2d-x 2.2.3+CocoStud ...

  6. [Unity][FairyGUI]场景中龙骨骨骼动画设置播放

    Spine和DragonBones都是FairyGUI可以显示的骨骼动画. DragonBones骨骼动画显示. 首先得在Unity项目中配置 DragonBones的SDK. 在FairyGUI编辑 ...

  7. Skeletal Animation(骨骼动画)

    Skeletal Animation(骨骼动画) 有关骨骼动画的东西都放在这里好了. http://en.wikipedia.org/wiki/Skeletal_animation Skeletal ...

  8. Unity载入骨骼动画详解

    Spine Skeleton Animation(2D骨骼动画) 骨骼动画 首先我们来看到底什么是骨骼动画: 在早期的机器上,渲染本身已经占用了很多CPU资源,因此,对于渲染,往往采取的是一种空间换时 ...

  9. unity怎么显示骨骼_浅谈Unity3D 骨骼动画

    最近研究了一下游戏中模型的骨骼动画的原理,做一个学习笔记,便于大家共同学习探讨. ps:最近改bug改的要死要活,博客写的吭哧吭哧的~ 首先列出学习参考的前人的文章,本文较多的参考了其中的表述: 一. ...

最新文章

  1. 关键任务应用程序依赖于故障保护存储器
  2. github+picGo+jsDelivr构建图床
  3. 索尼诺基亚持股公司告赢苹果,获300万美元赔偿
  4. c语言变量值与数组元素值交换,编写一个交换变量值的函数,利用该函数交换数组a和数组b中的对应元素值。要求尽量用指针的方法实现。数组a...
  5. CVPR 2020 三篇有趣的论文解读
  6. CentOS7 安装 Node.js
  7. NOS跨分区灾备设计与实现
  8. Redis系列四、redis的五种数据结构和相关指令之List
  9. Java关于延迟加载的一些应用最佳实践
  10. numpy无法导入的问题--ModuleNotFoundError: No module named 'numpy'总结
  11. 数字三角形问题Java
  12. sqlmap自动化注入工具使用浅析
  13. 欧洲商学院MBA(项目管理)学习笔记
  14. oracle shutdown 很慢,oracle shutdown immediate等待时间很长之思考
  15. 【Django | allauth】登录_注册_邮箱验证_密码邮箱重置
  16. Python pandas 筛选 Excel 特定行和列全集
  17. 这种文件别打开,大小不足1KB,却可以让你电脑瘫痪
  18. 《简约至上》——话说简单与明确认识
  19. 大专程序员毕业五年税后18K,想进BAT,网友:吃shi都赶不上热的
  20. html video各种控制命令,HTML Video controls用法及代码示例

热门文章

  1. HTML总结div中的内容垂直居中的五种方法
  2. 艾德斯克林ajax,《地狱男爵》重启版:艾德斯克林加盟
  3. api getway自述
  4. JAVAWEB代码审计技巧方法
  5. c语言中应用程序错误,应用程序错误0xc0000022 浅析win10应用程序错误0xc0000022的应对办法...
  6. Java学习之子类(八):abstract类和abstract方法
  7. 【转载】四种常见系统架构介绍
  8. 宝塔php开启curl扩展,好用的PHP Curl扩展工具Guzzle
  9. 呼叫中心okcc电话呼叫软件自动连续呼叫设置
  10. 在Fedora 23上安装多媒体解码器