张振伟 刘党辉 苏永芝 张冲
中国人民解放军装备学院,北京 101416
Vega Prime是美国MultiGen-Paradigm公司开发的支持面向对象技术的实时仿真渲染驱动引擎[1],它基于Vega Scene Graph(VSG,MPI公司先进的跨平台场景图形API,底层OpenGL),同时包括LynX Prime GUI(用户图形界面)工具,让用户既可以用图形化的工具进行快速配置,又可以用底层场景图形API来进行应用特定功能的创建。Vega Prime还设计了多种功能增强模块,很容易满足特殊模拟要求,更进一步提升了应用开发的效率和适用性,使其在虚拟视景仿真中得到广泛应用。
本文结合基于Vega Prime的视景仿真系统开发框架和场景显示框架,针对仿真系统中运动物体在场景内实时渲染的真实感需求,研究了运动真实感的关键技术,包括DOF技术、动画纹理技术和粒子系统,并将文章研究的相关技术应用到了实践。
利用Vega Prime开发视景仿真一般有三种模式:一是使用Vega Prime的LynX Prime图形用户界面配置仿真系统,它只适用于简单的、对交互性要求不高的小系统;二是完全运用Vega Prime提供的API函数进行程序开发,可研发出复杂的、对交互性要求高的系统,但编程复杂;三是综合前两种模式进行系统的开发,首先通过LynX Prime建立场景配置文件(ACF文件),再将文件中配置的属性与底层API调用结合起来,这种模式将易用的工具和高级仿真功能有效地结合起来,帮助用户高效地、准确地开发实时三维应用,是最常用的设计模式。
基于Vega Prime的视景仿真主要包括三部分:三维仿真模型建立、LynX Prime图形界面设计和视景仿真程序设计[2]。三维仿真模型主要包括Multigen Creator建立的视景模型库和Creator Terrain Studio生成的大场景地形模型库;LynX Prime图形界面设计主要包括基本环境(如仿真时间、能见度和经纬度等)、模型初始位置、常用特效(如云、雾、雨雪、火等)和大场景应用等内容;视景仿真程序设计完成整个仿真过程,为用户提供实时流畅的视景仿真结果。本视景仿真设计采用上文叙述的第三种模式,程序设计的主要内容包括实时驱动算法实现、实时仿真数据处理、层次细节(LOD)、物体运动和视点控制等内容。
系统初始化完成之后,Vega Prime调用define( )函数加载配置的相应ACF文件,对系统进行初始配置,然后对系统和各个模块按照仿真的需求进行配置,建立处理消息的响应函数,如键盘输入响应、鼠标响应、OpenGL作图通道回调函数等,之后进入场景绘制主循环按照配置的功能进行渲染,渲染完成后退出循环,结束程序[3]。场景显示框架如图1所示。
图1 Vega Prime场景显示框架
在Vega Prime的场景绘制过程中[4],每一帧都是以beginFrame( )函数开始的,应用程序服务管理模块(vsServiceMgr)向其他服务模块(vsService,包括vpIsectorService、vsPipeline等模块)发送帧开始消息,各服务模块收到消息后进行仿真时间存储、释放占用的线程等,继而服务管理模块再发送场景图同步消息,如果某一服务是需要对场景图进行复制的(如vsPipeline管理的CULL,DRAW服务),该服务所复制的场景图将于主场景图进行同步。然后服务管理器再发送非关键延迟处理消息,服务器就可以对基于APP主线程绘制的内容进行并行操作了。此时执行相应的场景绘制和显示的操作命令;最后以endFrame( )结束该帧,结束本次服务,系统进入下一个帧循环。
物体的运动行为主要包括两个方面,一是物体及物体内部零部件运动属性的改变,如汽车速度的变化及汽车转弯时车轮旋转状态的变化等;二是运动物体与其他物体发生碰撞后外形以及状态的改变(即碰撞响应),如汽车撞到建筑物后车身变形甚至发生爆炸。
基于Vega Prime开发的视景仿真系统展现物体的运动行为主要应用以下几种技术:DOF、纹理动画和粒子系统,合称为运动真实感仿真技术。
基于Vega Prime视景仿真场景由大量三维模型(FLT模型)组成,包括静止实体和运动实体,如山坡、树木、房屋等静态模型,又如车辆、机械部件等运动模型。对静止实体的描述只需设定它在仿真系统中的位姿,即位置(x,y,z)、姿态(h,p,r)和伸缩量(scaleX,scaleY, scaleZ)即可;而运动实体则较为复杂,这类模型在场景中一般包含子节点的相对运动,如运动中的车辆,其车轮相对车的质心有一个相对运动。对于此类模型中子节点的相对运动,如果也使用Vega Prime提供的基于单个模型的运动模式(Motion Mode)或是路径导航(Path Navigator),在程序中实现节点模型的运动控制是很难的。这种情况下,最好的解决办法就是使用DOF技术。
DOF定义的是FLT模型中节点相对其父节点的相对运动。使用DOF技术首先要针对选定的DOF节点定义局部坐标系,然后设置在局部坐标系下节点内物体的基本运动参数,共有九种基本运动:沿X、Y、Z轴的位移;绕X、Y、Z轴的旋转和沿X、Y、Z轴的缩放。理论上来说,通过这九种基本运动的组合可以实现任意复杂的运动形式,但一般DOF只用于设定简单常见的物理运动,如直线匀速、绕某轴旋转等。
Creator建立FLT模型时可以很方便的建立DOF节点(DOF Node),但基于Vega Prime开发的视景仿真系统无法直接对模型中的DOF节点进行渲染。所以,DOF技术应用于某个模型的子节点时,需要结合Vega Prime的API函数。首先通过vpObject::find(“object”)[4]绑定运动模型,object是在LynX Prime中加载的含有所需DOF节点的运动模型;然后利用find_named(“DOFnode”)函数对"o b j e c t"模型中的节点进行遍历查找;一旦查找到我们需要的“DOFnode”后,即可通过setTranslate,setRotate和setScale设定DOF节点运动属性,即九种基本运动及其组合,并利用setConstraint函数限制节点的运动范围,从而实现节点的相对运动。使用流程如图2所示。
图2 DOF使用流程
对于运动精细度要求较高的运动模型,应用DOF技术并不能满足虚拟仿真沉浸感的需求,如随风飘动的红旗、流动的河水以及车辆行驶时胎纹的变化等场景。此时,纹理动画(Texture Animation)技术可以较好地解决这些问题。
纹理动画技术是将复杂的物体运动用纹理代替,用一系列物体运动纹理呈现难以用运动模型描述的粒子或是粒子群的运动,主要有两种实现方法:
一是利用建模技术,在FLT模型中将物体的运动转化为在指定面片上播放纹理。此方法的关键是纹理图片的获取。使用时,根据动画纹理图片的数量复制选中的面片节点(Face Node),依次进入这些面片的属性页,分别把纹理按照事件发生的顺序映射到面片上,如图3所示。
二是自定义渲染策略。在需要展现运动细节的模型上定义渲染几何体,并根据渲染策略完成运动效果的渲染。本文中模拟转运卡车行驶时胎纹变化使用的就是这种方法。
此方法同样基于对Vega Prime 帧循环的控制,需要首先通过vpObject::find(“object”)绑定运动模型,然后对模型中满足渲染特性的节点遍历搜索,针对搜索
图3 纹理映射
到的每一个几何体应用渲染策略。这样应用于模型几何体上的纹理根据实际运动被二次渲染,可以得到逼真的动态效果。绑定渲染策略的方法如下:
其中,cit是满足运动特性的节点,geometry是经搜索得到的符合要求的渲染几何体,m_strategy是针对汽车运动模型设计的渲染策略。
通过成千上万个不规则的、随机分布的、每时每刻在不断地运动和改变形态的粒子的集合,表现景物的整体形态和特征以及动态变化,可以模拟云、雾、雨、雪、雷电等自然现象和烟、火焰、爆炸等特殊场景[5]。Vega Prime以粒子系统为原型来模拟不规则几何形状的特殊形体,是一种很重要的展现运动真实感的技术。在仿真中实现粒子的特殊效果主要控制粒子以下五个方面;粒子产生、粒子属性、粒子运动、粒子消亡和粒子渲染。其中,粒子运动变化多样,也最难于控制,它用于描述粒子在其生命周期内的变化规律,包括粒子时间特性和粒子速度特性两部分。
粒子时间特性包括粒子大小随时间的变化和粒子颜色随时间的变化,它们用于控制粒子自身属性变化。
粒子速度特性包括粒子大小随速度的变化、粒子速度和方向、随机风的速度与方向、球形粒子速度和随机粒子速度。这些特性都是时间的函数[6],实际上表现了粒子速度与时间的关系,即粒子所受力的作用。粒子速度用于表现物体承受的主动力,如动力、牵引力等;风主要表现所受主要外力的作用,并不仅局限于风力,还可以是重力、摩擦力等;球形粒子速度表现粒子沿半径方向向外扩张力或向内收缩力;随机粒子速度表现随机外力的作用。
针对航天发射活动中可能出现的推进剂泄漏事故,模拟泄露产生烟雾,并随风飘远的效果。仿真烟雾行为,其基础是研究与烟雾行为相关的因素。
第一个因素是烟雾泄露的喷射力。当烟雾以一定泄露速度进入空气时,由于烟雾与空气的摩擦,烟雾受到空气的剪切力作用而产生旋转变形,使得烟雾与空气迅速混合。第二个因素是空气浮力。烟雾粒子受到浮力作用向上运动,且温度高的部分受浮力大,上升速度快。第三个因素是风的作用。烟雾进入空气一段时间后,风力是烟雾粒子受到的主要作用力,当烟雾受到风的吹动时,烟雾在水平方向以接近风速的速度移动。第四个因素是温度。温度越高,烟雾粒子的热运动越剧烈,烟雾颜色就越深。
航天发射任务具有高风险、高费用、不可逆等特点[7]。因此,严密地培训航天发射任务组织指挥人员显得越发重要。利用虚拟仿真技术建立仿真训练系统,不仅可以模拟实际发射任务的组织指挥和操作,还可以模拟典型事件进行对抗训练,提高训练效果。
基于Windows XP操作系统和VisualC++.Net2003开发环境,采用Vega Prime设计开发航天发射仿真训练系统,模拟航天发射场发射活动和一些典型事件及其相应的组织指挥任务,主要包括火箭箭体的转运、吊装、火箭发射、推进剂泄露事故、紧急关机事故和厂房起火事故等仿真场景。
模拟火箭箭体转运。运用DOF技术,对吊车的吊杆和吊钩分别设定局部坐标系,通过吊杆的转动和伸缩,吊钩的伸缩,将火箭箭体从火车车厢吊转到卡车上(见图5)。模拟推进器泄露事故。综合考虑影响烟雾行为的四种因素,泄露烟雾在产生初期颜色较深,空气浮力占主导地位,向上运动的趋势更加明显,飘散一段时间后主要受风力影响,同时运动随机性加强,表现为向更远处趋向水平飘散,仿真效果见图5。
图4 火箭箭体吊转模拟
图5 推进剂泄露烟雾模拟
随着虚拟仿真技术的不断发展,视景仿真系统对虚拟模型的视觉效果和运动真实性的要求越来越高,本文结合基于Vega Prime的视景仿真系统开发框架和场景显示框架,研究了展现物体运动真实感的关键技术,包括DOF技术、动画纹理技术和粒子系统,这些技术对提高视景仿真系统物体运动真实感具有通用性和实用性,有一定的参考价值。
[1]Multigen-Paradigm lnc. Vega prime programmer’s guide (version 2.0)[M]. Dallas: Multigen Paradigm lnc, 2005
[2]褚彦均, 唐硕. 基于Vega Prime的通用视景仿真系统研究[J].计算机工程与设计, 2009, 30(17):4104-4107
[3]周剑勇, 王跃峰. 系统仿真技术及其应用学术会议论文集[C].太原:[出版者不详],2008
[4]Multigen-Paradigm lnc. Vega Prime Reference Guide (version 2.0)[M].Dallas: Multigen Paradigm lnc, 2005
[5]翟兆建, 蔡志勇, 赵红军. 基于Vega Prime的灭火飞机投水特效模拟[J]. 计算机应用与软件, 2012,4, 29(4):260-262
[6]郭齐胜, 董志明. 战场环境仿真[M]. 北京: 国防工业出版社,2005
[7]刘培杰. 航天发射训练系统建模技术应用研究[D]. 北京: 装备学院, 2011