我的订单|我的收藏|我的商城|帮助中心|返回首页
虚拟现实新闻>VR>行业资讯>行业知识

基于DI-Guy的人体视景仿真研究与应用

文章来源:第三维度 作者: 发布时间:2012年03月29日 点击数: 字号:

    来源:第三维度
    作者:方琦峰 康凤举  王宝龙 王娇艳

    摘要:本文分析了目前几种典型的虚拟人系统,着重研究了基于DI-Guy的人体视景仿真技术,讨论了虚拟人的开发环境,分析了两种虚拟人生成方法(ACF配置实现及API编程实现),论述了虚拟人实时运动中的若干问题;着重介绍了虚拟人白定义动作实时驱动方法,克服了用动作库中成型动作驱动的缺点,提高了人体视景仿真的真实性;给出了仓库调度仿真系统应用范例。结果表明,包含多个人体实体的虚拟场景在HP6200上的运行帧频大于28帧/秒,而且人体动静态效果逼真,满足一般工程应用需求。

    1 引言

    随着虚拟人技术由纯粹的理论研究逐渐走向实际应用,它在医学、生物学、军事、航天等领域发挥越来越重要的作用,尤其是在载人航天、核反应堆维护、包括新武器系统在内的大型产品的设计研制、多兵种军事训练与演练、医疗手术的模拟与训练中。

    国内外很多科研机构及公司利用自己的三维虚拟人运动及显示技术开发了诸多系统,如美国的宾夕法尼亚大学设计的JACKD3;英国的诺丁汉大学设计的a~ mid ;克莱斯勒汽车公司开发的CybermanC ;美国航空航天医学研究实验室开发的Corabimanc妇等。上述系统都有自己的显示及控制虚拟人运动的方法,它们的模型底层结构相当完善,但虚拟人逼真度不高。相反,一些电影公司可以制作非常逼真的虚拟角色,其中的虚拟人物的逼真度可以达到相片级,但制作周期长、效率低下;而且,其中的模型和动作无法应用到其他应用系统中去。

    由美国波士顿]~]namlcs公司研究开发的DFGuy系统综合了以上系统的优点,它可以用来在实时虚拟战场环境中嵌入逼真的虚拟人,每个虚拟人可以做逼真运动,可以响应简单命令,并在引导下在环境中漫游,完成一种人体行为到另一种人体行为的自然逼真转换,由它开发的虚拟人可以与虚拟环境中的其他角色实时交互。同时,DI-Guy是基于DIS/HLA实现的,用DI-Guy开发的虚拟人可以加入到符合上述标准的分布交互仿真等虚拟战场环境中。本文给出基于此工具的系统开发方法。

    2 开发环境介绍

    Vega Prime是美国Multigen-Paradigm公司推出的先进的软件环境,主要用于实时视景仿真、声音仿真和科学计算可视化等领域。Vega Prime在提供高级仿真功能的同时,还具有简单易用的优点,使用户能快速准确地开发出合乎要求的视景仿真应用程序。Vega Prime是有效、快速、准确的视景仿真应用开发工具。

    Lynx Prime是用来设定和预览Vega Prime应用程序的图形式用户界面。Lynx Prime图形界面设计主要包括基本环境设置、模型初始位置(主要指精细模型在大场景模型中的定位)、常用特效设置(如云、雾、雨、火和声效等)和大场景应用设置等内容。

    DI=Guy for Vega Prime把DI Guy以模块的形式集成到Vega Prime的开发环境中,从而可以利用Lynx Prime快速地将虚拟人加入到场景中,并对人物进行动作控制。

    3 基于DI-Guy的视景仿真方法

    在Visual C++下开发的Vega Prime应用程序可以将Lynx Prime界面生成的ACF文件读入,生成初始视景仿真环境。DI Guy面板是I.ynx Prime图形界面的一部分,在该面板中可以指定DI-Guy人物类型、着装、初始动作以及位置等内容。用ACF文件生成的虚拟人的方法简单,但人物不容易控制,与虚拟环境交互性差,一般用作虚拟环境中的“景物人”(即不与环境进行交互)。图1为通过ACF生成的带有虚拟人的简单场景。

