APP下载

开源仿真引擎Delta3D在军用仿真中的应用

2014-04-29陈喜春

计算机时代 2014年2期

陈喜春

摘 要: 由于商业仿真软件的高昂费用以及源码的不开放,许多军事仿真已转而使用开源仿真软件。Delta3D是一款由美军开发的全功能游戏与仿真引擎,通过对底层模块进行隐藏封装,将多个相关功能模块整合在一起形成一个使用更加方便的高级API函数库,目前在军用仿真领域已经较有影响。文章介绍了Delta3D的模块组成,应用程序开发的基本框架,以及与相关仿真软件的配合使用,并就开发过程中的相关问题给出了建议。

关键词: Delta3D; 仿真引擎; 开源软件; 军事仿真

中图分类号:TP319 文献标志码:A 文章编号:1006-8228(2014)02-33-03

0 引言

目前,作战实验中大量采用了3D图形技术。在游戏和仿真领域,从技术实现上可将3D图形技术分为基础层、中间层和应用层三个层次。基础层主要是3D加速硬件和厂商提供的基本的API函数接口;中间层则是根据游戏和仿真各自不同的需求编写的公共引擎或软件(在游戏领域多称之为游戏引擎,仿真领域则称之为仿真软件或仿真环境);应用层则是具体的游戏产品或仿真应用。

一个良好的仿真引擎是仿真应用研发的基础,在一个相对成熟的仿真引擎基础上,作战实验系统研发人员能够根据需求较快地开发出相应的作战仿真软件,仿真软件厂商也能很快地为客户建立各种仿真应用。

目前仿真软件中有大量的商业化软件,如Id Software公司的Quake、Quake II和Quake III引擎,Epic Megagames公司(即现在的Epic游戏公司)的Unreal Tournament引擎,Monolith公司的LithTech引擎,但这些软件价格昂贵,且源码不开放,对作战实验这种需要从底层保证其结果可靠性的应用来说,造成很大困难。

美军较早意识到了这种困难,他们积极转向开源软件。Delta3D是一款由美国海军研究生院(Naval Postgraduate School)开发的全功能游戏与仿真引擎,得到美国军方巨大的支持与丰厚的投资[1]。该引擎应用领域极为广泛,在培训、教育、娱乐行业和科学计算可视化领域等方面建模与仿真软件的开发中都得到了广泛的应用。它的标准化设计把一些知名开源软件和引擎如Open Scene Graph(OSG),Open Dynamics Engine (ODE),Character Animation Library(CAL3D),以及Open AL等融为一体。Delta3D通过对这些底层模块进行隐藏封装、整合在一起,从而形成了一个使用更加方便的高级API函数库,使得开发者在必要的时候能够使用底层函数进行二次开发。

本文将对开源软件Delta3D的模块组成、开发方法以及与相关仿真软件的配合使用进行介绍。

1 Delta3D功能模块介绍

Delta3D在软件系列中,处于中间层(Middle layer)的位置上。Delta3D主要目标是提供一套简单可行的API函数库,构成搭建任何可视化软件的基本要素。

Delta3D是一个开放源码的引擎,研发开始于2002年4月,集成了现有最先进的开源软件(Open Source projects),并经过全球Delta3D关注者的增补与完善,相对于购买一款价格很高又不开放源代码的引擎具有很大的优势,使用Delta3d可以任意修改代码并且定制所需的功能,这是不开放源代码的商业引擎无法做到的[2]。

2 Delta3D应用程序的基本框架

2.1 Delta3D中的基本概念

在Delta3D的开发中,有几个重要概念,如游戏管理器(Game Manager),游戏角色(Game Actor),游戏组件(Game Component),以及游戏消息(Game Message)。

Delta3D提供仿真应用程序的基本要素,如场景管理,物理系统,立体音效,对象加载,动态角色库,环境特效,光照,地形支持,相机,以及角色动画。

在应用程序中,游戏管理器负责管理整个应用程序虚拟世界中存在的所有要素以及角色或组件之间的交互,游戏管理器拥有所有的游戏角色,普通角色,组件以及消息。游戏管理器的主要任务是:管理消息;维护系统内部的所有的角色,包括游戏角色以及普通角色;提供游戏管理组件功能。

