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

王玉培 郑利平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

时间: 2024-10-10 00:50:52

3DSMAX 中的CS 骨骼动画插件初探的相关文章

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

大家好,我是孙广东.   转载请注明出处:http://blog.csdn.net/u010019717 更全的内容请看我的游戏蛮牛地址:http://www.unitymanual.com/forum.php?mod=guide&view=my 开发Cocos2d的程序员都知道,Cocostudio其中一个动画编辑组件中的.骨骼动画对于游戏开发的性能上是很好的,有些时候和序列帧动画相比. 强大的unity3d虽然也可以开发2D游戏,可以序列帧实现动画. 还是没有2d的骨骼动画编辑功能. 最近开

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

Unity一直在寻找新的方法来帮助开发者,并为他们提供最好的工具.在此我们向大家宣布,Unity将内置流行的骨骼动画插件Anima2D,从2017年1月开始免费供所有Unity开发者使用! 同时也欢迎插件作者Sergi Valls与这个强大的插件一起,加入我们专业的2D团队. 我们致力于让游戏开发大众化,Anima2D将是Unity为专注于2D内容的开发者改善工具集与工作流程的关键一环. Anima2D实现2D动画和2D角色工具的独特方法再结合Sergi的经验,将成为这项改进的关键部分. Ani

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

?? 大家好,我是孙广东.   转载请注明出处:http://blog.csdn.net/u010019717 更全的内容请看我的游戏蛮牛地址:http://www.unitymanual.com/forum.php?mod=guide&view=my Introduction: Puppet2D 是一种工具允许您快速设置你的 2D 角色动画的.使用此工具可以创建 2D 骨骼.皮肤你的人物的骨头,并创建真的很容易使用的控件,使动画角色一阵微风. 要打开 Puppet2D 窗口,选择Puppet2

Unity3d的2D骨骼动画插件Puppet2D的 基础训练2

大家好,我是孙广东.   转载请注明出处:http://blog.csdn.net/u010019717 更全的内容请看我的游戏蛮牛地址:http://www.unitymanual.com/space-uid-18602.html 6.MESH CREATION Skinning允许单个的对象,将会受到多于一根骨头的影响.为了做到这一点的精灵需要转换为一个网格. 随便选择一个精灵,然后我们来到 Skinning面板. 先看Type of Mesh 的选项0~3 , 值越大网格越密集. 7.BI

Unity3d的2D骨骼动画插件Puppet2D的 基础训练1

大家好,我是孙广东.   转载请注明出处:http://blog.csdn.net/u010019717 更全的内容请看我的游戏蛮牛地址:http://www.unitymanual.com/space-uid-18602.html ?? 1.BONE CREATION 为骨骼选择层. 请单击"Create Bone Tool"按钮.你会留在这种模式下,直到您按输入enter或单击"Finish Bone"按钮. 2D 视图中开始使用鼠标左键,你会开始绘图的骨头.每

在libGDX中使用Spine骨骼动画

首先,github是个宝库,实践流的读者可以直接看例子进行学习 1.这是Spine官方给出的例子 https://github.com/EsotericSoftware/spine-superspineboy 2.我推荐这个,很棒的例子及使用合集 https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-libgdx 下面,我详细说明一下使用步骤: 首先是读取纹理地图集和骨骼数据,这些骨骼数据也包含动画状态数据. T

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+CocoStudio 1.4.0.1)升级到当前相对稳定的高大上环境--Cocos2d-x 3.8.1+Cocos Studio 2.3.2.行程中遇到不少麻烦,时间不知不觉像流水一样悄然逝去(这正是我时不时酸酸地想起"程序猿"三字的主要原因).想之再三,还是努力记录下来,一来为自己可能逝去的记忆,二来为

Unity Spine Skeleton Animation 2D骨骼动画 For Game 介绍

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌. 首先我们来看到底什么是骨骼动画: 在早期的机器上,渲染本身已经占用了很多CPU资源,因此,对于渲染,往往采取的是一种空间换时间的策略,以避免在模型的渲染中继续加重CPU的负担.帧动画模型在这种条件下应运而生.比较著名的帧动画格式是Quake2所采用的MD2.到今天为止,帧动画依然存在,只不过帧动

Spine Skeleton Animation 2D骨骼动画 For Game 介绍

首先我们来看到底什么是骨骼动画: 在早期的机器上,渲染本身已经占用了很多CPU资源,因此,对于渲染,往往采取的是一种空间换时间的策略,以避免在模型的渲染中继续加重CPU的负担.帧动画模型在这种条件下应运而生.比较著名的帧动画格式是Quake2所采用的MD2.到今天为止,帧动画依然存在,只不过帧动画更多地是来描述小且动作相对少些的物体. GPU出现后,CPU的问题早已不像以前那么突出,一些新的手段和技术也可以被应用进来了.骨骼动画相对于帧动画而言,更加灵活多变,但同时,骨骼动画需要更多的计算量,因