探讨3DSMAX 中的CS骨骼动画插件

460 篇文章 2 订阅
455 篇文章 3 订阅

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 骨骼动画插件初探》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值