王玉培 郑利平1
合肥工业大学计算机与信息学院VCC 研究室, 合肥 230009
摘要:首先介绍了3DSMAX 中的CS 骨骼动画制作方法,通过Biped 骨架可以快速方便的制
作两足动物的动画。并介绍了基于3DSMAX SDK 的插件开发,SDK 中类库的组织方式和3DSMAX
的场景组织,最后介绍了和3D引擎密切相关的骨骼动画导出插件的开发过程。
关键词:骨骼动画 插件开发 Biped
Preliminary Study on the CS Skeletal Animation Plug-in in
3DSMAX
WANG Yu-pei ZHENG-Liping
VCC Division, School of Computer & Information, Hefei University of
Technology, Hefei, 230009,China
Abstract: The method of CS Skeletal Animation in 3DSMAX is introduced firstly. Biped
animation can be accomplished quickly and easily by the Biped skeleton. Plug-in Development
based on 3DSMAX SDK, the organization form of SDK library and scene organization form of
3DSMAX are introduced secondly. The design of skeletal animation Export plug-in is described,
which is closely related to the 3D engine.
Keywords: Skeletal Animation Plug-in Development Biped
1 引 言
3D 图形引擎中角色动画是一个重要的组成部分,它在虚拟现实、电子游戏,甚至是
传统的动画制作中均扮演着极其重要的角色。如何实现一个良好的角色动画以引起越来越
多的研究者的关注[1]。目前的许多建模软件都可以快速高效的制作骨骼动画,如3DXMAX
8
和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 骨骼动画插件工具介绍
生物是由骨架来支撑肢体,并通过肌肉的收缩和拉伸来控制骨骼的运动,从而产生各
种姿势和运动。在虚拟场景中,为了让角色的肢体能够灵活地运动,使用虚拟骨骼来控制
模型各肢体上的点,各部分的骨骼组成角色的骨架[2]。通过调整骨架,可使角色模型摆出
各种造型。
CS 中的Biped 提供了一套具有人类骨架特点的骨架系统,集成了正向动力学系统
(forward Kinematics)和反向动力学系统(Inverse Kinematics),可以给其骨架设置任意样
式的动作。Biped 的优点在于其骨架能够调整,可以精简枝节数量或是使其变得复杂,还
能通过平移、旋转、缩放等变换方式改变造型。Biped 还可以将角色的运动保存至外部文
件,这些运动文件能够应用到不同结构的Biped 骨架上,自动协调结构差异,得到流畅的
动作。
2.1 人体骨架模型
人体是个非常复杂的系统,由200 多个旋转关节组成的复杂形体,要模拟真实的人体
运动,需要提供所有的关节数据,所以人体运动的仿真远复杂于一般的刚体。由于人体结
构的复杂性,有必要对人体进行抽象和简化[3]。为了更好的描述运动,把人体构造成层次
电脑应用技术 二零一零总第七十七期
9
结构。人体骨架建立好后,为了方便的表示关节之间的联动关系,在一个骨骼链上建立一
个反向运动学链,通过末端效应器的位置反向求解链上各骨骼的位置。
2.2 创建Biped 骨架
在3DSMAX 的命令面板的Create 栏下打开System 按钮,点击Biped 按钮,在任意视
窗中按住鼠标左键并拖动生成一个类似人体的Biped 骨架,如图1 所示。用户可以在Create
Biped 卷展栏中调整建立参数来精细定制Biped 骨架,决定其构成部分以及其枝节的数量,
如图2 所示。
在视窗中创建好biped 骨架后,进入Motion 面板,选择Figure 模式,用户在此模式下
可对Biped 骨架中的任一骨骼平移、旋转、缩放。由于Biped 骨架是系统预设定的,为了
保证其骨架的完整性,用户不可以删除其中的一根骨骼,但可以在其允许的范围内改变其
图1 biped 骨架
图2 Create Biped 卷展栏
肢节的数量。
2.3 制作Biped 动画
Biped 骨架具备了模拟人体的肢体和关节运动模式的能力,这依赖于其肢体的层级结
构和运动关系。Biped 使用了完全独立于3DSMAX 的内置IK 系统,通过对FK 和IK 的自
10
动切换和混合使用,用户可以快速有效地制作各种类型的动画。
不仅如此,Biped 还提供了一种更加高效的用于提高动画制作效率的方法——步迹动
画。只需要建立一些脚印,Biped 就会利用自身的模拟人类运动的动力学原理,计算骨架
各肢体的运动,形成自然流畅的动画,如图3 所示。通过选择不同的歩迹类型,可以创作
行走、奔跑和跳跃的动作。按照歩迹自动生成的运动只是精简的动画,为动画设计者提供
了一个框架,在这个基础上用户再发挥自己的想象空间调整骨架来达到自己想要的效果。
Biped 的歩迹动画是根据动力学原理计算歩迹位置及时间关系后自动生成的。通过设
置Biped 的动力学参数可以调整Biped 的运动方式。Biped 的运动方式受到以下四个参数
的影响:平衡因素(Balance Factor)、动力混合(Dynamics Blend)、弹道张力(Ballistic
Tension)和重力加速度(Gravitational Acceleration)。Biped 可以将歩迹以及骨架的所有运
动保存至外部文件,由于Biped 骨架结构的固定性,可将运动信息导入到其它的Biped 骨
架上,而且能够自动匹配不同结构和大小尺寸的Biped 骨架,获得逼真和流畅的效果。同
时Biped 骨架还可以导入从动作捕捉仪器得到的运动数据,方便逼真的制作人物的运动效
果,极大的缩短了制作周期。
图3 Biped 的歩迹模式
图4 SDK 中的类库继承图
3 3DSMAX SDK 骨骼动画插件开发
3.1 SDK 二次开发
MAX SDK 是一个面向对象的程序库,提供了一组强大的可重用类库,专用于开发
3DSMAX 插件。事实上,3DSMAX 本身就是一个个的标准插件(几何体、修改器、控制
11
器等)组装而成的。3DSMAX 插件是一些动态链接库,以及为与3DSMAX 紧密集成而添
加的一些特殊机制:查找插件的机制,帮助机制以及插件参数配置机制。所有的3DSMAX
插件必须是可重入的、线程安全的[4]。
在3DSMAX 中有一个定制好的Microsoft Visual C++应用向导,可以简化制作动态链
接库的程式化的过程。通过此应用向导,可以快速生成插件的框架。为插件框架添加功能
与编写C++程序一样,只是多了SDK 的可重用类库使用。SDK 的所有类派生自三个抽象
基类:Animatable,ReferenceMaker,ReferenceTarget。其中的继承关系如图4 所示。
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 引擎的差值处理得到,此种方法导出的
电脑应用技术 二零一零总第七十七期
12
骨骼动画需要3D 引擎具有矩阵差值功能[5]。
4 结束语
骨骼动画技术在虚拟现实、动漫游戏中的应用日益广泛,从3D 建模软件中导出骨骼
动画数据非常重要。一个完整的骨骼动画系统导出插件是一个非常复杂的工程,本文只是
就3DSMAX 中的CS 骨骼动画导出插件中的主要技术做了一些分析和探索,为导出插件的
制作提供了一个大体的框架。
参考文献
[1] 王洪福,陈雷霆,李东魁.三维图形引擎中骨骼蒙皮动画的一种实现方法[J].计算机应用研究. 2006,
12:349-351
[2] 秦文虎,吴宇晖,赵正旭,周晓晶.虚拟角色骨骼模型建立方法研究[J].计算机应用与软件. 2008,
25(1):185-186
[3] 李春霞,杨克俭,李波. 人体骨架模型的建立及IK 问题的一种解决方式[J]. 武汉理工大学学
报,2003,27(6):815-818
[4] 罗胜. 3ds max SDK 插件开发技术[J].机床与液压, 2003,6: 242-243
[5] 金小刚,陆国栋.关节动画和人体动画.电脑动画专栏, 1997 (1) : 40-42
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
原文地址:https://www.cnblogs.com/skiwnchiwns/p/10344193.html