普通角色或者称之为非游戏角色一般指那些游戏世界中静态的物体,比如:房子、不移动的灯光、树木、地形等,游戏角色指那些具有生命的角色。

在Delta3D中,一个很重要的概念是角色代理。游戏管理器只识别游戏角色代理,不直接识别游戏角色。因此游戏角色只能够通过角色代理与游戏管理器发生关系。游戏消息是角色和组件之间互相通信的内容。消息通常用来发送数据(比如属性变化)或者行为(请求或命令)。图2展示了消息在游戏角色,游戏管理器以及组件之间的流向。

2.2 基本程序框架[3-4]

程序的逻辑顺序依次是:创建新的dtABC::Application对象,加载实体对象,向场景中添加实体对象,设置实体对象在三维场景中的位置,设置摄象机,最后进入仿真循环。

较复杂的仿真程序主要是在仿真推进中需要将对象的属性进行更新,所以需要管理的对象数量、复杂程度会大大增加。

3 与相关仿真软件的配合使用

Delta3D是一套复杂的软件,它不仅仅实现了仿真程序框架,而且将其他一些开源项目进行了集成,从而可以实现更复杂的功能。

3.1 网络模块

如今分布式仿真大行其道,仿真程序的网络功能是不可或缺的。HLA是如今仿真开发的标准架构,Delta3D也对HLA提供了支持。Delta3D提供了HLA组件作为一个消息翻译器(Game Translator),游戏管理器(Game Manager)对消息的处理首先要经过消息翻译器的处理,然后按照HLA架构的要求由rti软件进行收发。HLA组件对rti函数进行了封装,使用起来比直接调用rti函数要大大简化。rti软件同样有开源版本,与Delta3D配合使用时,推荐使用CERTI。

除HLA外,Delta3D还可以使用另外的网络通信机制,如使用开源的GNE库(Game Networking Engine,游戏网络引擎)。GNE库是一个可移植的多线程网络函数库,它为常用的网络程序开发提供了一套框架,开发人员可以直接在这个框架之上添加代码。

3.2 物理引擎

物理引擎主要包含游戏世界中的物体之间、物体和场景之间发生碰撞后的力学模拟,以及发生碰撞后的物体骨骼运动的力学模拟。Delta3D中对物理引擎的封装也有几种不同的实现方式[5],第一是在dtCore中对ODE(开放动力学引擎)的封装,第二通过dtPhysics使用PAL(physics abstract layer)对三种物理引擎Bullet、ODE、Phys的封装。

在Delta3D中应用ODE的时候,可以使用Scene类调用ODEController,通过ODEController中配置ODESpaceWrap,进行碰撞检测设置。

3.3 人工智能

在娱乐游戏或者军事仿真中,都会涉及到路径寻找、避障等问题。Delta3D提供了dtAI模块,通过AIutility工具可以在场景上编辑路点(WayPoint),然后提供包括A*算法在内的一些标准程序,实现AI功能。当然,人工智能也有很多第三方库,如NavMesh,采取导航网的方法来进行路径选择,同样可以集成到Delta3D应用中。

4 结束语

本文分析了开源软件在仿真领域得到重视的原因,并介绍了一种得到广泛应用的开源软件Delta3D。Delta3D集成了大量的其他开源项目,并开发了一个易于使用的应用程序编程接口,它的开放性、易用性将会为它的未来发展带来广泛的空间。

参考文献:

[1] Delta3D Homepage[EB/OL].http://www.delta3d.org/index.php,2013-10-10.

[2] Delta3D Tutorials[EB/OL]. http://www.delta3d.org/article.php?story=20050720155458456&topic=tutorials,2013-10-10.

[3] Delta3D Forum[EB/OL]. http://www.delta3d. org/forum/index.php,2013-10-10.

[4] 杨化斌,于振华,林中等.Open Scene Graph3.0三维视景仿真技术开发详解[M].国防工业出版社,2012.

[5] Delta3D Tutorials in the Wiki[EB/OL]. http://sourceforge.net/apps/mediawiki/delta3d/index.php?title=Tutorials,2013-10-10.