基于DI-Guy的人体视景仿真研究与应用
图1 用ACF配置的简单场景

    利用API可以动态地添加、删除虚拟人,并根据需要灵活定义人物模型的类型、动作、装备等,使人物可以对虚拟场景中的事件和用户输入有响应,达到交互目的。下面是动态生成人物、加入虚拟场景并设置其初始状态的程序:diguyScenario scenario= NUI I :

    ddiguyScenario scenario= NUII :
    diguyCharacter *character1一NUI ;
    scenario = diguy_create=scenario();
    character1-scenario->create=character("character1","fdc",”r)_Handler”);//生成人物并选择人物类型着装
    scenario->set= graphics= attach= ptr(vgGetScene(0));/*力口入到虚拟场景中*/
    characterl->set= position(-0.Of,10.Of,0.Of);/*设置人物位置,转向*/ .
    characterl->set=orientation(90.Of,0.Of,0.Of);
    characterl-> force action(”default”,DIGUY DEFAUITFI ()AT,0,0.Of);//设置人物动作

    4 DI-Guy实时视景中若干问题

    4.1 人物LOD设置

    每一个在Vega Prime视景环境中运动的虚拟人都对应于DI—Guy模型库中一个OpenFlight(.fit)格式的人物形体模型。每个人体模型都由大量的多边形面按一定层次结构组织起来。多边形面的数量直接影响计算机的运算量从而影响虚拟场景的实时性。合理地确定虚拟人物几何体的LOD(I evel Of Detail)范围十分必要。我们可以通过setⅢlod—ranges(float*ranges)函数来设置人物的LOD。图2是DI Guy中士兵模型l0级LOD及相应面数。

基于DI-Guy的人体视景仿真研究与应用
图2 士兵10级LOD及面数

    4.2 自定义人物模型

    D1一Guy包含了大约i00个照片级人物的模型,包括八种士兵和一系列专业人员,如飞行指挥员、带防毒面具的应急人员、警察等,其它还有很多普通男性和女性市民l5]。

    DI—Guy使用行业标准的OpenFlight模型,从而可以利用建模工具建立修改所需引用的人体模型并添加到人物库中。

    人体是由200多个关节组成的复杂实体,如手臂、头、身躯、腿及脚等,而手臂也有很多组成部分,由后臂、前臂、手掌组成。在虚拟环境的几何建模中,通常采用层次建模方法以对人体模型有一个规范而详尽的定义。利用树形结构表示实体各个组成部分即可表示成分层结构,分层结构通过子对象及其之间的联结表达,表现各子对象间拓扑特性。树根为人体重心、树的内部结点为骨架层上的人体各关节点(如肩关节、肘关节等),树的外部结点为部位层上的人体各部位(如头部、胸部等)。用Muhigen Creator建模工具在树形结构的基础上采用自底向上流程进行人体外形建模,将人体模型及纹理文件放至D1~Guy安装目录下即完成了自定义人体模型的添加。

    4.3 实时动作驱动

    DI Guy先进的运动引擎使人物的一举一动都十分逼真,它的动作库拥有2 000多个基本动作及其过渡动作,但在实际的应用中这些动作并不能满足要求,而且这些是固化的动作,在虚拟场景中虚拟人只能完成简单、既定的操作,无法实现复杂操作动作和人物的实时驱动控制,即只能实现训练的演示而无法实现真正意义上的训练,从而极大地限制了虚拟人在各种实时训练系统中的应用。

    DI-Guy提供了可以实现对虚拟人体物理结构(全身关节)进行控制的API,克服了固化动作的缺点,将DI—Guy从单纯的演示系统中解放出来。DI—Guy虚拟人由l4个基本关节构成,其基本关节如图3所示,其中包括颈关节、左右肩关节、肘关节、腕关节、腰关节、胯关节、膝关节、踝关节。

    另外,针对特殊人员提供特殊的关节控制,如飞行指挥员人物模型提供对手指关节的控制以实现特殊手势的表达。

    DI—Guy提供的关节的实质是建立在OpenFlight格式人体模型文件基础上的DOF(Degree Of Freedom,简称IX)F)节点,关节的运动即是提供各自由度方位数据来驱动各节点的运动。DI—Guy人体的14个关节均为3自由度DOF,即关节运动只能绕X、y、Z轴旋转运动。例如,图4为人体左肩关节坐标示意,其中红、绿、蓝圈代表绕x、y、z轴的自由度。借助于如Flock of Birds等先进传感器设备,配合数据衣、数据手套捕获人体各关键关节的运动参数,传递给虚拟人相应关节以实时驱动虚拟人身体的运动。

