基于三维立体技术的虚拟灭火系统
2015-03-07罗月童朱学武李彦霄
罗月童, 朱学武, 黄 文, 李彦霄, 沙 宇
(合肥工业大学 计算机与信息学院,安徽 合肥 230009)
在现实生活中,火灾时有发生,为了增强人们的防火意识,需要加强消防意识的普及工作。在现实中进行防火演习时通常是在一片空旷的环境下生一堆火,然后用各种不同的灭火器针对不同的火源进行灭火示范和练习。这种传统的防火演习不但会造成环境污染、资源浪费,而且如果使用不当还会造成不必要的伤害。
为了解决这种真实消防演练的弊端,同时又要达到消防训练的目的,虚拟灭火已成为热点话题。现在已有很多人员及机构从事相关研究,比如中国电子科技集团第三十八研究所的模拟消防演练系统、北京超互动科技有限公司的模拟报警演练系统等,这些系统解决了现实中消防培训所带来的弊端,一定程度上达到了消防训练的目的,但是此类系统都是基于二维场景设计,使用者在使用过程中没有很好的沉浸感。为了让使用者有更强烈的沉浸感。最大限度地模拟消防训练氛围,本文介绍了一种基于三维立体技术的虚拟灭火系统。
1 系统框架设计
虚拟灭火系统采用了以计算机技术为核心的现代高科技,能够生成逼真的视觉、听觉一体化的特定虚拟场景,再使用被动立体投影的方式将虚拟场景构建成三维效果,接着通过交互的方式与构建出的虚拟场景进行交互,让使用者产生身临其境的感觉。
依据虚拟灭火系统的功能需求做出功能设计规划,如图1所示。系统以多个三维场景模型为基础,逐步添加火焰生成、灭火交互、3D渲染以及立体等模块,共同构成虚拟灭火系统。
图1 功能设计规划
2 功能模块设计实现
2.1 三维场景搭建
虚拟现实[1]是一种基于模型的活动,在虚拟训练、漫游等领域广泛应用[2],它包括建立模型、对模型进行试验、对试验所产生的模型行为进行分析处理。所以三维场景几何模型是三维虚拟灭火系统的构建基础,三维场景搭建是系统的基本要求,也是其他核心功能模块的基础。
2.1.1 三维场景建模
为了给用户提供良好的体验使其感觉身临其境,在进行三维场景建模[3]时就要求能够将场景逼真地显示出来,这就在技术上提出了很高的要求。为了能够达到这一效果,必须在场景模型搭建过程中考虑场景中每个物体的几何特性、物体之间的空间位置关系,以及每个物体特有的材质、纹理、颜色和光照效果。对于物体的几何特性,可以通过给每个物体抽象出一个包围盒,在通过给包围盒设置长、宽、高来间接地设置物体的几何特性。在现实生活中,每个物体都处于不同的空间位置,物体与物体之间都有着空间位置关系,所以在进行虚拟场景搭建时,保持相对位置是营造高真实感场景的重要环节。在3DMAX中,可以通过软件中的三视图窗口进行观察和改动,确保场景中的每一个物体都在它应该存在的地方,达到场景布局合理真实的目的,给使用者以真实的感觉。生活中每一个物体都有其特有的属性,比如一个物体是什么材质的、表面是什么样子的、是不是透明的以及反不反光等,根据这些属性能够很容易地辨别出不同的物体。在场景搭建过程中,必须给每个物体设置材质、纹理等属性,以便获得真实感。以上这些都能够在3DMAX中实现,在完成场景建模之后,保存并导出模型的mesh文件。
2.1.2 三维场景渲染
传统3D应用的开发是通过调用API传送几何体信息,再通过API调用来通知GPU进行渲染工作[3],之后的每一帧画面都要进行类似的工作。可以看出,这种渲染方式十分繁琐复杂,将大量时间用在了几何体的操作之中,不利于整体效率的提升。因此,可以采用OGRE渲染引擎进行场景的渲染工作。
面向对象的图形渲染引擎[4](Object-oriented Graphics Rendering Engine,OGRE)三维渲染引擎模型中,使用了场景树管理整个场景的内容。OGRE对底层基本图形的API操作进行了封装,所以不需要对繁琐的图形进行操作,只需要通过场景图接口维护场景结构,节省了很多时间。在OGRE中采用了“场景队列”的方式对场景中的不同部分进行渲染排序。
所谓场景队列就是设置多个有序队列,每个队列都有一个优先级,OGRE在渲染时按照优先级大小进行渲染。三维模型导入[5]OGRE程序后,OGRE就会按照自身的渲染流程对三维模型进行渲染。为了保证渲染效果和渲染速度,在3DSMAX中采用了烘焙技术,就是把需要显示出来的光照等视觉信息事先烘焙成贴图,然后在进行场景渲染时直接把烘焙后的贴图再贴回到场景实体模型上,这样在渲染时就不要计算颜色信息,加快了渲染的速度。
除了眼睛,眉毛的变化也是重要的面部表情之一。眉毛的变化能传达出更多的情感,如生气、惊恐、焦急、狂喜等。例如,声音变得低沉的同时,皱一下眉头,这样就表达出痛苦的意思;声音高昂的同时眉毛上挑,就表达出兴奋。演员可以在台下对着镜子来提升自己面部表情的表现能力。
经过对场景模型的处理和烘焙,得到三维场景的mesh模型文件,本系统使用OgreMAXS-cene插件读取mesh模型。
OgreMAXScene插件能够读取scene文件,而scene文件包含了诸多mesh文件名和mesh文件的位置信息、旋转量信息、缩放信息等,读取scene文件之后,场景中的所有对象都具有初始位置等信息。
读取scene文件的核心代码如下:
m- MAXScene->Load(filename,window,Ogre-MAX::OgreMAXScene::NO-OPTIONS,m-SceneManager);
其中,m-MAXScene为读取scene文件的对象;filename为scene文件名;window为渲染窗口对象。
这种方法实现代码简单,可以大量导入场景,适合于场景中包含大量对象或者场景需要批量导入的情况,所以三维虚拟灭火系统选择使用OgreMAXScene插件批量读取mesh模型。为了更好地达到模拟生活生产的场景,本系统搭建了家庭电器起火、社区垃圾箱起火、工厂设备起火、厨房炉灶起火、生产区起火等多种不同的三维场景用于模拟训练。
2.2 三维火焰效果模拟
为了让使用者在模拟灭火过程中能有更真实的体验,系统对灭火器喷雾效果进行模拟,通过喷雾和火焰之间的交互反应,更真实地模拟出灭火过程。
2.2.1 火焰模拟方法对比
对于火焰等不规则模糊的自然景物模拟,目前主要分为3种,即基于纹理技术的方法、数学物理方法和粒子系统的方法。使用基于N-S方程和纹理映射的火焰模拟方法来实现火焰模拟,简化了外力项的计算并使用纹理映射技术渲染火焰,提高了计算速度,可以实现实时的火焰动画效果。但是目前只是在二维层面上模拟火焰[5]。
相对于数学物理方法和纹理映射的方法,粒子系统总体具有相同的表现规律,个体却随即表现出不同特征的大量显示元素构成的集合[6],在模拟火焰喷雾等场景时,根据模拟场景的特点,设置好粒子的属性,并对众多的粒子进行维护和显示,这在三维场景中都能够得到实现,所以本系统中的三维火焰与灭火器喷雾均采用粒子系统实现,不同的是火焰的粒子系统主要突出显示其不同区域、不同颜色边缘效果的展示。
为此本文设计了2个分别具有颜色衰减器和线性力作用的粒子系统,其工作原理是先初始化粒子,赋予粒子不可变和可变的多种属性,如形状、位置、生命值、衰减速率、速度和加速度、颜色和大小等。在火焰或一定喷雾所经过的区域,按照速率随机地产生粒子,生成的粒子按照自己的运动速度等参数不停地运动,一定时间后,粒子的生命值降为0,说明该粒子生命期已结束,就将该粒子删除,随后生成新粒子。周而复始这个过程,通过众多粒子的合作,就可以模拟相应的效果了。粒子系统的工作流程如图2所示。
图2 粒子系统工作流程
2.2.2 对于粒子系统的改进
在传统三维粒子系统中为了让每一个粒子看上去更象一个个的小火星,可以采用纹理映射技术[7],加上颜色的混色处理,就可以生成较为真实的火焰模型。不同的纹理图案可以产生不同效果的火焰。这种方法虽然可以简单地模拟出火焰的效果,但是由于每个粒子都采用同样的贴图,在多个粒子重叠之后所呈现出来的效果只是相同贴图重叠部分经颜色混合处理后得到的效果,无法表现火焰的具体细节层次,而且火焰的边界是由若干粒子贴图的边界重叠得到的,并不能很好地表现实际火焰的边界。这些都使得由纹理映射技术模拟出的火焰效果不能达到真实火焰的效果。因此采用纹理动画的方式来替代传统粒子系统中的纹理映射。由粒子发生器产生若干个粒子,为每一个粒子贴上一幅不同的纹理贴图,这些纹理贴图都是在火焰场景中一帧一帧截取得到的区域面片,由于每一帧画面都来自于真实的火焰场景,所以火焰的细节层次和边界都是真实的,这样就保证了火焰模拟的真实性。然后将每个粒子的生存周期设置得很短,保证在下一个纹理贴图显示出来之前,上一个贴图已经消失,保证火焰画面的连续性[8]。这样按一帧一帧的顺序连续显示就使得火焰的波动看起来很真实。改进前、后火焰模拟效果如图3所示。
图3 改进前后火焰模拟效果展示
2.3 三维立体显示
设计三维虚拟灭火系统的目的是能通过投影模拟出真实火灾灭火场景,所以需要通过立体显示技术将构建的模型场景立体化显示出来,创造出逼真和更有沉浸感的3D场景,让使用者具有身临其境的感觉,仿佛置身于真实的火灾场景中,以达到更好的灭火培训效果。
立体的视觉原理是由于人类的眼睛相距有一定的距离,所以在观察一个三维物体时,两眼观察到的物体图像之间存在着像差,由于这个像差的存在,人类大脑可以感到一个三维世界的深度立体变化。
根据立体成像原理,目前最为普遍的成像方式有主动式立体显示和被动式立体显示2种。被动立体技术是将影像信号输出到信号分转设备上,然后接到2台垂直叠加的投影机,用2台投影机同时投射一幅影像,1台投影机投右眼影像,1台投影机投左眼影像。2台投影机均要配置偏振镜片,通过采用不同的极化方向,偏光镜将发散光线分成水平和垂直位面来完成左右眼信息的区分。主动立体显示就是用一个投影机投射图像,某瞬间投射左眼看到的信号,下个瞬间投射右眼看到的信号。当投射左眼信号的瞬间,从工作站发出一个控制信号去控制主动立体眼镜的左镜片,使它打开,这个时候右眼的镜片关闭;反之,当投射右眼图像时,左眼的镜片是关闭的。总之,主动立体的眼镜是被控制的。因为被动立体的眼镜成本低,易于维护,对图形发生主机要求低,故本系统在设计三维虚拟灭火时采用被动立体投影。
在系统中设置2个摄像机,用于模拟左右两只眼睛,两只眼睛错开一段距离,并且同时盯在同一焦点,从而绘制出具有视觉差的2个场景效果,然后通过装有偏振片的2个投影仪投射到同一投影幕上,再通过偏振眼睛观看即可产生立体效果。主要代码如下:
2.4 有效的模拟交互
在模拟训练过程中,训练者在虚拟场景中的漫游、对虚拟喷头的操纵都必须通过交互来实现,交互的质量直接影响了模拟训练的效果。为使操作者高度沉浸在建立的虚拟场景中,用自然、方便的方式进行交互,本系统在3D立体显示技术的基础上引入无线交互设备,并设计了场景漫游与逃生、喷头控制交互2种主要交互过程。场景漫游与逃生通过对上下左右等按键进行消息响应,改变摄像机的位置,实现摄像机的前后左右和上下移动,达到场景漫游的效果,并且以第一视角实现逃生过程中的场景模拟。为真实模拟喷头的使用,系统通过将飞鼠的二维运动模拟成三维空间运动,有效地模拟喷头旋转、移动等操作,并根据喷头喷射的方向对火焰进行交互,若喷射到火焰边缘,则火焰往另一边偏,若持续喷射火焰根部一段时间,则火焰逐渐熄灭。
3 实现效果
经过三维场景搭建所得的场景如图4所示,图4分别由左、右2个投影仪投影在屏幕上,使用者佩戴3D眼睛可以感觉到具有三维效果的场景。
图4 三维效果场景图
灭火效果如图5所示。
图5 灭火效果
使用粒子系统等关键技术模拟出火焰,通过按下虚拟灭火器的开关控制虚拟喷头喷出喷雾,判断喷雾与火焰根部的位置,如果喷雾对准火焰根部喷射,火势渐渐变小,一段时间后火焰熄灭。
4 结束语
目前,三维立体技术正处于高速发展阶段,它因具有能够真实地再现现实生活场景的特点,广泛应用于军事、医疗、教学、娱乐等诸多领域,能够给人们以不同的视觉体验,为人们提供服务。
本系统结合了传统方式的真实性以及二维虚拟消防系统的安全、简单以及方便操作等特点,相比于二维系统脱离了平面显示的不真实性,让使用者在高真实感三维虚拟的场景中进行消防训练。
[1] 张占龙,罗辞勇,何 为.虚拟现实技术概述[J].计算机仿真,2005,22(3):1-3,7.
[2] 张 阳,李 琳,刘晓平.面向实时测绘的场景漫游系统[J].合肥工业大学学报:自然科学版,2013,36(6):667-670,717.
[3] 余 烨,刘晓平.面向VR系统的三维模型转换工具[J].工程图学学报,2008(5):72-78.
[4] 夏力前,汪元卉.3D游戏场景中的火焰效果的真实模拟[J].电脑与电信,2013(10):65-67.
[5] 刘俊芳.面向VR系统的三维场景的建立和导入[J].科技传播,2010(4):121-122.
[6] 金 阳,张 宣,李青元.三维渲染引擎OGRE与OSG的比较综述[J].数字技术与应用,2011(10):175-177.
[7] 王 俊,汪继文.基于N-S方程和纹理映射的实时火焰模拟[J].计算机与现代化,2013(12):68-71.
[8] 赵春霞,张 艳,战守义.基于粒子系统方法的三维火焰模拟[J].计算机工程与应用,2004(28):73-76.