摘 要:以经典的软件方法控制三维角色动画为基础,研究三维角色动画及其控制技术,开发实用的软件控制平台,对于实现具有通用性、灵活性、易操作性的软件控制方法和支持工具具有一定作用。
关键词: 三维动画;动作控制;控制软件;运动数据驱动
1 引言
三维角色的动作控制是指将动画设计师完成的三维角色模型,按照动作脚本的需求进行姿态与动作的设置,所需要的一整套软件工程活动。其控制过程可以分为两个层面。第一个层面为控制层,指的是动画师人为控制的部分,包括手动调节关键帧动作,运动数据的导入等。另一个层面是运算层,指计算机进行模拟运算完成的,包括帧间平滑动作计算,动力学计算等。两个阶段不断反复,令动作反复调节改进。本文主要分析了三维动画动作控制平台的设计与实现。
2 角色的动作控制平台的结构设计
三维角色动画运动控制的动作控制平台的设计由运动执行引擎、运动定义组件、管理和监控组件、客户端应用组件几部分组成[1,2]。
2.1 执行引擎的设计
运动执行引擎模块用于将动作控制运动定义实例化为动作控制运动实例,调度并控制动作控制运动实例中各项活动的执行运动,处理与动画师操作动作组件和三维角色模型组建之间的交互,提供操作与机制。
在运动执行引擎中,可以使用相对独立的运动实例化子模块读取动作控制运动定义,从用户或应用程序中获取测试运动参数,生成可以执行的动作控制运动实例。运动实例化子模块应该可以从列表中选取要被实例化的动作控制运动定义。应提供某种机制,对动作控制测试运动实例的存储提供支持。运动执行引擎至少应该提供以下四种接口:与运动定义组件的接口、与管理和监控组件的接口、与客户端应用组件的接口,以及与动作控制应用组件的接口。
2.2 运动定义组件
运动定义组件用于创建可以在运动执行引擎上运行的动作控制运动定义。运动定义组件应采用可视化的形式方便地编辑动作控制运动定义。运动定义组件应支持活动之间的复杂的逻辑关系。运动定义组件应可以新建动作控制运动定义,也可以通过对动作控制运动模板进行裁剪生成动作控制运动定义。在编辑动作控制运动定义时,运动定义组件应可以读取组织/角色模型信息。应使用可以被运动引擎所识别的形式化的运动定义语言描述软件动作控制运动定义。这种形式化的运动定义语言应是通用的,或者符合某种标准的,可以被其他动作控制运动定义工具所识别。应提供某种机制,对动作控制运动定义的合法性进行校验,并对动作控制运动定义的存储提供支持。
2.3 动作控制组件
动作控制应用组件用于指定动作控制运动中的活动应该如何完成,即测试活动的实现。动作控制运动定义规定了各活动之间的逻辑顺序,但是并未指定测试活动应该如何完成。在动作控制运动定义中,活动的作用类似于形参;在动作控制运动定义实例化时,要为活动映射相应的动作控制应用,动作控制应用的作用类似于实参。运动执行引擎在执行到该活动时,调用该活动所映射的动作控制应用来实现活动。这里,应用的概念并不只是指可执行的应用程序,还包括以某种语言的语法编写的脚本代码段。应提供某种机制,使动作控制应用可以访问动作控制运动数据。动作控制应用组件通过运动执行引擎的被调应用接口,实现与动作控制运动实例之间的数据交互。
3 自定义运动骨骼的设计实现
动作控制应用组件是动作控制运动定义中活动的具体实现。由于各个软件组织的动作控制运动不同,因此动作控制应用组件也可能差别很大。因此,很难给出动作控制应用组件的通用设计。此部分程序将建立一个适合模型的骨骼,以及通过移动、放置、缩放各个部分来让骨骼具有角色特征,并正确摆放时让它在模型中很好的适配,具有通用性。
4 动作控制软件的系统结构设计
基于动作控制运动定义与监控系统的功能结构,参考工作流管理联盟的工作流系统结构模型,根据动作控制运动的特点和实际需求,本文给出了动作控制运动定义与监控系统的系统结构。并根据所需的功能,开发相应的面板。在实际的系统中,运动定义组件和运动执行引擎分别采用了Max-script开源组织较为成熟、而且功能十分强大的开源工作流定义工具Max-script和开源工作流引擎Dofin。Nax-script是一个工作流运动定义工具,它实现了工作流管理联盟提出的工作流参考模型中的工作流运动定义接口: MAX-SCRIPT运动定义语言(动作控制),其输出是可以在工作流引擎上解释执行的动作控制格式工作流运动定义。
动作控制运动定义与监控系统需要设计与实现部分包括3个组件:动作执行引擎、运动数据驱动引擎、受力模拟引擎。
(1) 动作执行引擎的设计与实现
真正让角色活动起来的对象就是形形色色的动作。角色负责执行动作和维护那些持续的动作,三维角色模型角色是系统的使用者,每个系统使用者都在系统上有角色模型的定西、性质和属性。角色是系统中特定权限集合的持有者,每个需要由用户来完成的活动都应该赋予一个角色。这里的角色可以对应于动作控制的参与者角色类型属性。对于不同的动作,大致划分为三类,第一钟是引擎无关通用,第二种是引擎相关通用,第三钟是动作相关,具体动作请参看下一章的相应源代码和文档。。可以有一组角色模型进行复式操纵,对角色进行交互控制。工作流引擎内置了一个使厨开源数据库管理系统用于存储工作流运动实例数据。此部分引擎将通过直接数据传输,把控制数据表达为动作。包括重设角色位置、定义角色的位移与旋转方式、并以关节的位移与旋转方式,执行角色的动作
(2) 运动数据驱动的设计与实现
为了能够执行工作流实例,工作流引擎Dofin定义了一套支持包括动作控制接口在内的数据库表结构。但是,在定义动作控制运动时,使用了动作控制的扩展机制。工作流引擎对动作控制的扩展属性没有提供运行时支持。为了对扩展属性提供运行时支持,以及为了系统管理和运动监控,需要扩展Dofin定义的数据库表结构。具体的对数据库表的扩展将在动作控制应用组件、客户端应用组件和管理和监控组件中介绍。动作控制运动数据库主要用于存储动作控制应用中所生成、修改和使用的测试数据。由于每个动作控制组织的动作控制应用组件可能有很大的差异,因此很难给出动作控制数据库的通用设计。
(3) 受力模拟引擎的设
计与实现
系统采用数据实现角色模型库,用户、组和角色信息可以分别存储到不同的表中。用户与组的关联可以在管理组件中实现:系统要提供新建组的功能。在新建用户时,可以指定用户所属的组。由于参与者是动作控制中的元素,Dofin工作流引擎为其提供了相应的运行时支持:用户和组与角色的关联可以在运动实例化时,为类型为角色的参与者绑定用户或组。
工作流运动定义工具Max—script和工作流引擎可以方便的读写动作控制文件。因此,系统以动作控制文件形式存储动作控制运动定义。在具体的测试组织或测试项目中,可以直接使用Max-script定义动作控制运动,也可以从动作控制运动模板库中选取动作控制运动模板,使用Max—script裁剪后,再生成动作控制运动定义。后者是系统推荐的动作控制运动定义方式。无论以哪种方式定义,动作控制运动定义都应存放在三维角色动画定义数据库中。动作控制运动模板库和动作控制运动定义库之间的关系。此部分引擎将通过动力学运算,把计算结果数据数据表达为角色动作。包括动力学参数设计、角色受力设置等,根据运算数据执行角色的动作。
5 结语
主要介绍了三维角色动画动作控制的控制平台的实现,以及执行引擎实现的机制。以此为基础,结合插件脚本语言软件开发过程特点,提出了三维角色动画控制的模型。同时还对本论文中所涉及到的动作执行引擎,运动数据驱动等重要概念进行了功能说明,并进行了开发设计。
参考文献:
[1] 刘升, 王行愚, 游晓明. 基于VC++的OpenGL三维动画仿真及场景漫游的实现[J]. 计算机工程与设计, 2006, 27(17).
[2] 袁景玉, 沈天行, 孟涛, 等. 三维动画人体运动控制方法综述[J]. 河北工业大学学报, 2002, 31(4).