基于DI-Guy的人体视景仿真研究与应用
图3 虚拟人体基本关节结构图

基于DI-Guy的人体视景仿真研究与应用
图4 虚拟人体左肩关节坐标示意

    实时动作驱动具体编程实现如下:

    DIGuyCharcterPoseOverride pose_override— Null;//创建DI-Guy动作重载变量
    float pose array=Null;//动作数组
    float*weghts_array=Null;//动作权,控制人体运动速度
    int backrzjndex=1;//后背关节的z方向
    int back=rxindex=1;//后背关节的x方向
    .....//人体其它关节

    Pos_override= characterC>create pose=override();//获取人物的动作重载

    Backrz—index— pose—override-> get—var—index(“q.backrz”);//获取后背关节
    Pose_arrayl,Back=rz_index]一sin(t);//自定义关节运动方程,可以改成接收自设备的数据
    .....//人体其它关节驱动

    Pose_override-> set  pose_in_radians(pos_array,weights_array,0.O);//驱动人物

    5 应用范例

    基于DI-Guy,我们开发了一个仓库调运系统。该系统旨在构建一个分布式虚拟样机系统,将各工作台及各仿真陪试设备模拟器集成在一起。通过进行仓库调度作业过程的仿真,评估实验过程及实验结果,对原型系统的设计作出评估和优化设计参考。该系统可以看作是进行仓库调度作业过程的仿真实验的平台或工具。

    系统由五个节点组成:两名身着数据衣及显示头盔的现场指挥人员、两名吊车操作员、一名现场调度员。现场指挥员以语音的形式指挥现场指挥人员凋运相应的货物,而两名现场指挥员通过头盔显示目视,以手势动作指挥相应吊车操作员进行货物调运操作,两名吊车操作员通过观察指挥员手势及虚拟场景的视景显示来完成货物调运。系统的构成如图5所示。

基于DI-Guy的人体视景仿真研究与应用
图5 仓库调度仿真系统构成

    系统为基于HI A的分布交互仿真系统,各个节点通过pRti进行交互,借助Vega Prime生成虚拟场景,并利用其提供的接口加入两个虚拟人及多个“景物人”。设置现场指挥人员类型为fdc,分别为两个虚拟人选取不同颜色服装并设置初始动作为站立。在仿真过程中,两名身着数据衣的仿真实验人员做出相应指挥动作(如升起吊车机器手臂),通过数据衣传回人体各个关键关节的姿态数据,经过坐标转换后实时驱动虚拟人运动。图6、图7是仿真过程截图,图上方帧频分别为33帧/秒和37帧/秒,满足工程应用要求。

    项目的开发是基于HP6200图形工作站,开发平台为Visual C++.Net、Vega Prime 2.0和DI—Guy 7.0.2。

基于DI-Guy的人体视景仿真研究与应用
图6 驾驶员视点                  图7 旁观者视点截图

    6 结束语

    基于DI—Guy的三维虚拟人运动及显示开发包可以广泛应用于仿真等领域,它具有功能强大、使用方便、可扩展性强等优点。应用表明,基于DI Guy的开发方法是工程开发的首选方法。随着工具的完善以及应用力度的加大,需要进一步解决以下技术问题:(1)底层开发如何加人到D卜Guy应用中;(2)如何在程序中实现对人物表情的灵活控制,并实现仪器的虚拟操作。

    参考文献:

    [1] Badler N I,Phillips c B,Webber B I Simulating Humans:Computer Graphics,Animation,and Control[M].London:Oxford University Press,1999.

    [2] Kingsley E C,Schofield N A,Sammie C K.A Computer Aidfor Man Mchine Modeling rJ].Computer Graphics,1981,15

    [3]:163-169.[33 Blakeley F^,L CYBERMAN[M].De troit,Mich:Chrysler—Corp,1980.

    [4] Bapu P,Evans S,McDaniel K P_User’s Guide for CombimanPrograms[M].Version 4.Dayton,Ohio:University ofDayton Research Institute,1980.

    [5] 王兆其.虚拟人合成研究综述[J].中国科学院研究生院学报,2000,17(2):89-98.

  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料