基于D3D的三维虚拟人运动显示
来源:第三维度 作者:束搏、毛天露、王兆其 单位:中国科学院计算技术研究所 数字化技术研究室
摘要:开发了一套基于Direct3D技术的应用程序开发包DXVHSDK,它可以在虚拟环境中载入、驱动并显示一个或多个三维虚拟人,具有绘制速度快、可靠性高、可扩展性强等优点,能够灵活地驱动虚拟角色完成各种复杂的运动和操作,可以广泛应用于仿真、娱乐、智能人机交互等领域。在DXVHSDK的基础上,还开发了一个可以控制虚拟人运动的原型系统。
引言
随着虚拟人技术由纯粹的理论研究逐渐走向实际应用,它在医学、生物学、军事、航天、体育、汽车、艺术等相关领域发挥越来越重要的作用,人们意识到非常有必要开发一套可以用来驱动虚拟人的应用程序开发包,这样的开发包需要具备两部分功能:
(1)一个或多个虚拟人的载入及运动控制功能。这一功能不仅支持用户在一般虚拟环境中载人一个或多个虚拟人,同时能够操纵或驱动它们完成各种复杂的动作。
(2)快速、逼真的三维虚拟人绘制及显示功能。由于虚拟人具有极其复杂的拓扑结构和非常细微的纹理细节,因此必须克服可能引起的绘制速度缓慢,显示效果失真等现象。
国内外很多科研机构及公司利用自己的三维虚拟人运动及显示技术开发了一些非常实用的系统,如:美国的宾夕法尼亚大学设计的JACK{;英国的诺丁汉大学设计的Sammie;克莱斯勒汽车公司开发的CybermanI;美国航空航天医学研究实验室开发的Combiman,等等。这些系统都有自己的显示及控制虚拟人运动的方法,它们的模型底层骨架结构也已经相当完善,但在虚拟人的几何外形表示和显示方面投有充分考虑美学方面的因素,逼真度不高,因此这些技术不适用于游戏、娱乐等对人体模型逼真度要求较高的领域。相反,一些电影公司可以制作非常逼真的虚拟角色。如风靡全球的最终幻想”中的虚拟人物的逼真度可以达到相片级,但是这些技术在很大程度上依赖于动画师的工作,效率不高,而且由于没有一个方便的应用程序开发包,这些模型和它们的动作无法嵌人到其他应用系统中去。
由美国BoslouDynamics公司研究开垃的DI。Guy系统综合了以上这些系统的优点,它可以用来在实时虚拟战场环境中嵌人逼真的虚拟士兵,井控制虚拟士兵的动作,以进行一定规模的联合作战仿真训练。但该系统对硬件依赖性较高。需要高性能的专用机器‘能进行虚拟人的显示及控制、因此该项技术的推广存在很多困难。
Direct3D以其强大的绘制引擎、良好的硬件兼容性以及用户友好的编程方式被广泛应用于图形系统,特别是三维游我的开发上。因此,它非常适台于三维虚拟人的显示。
本文在Direct3D技术基础上。结合已有的虚拟人合成技术,提出了一种基于Direct3D的三维虚拟人的运动及显示技术。该技术可以方便地在任何虚拟环境中加入一个或多个虚拟角色。显示并控制其完成各种复杂的运动,它同时具有很高的绘制速度和良好的可扩展性,能够广泛应J=}j于仿真、娱乐、智能人机交互等领域。
2 三维虚拟人
自从计算机于上世纪40年代诞生以来,它已经由单一的计算工具变成了人们工作、通讯、娱乐的平台,人们甚至渴望能在计算机里面“造”出可走路、吃饭、思考,能与人交流的人”来。虚拟人技术由此诞生了。
虚拟人技术研究的是在计算机空间中入的几何特性与行为特性的表示J。虚拟人的应用领域极其广泛,包括:虚拟主持人、三维游戏、电影合成、军事仿真、体育训练等。图1分别展示r虚拟主持几、虚拟士兵和虚拟运动员。
图1 虚拟人模型
2.1 人体建模
国际上的虚拟人建摸方法主要有棒模型、表面模型与体模型三种。本文采用目前主流的表面模型建模方法和自定义的人体建模标准C%q-IB(ChineseVirtua【HumanPodv1【8。表面模型将人体分成骨架层与部位层,部位层位于骨架层之上。这一分层建模方法符合人伴拓扑结构,可更精确地表述人体的信息。同时,通过调节骨架层各关节点的位置可以驱动上最的部位层做相应的变化,可以比较方便地实现虚拟人的运动控制。此外+这种分层的结陶还可支持不同的绘制方式(骨架绘制或部位绘制)。
人体建模标准CVHB兼容H—Anim,MPEG等相关标准。其定义的坐标系如下:坐标原点位于地面上虚拟人的两脚正中间,X轴方向为指向虚拟人左边的方向。y轴方向为指向虚拟人头顶的方向,Z轴方向为虚拟人面朝的方向I。CVHB定义的人体拓扑呈树状结构,其树根为人体重心,耐的内部结点为骨架层上的人体各关节点(如肩关节、肘关节等),共77个,树的外部结点为部位层上的人体备部位(如头部、胸部等),共53个。每一个部位都能绕着其父关节点在不同的自由度上旋转,在CVHB中,定义的人体有1I7个这样的自由度。
2.2 人体运动显示
除虚拟人模型外,还需载人相关人体运动数据。运动数据提供的是陵运动状态下每一时刻人体骨架的关节角度信息。在运动数据_拽取方面。常月j的方法主要有:关键帧方法、逆运动学方法动力学方法、过程方法与运动捕获方法。本文将以运动捕获方法获取的数据为例。
得到了根据CVHB模型标准建模的虚拟人模型数据发由Vicon设备得到的虚拟人的运动数据之后,下一步就需要显示虚拟人r。我们使用的是基于Direct3D的显示方法,具体方法屉将虚拟人体各个部位的模型文件利用3DSMAX的第三方插件PandaDXExport分别导成Direct3D能识别的。X格式,而骨架文件则使用。wrl脚本文件。这种将虚拟人不同层次的数据以不同的文件格式存取的方法好处是可以充分利用Direct3D的绘制优势,将部位层这样需要大规模绘制的数据交给专门用来绘制大场景的IMESH接口绘制,以达到提高绘制速度,降低系统复杂性的目的,而对于骨架层来说,使用普通的顶点绘制方式就可以在充分保证不会丢失人体骨架拓扑信息的前提下,很好地满足对于绘制速度的需求。
3 基于D3D的三维虚拟人的运动及显示开发包(DXVHSDK)
3.1总体介绍
DXVHSDK是一个虚拟人运动及显示开发包,它主要负责虚拟人几何数据及运动数据的管理,并提供显示虚拟人及控制虚拟人运动的接口。若要显示虚拟人,只需给开发包提供一个支持Direct3D的设备接口,通过调用开发包的绘制函数,开发包就可以自动在该设备中绘制出虚拟人了。若要控制虚拟人的运动,只需给开发包提供虚拟人在不同运动状态下各关节的自由度值,不同的关节自由度对应了不同的虚拟人姿态。
DXVHSDK由数据管理层与虚拟人显示层两层构成,其结构如图2所示。2DXVHSDK框架数据管理层与虚拟人显示层之间只通过虚拟人各关节及部位的数据进行耦合,互相并无干扰,这样可以充分保证各层之间的独立性。
图2 DXVHSDK 框 架
3.2 数据管理层
数据管理层负责虚拟人的骨架及部位数据的管理。因为本层不涉及虚拟人的显示,所以并不需要考虑复杂的坐标变换。本层的难点主要是如何设计一个便于修改同时又符合人体拓扑的数据结构。
本层主要记录的是虚拟人77个关节以及53个部位的几何信息。由于各关节存在父子关系,而一个父关节往往有多个子关节,同时,每一个部位总是附着在某一个关节上,如图3所示。因此,其数据结构符合树型结构。
图3 关节部位拓扑概念图
本层通过调用加载函数首先从模型骨架文件中读取虚拟人的骨架信息及各部位文件的位置。这样,若要显示虚拟人,只需要将这些信息交给上层的显示模块,再由上层的显示模块读取各部位的顶点细节数据,进行绘制即可。
根据我们的虚拟人建模标准,虚拟人共有77个关节,累计ll7个自由度。这些自由度表达了虚拟人各关节部位所处的状态。为了实现虚拟人的运动控制,本层提供了更改这些关节自由度值的接口。
若要显示不同姿态的虚拟人,只需更改其相应关节上的自由度值,当上层执行显示命令的时候,显示函数会将各个部位绕着其父关节点做相应自由度上的旋转,则显示出不同姿态的虚拟人。
3.3 虚拟人显示层
虚拟人显示层主要负责虚拟人的显示。因此,它需要得到Direct3D设备的接口。通过这样的接E1上层应用程序可以创建一个虚拟环境,显示虚拟人也需要使用该接口进行一些坐标变换及绘制的操作。因此,我们将该接口作为参数传递给虚拟人显示层。
由于用户对于虚拟人的显示方式有不同要求,因此本层共提供三种显示方式,分别为:Simp(只显示各关节点与连结骨骼)方式;Mesh(以网格方式显示身体各部位)方式;Face(以面的方式显示身体各部位)7y式。Simp方式对应于虚拟人的骨架层,Mesh与Face方式对应于虚拟人的部位层。因此,出于效率方面的考虑,对应于虚拟人的不同层次,我们使用了不同的绘制方式,如图4所示。
图4不同显不方式下的绘制方法
由于Direct3D中的IMESH接口有自己的绘制函数,方便且高效。因此,我们搭建了一个CMesh类,每个CMesh类封装了一个IMESH接口。这样,我们将每个部位的顶点数据都封装成一个CMesh对象,其好处是可以利用IMESH自己的绘制函数,避免了使用复杂的顶点绘制引擎;并且IMESH接口的绘制函数经过优化设计,效率较高。因此,这种设计既方便了操作,又提高了效率。
然而如果将骨架也做成一个CMesh对象进行绘制的话,无法表示虚拟人各关节部位的拓扑结构。因此,对于Simp显示方式,我们还是使用顶点绘制引擎进行绘制。
只是单纯的绘制出人体的各个部位是无法表示虚拟人的运动的。因此,我们首先得到各个部位的父关节点位置,然后将部位绕着其父关节点做相应自由度上的旋转,再在新位置绘制出该部位。以这种方法依次将人体的53个部位绘制出来,就可显示出整个虚拟人。
图5图元绕定点旋转的方法
如图5所示,一个图元绕着某一个定点旋转的方法是:
(1) 平移图元,使该定点移到坐标原点。
(2) 旋转该图元。
(3)平移图元,使该定点移回原位。
然而仅仅做这样的坐标变换就直接绘制是远远不够的。这是因为我们的建模坐标系是右手坐标系,而Direct3D的坐标系是左手坐标系,这就意味着模型中的z坐标值与Direct3D中的正好相反,也就是说,原来正对观察者的虚拟人将会背对着观察者,因此我们在进行虚拟人的绘制之前,需要将虚拟人绕着y轴旋转180。但是,这样得到的还只是虚拟人模型的水平镜像,我们还必须再做一次变换,将虚拟人的X坐标值取反,如图6所示。
图6绘制前需要做的坐标系变换
完成了以上这些坐标变换之后,就可以利用Direct3D的设备接口进行虚拟人绘制。当要表示不同姿态的虚拟人时,只需重新依次绘制整个人体的53个部位,此时由于各部位的关节自由度已发生改变,各部位将会旋转到合适的位置上。
我们自己定义了一种表示虚拟人动作的文件格式,文件中存储了人体在不同时刻各个部位的关节自由度值,这些数据是通过Vicon设备得到的。这样,我们就可以通过一个动作文件驱动虚拟人执行相应的动作。
4 应用实例
基于DXVHSDK,我们开发了一个原型系统VH—Player,其功能是创建一个虚拟现实世界,并在其中添加三维虚拟人,通过加载人体运动数据,驱动虚拟人在环境中完成相应的运动。VH—Player的开发是基于普通的PC机,开发平台为VisualC++6。0与DirectX,它可以运行在安装了wINDOWS操作系统的普通PC机上。
本系统共分三个模块:虚拟人显示模块、虚拟人运动模块与虚拟场景管理模块;其结构框图如图7所示。
图7VH—Player结构框图
在使用本原型系统时,用户可以1Ju载虚拟人。并通过鼠标控制观察视点的位置,适r以没置虚拟人的显示方式(分Simp、Mesh与Faf2三种)。此外,VHPlayer还提供虚拟场景背景的没置地板纹理选择虚拟场景灯光控制等功能。图8所示为VH—Player运行时的效果图;图9所示为VH—Player系统中虚拟人的行走序列。
图8 VH—Player效果图
图9 VH—Player系统中虚拟人的行走序列
5 结论
基于Direct3D的三维虚拟人运动嵌显示开发包DXVHSDK可以广泛应用于仿真、蛙乐智能人机交互等领域。它具有功能强大,使用打便,可扩展性强等优电。
今旨我们将继续完善DXVHSDK功能。主要包括以F方面:
(1)通过引入细节算法来改善虚拟人运动娃示的逼真度,即在人的关节旋转的时候,丧蚬it;人体棚J蕾部位内部的变化(如弯动手臂ur陋手臂叭肉突起等)
(2)通过加人人上智能领域的知|只来扩充虚拟人的智能主体行为。
参考文献:(略)
上一篇:院士讲3D打印 李克强:不用赶时间,敞开讲[ 08-24 ]
下一篇:新一代北斗卫星,数字地球尽收眼底[ 09-07 ]