首页| 行业资讯| 企业名录| 周边产品| 数字城市| 增强现实| 工业仿真| 解决方案| 虚拟医疗| 行业仿真| 图形处理| 军事战场
用户登录/注册 ×
资讯首页
行业资讯 >> 专业文献
基于Unity3D的火炮外弹道虚拟视景仿真系统
时间:2019-11-12    评论:0
    来源:兵工自动化
    作者:崔 瀚 ,焦志刚 杨秀英
    单位:沈阳工学院能源与水利学院
        沈阳理工大学装备工程学院

    摘要:应用 Unity3D 虚拟现实开发引擎,建立一套火炮外弹道虚拟视景仿真系统。该系统根据火炮射击过程特点确定系统总体要求和开发流程,采用 UG+3ds Max 联合建模方法建立弹丸和火炮模型;分析火炮质点外弹道方程组,结合 Unity3D 的 API C#脚本编辑系统、粒子系统、声音系统以及 NGUI 第三方插件实现对火炮发射过程的视景仿真设计,并通过算例与弹道表数值进行比较。结果表明:该系统能在视觉上更好地表现火炮发射和弹丸的飞行状态,为武器弹药研发者提供参考。

    0 引言

    虚拟现实(virtual reality,VR)是近年来出现的高新技术[1]。该技术已经广泛应用到军事模拟训练、科学研究和科学计算可视化、教育培训、医学领域应用、工程应用以及娱乐等 6 大领域[2]。在虚拟现实系统开发过程中,常用的建模工具有 MultiGen Creator、OpenGL、Maya 以及 3ds Max 等,而开发引擎主要有 Vega Prime、Unity3D、虚幻 3 以及 Cry Engine 等,其中,Unity3D 以其开放、易用和功能强大的引擎特别值得关注[3]。笔者采用 Unity3D 开发火炮外弹道虚拟视景仿真系统,通过对火炮质点外弹道方程组的研究,利用 Unity3D 的 C#API 脚本实现对虚拟场景中模型的驱动,进而实现火炮外弹道的 3 维实时视景仿真。

    1 系统总体设计要求及开发流程

    1.1 系统总体设计要求

    依据火炮特点,系统设计应能够以 3 维视景再现形式表现火炮的系统调试、射击过程与外弹道特点,同时,考虑仿真需要,要求设计人机交互界面以提高系统的可操作性。据此,该 VR 系统包括火炮调试(射击参数调试)系统、特效仿真系统(炮口效果和爆炸效果)、弹道仿真系统(弹丸弹道飞行及跟踪)以及人机界面系统。

图 1 火炮外弹道虚拟视景仿真系统

    1.2 系统开发流程

    根据系统总体设计要求及其各分系统所要实现的视景效果,利用交互式参数化建模方法构建视景仿真系统的运行场景及 3 维模型,结合 API 技术和动画技术实现系统运行过程中的特效仿真以及火炮外弹道的轨迹运行,最后通过 Unity3D 强大的系统开发功能将上述技术内容进行开发和整合成为火炮外弹道虚拟视景仿真系统,系统的开发过程如图 2所示。

图 2 火炮外弹道虚拟视景仿真系统开发过程

    2 虚拟视景仿真系统仿真环境及模型的建立

    2.1 视景仿真环境的建立

    笔者建立了地形与天空盒 2 部分视景仿真环境。地形环境采用 Unity3D 自带的 Terrain 地形系统中的Raise/Lower Terrain(升高/降低地形)、 Paint Height(绘画高度)、Smooth Height(平滑高度)、paint Texture(绘画纹理)以及 Place Trees(种树)等工具的综合运用,完成地形的建立,并在凹陷的山地间添加水效果;天空盒是指把一系列的纹理放置在一个立方体盒子内部,并进行无缝的渲染来模拟天空及地平线的效果[4],Unity3D 有自带的 Skyboxes(天空盒)资源包,只需将资源包导入到 Unity3D,通过Render Setting(渲染设置)命令即可创建天空盒,创建后的视景仿真环境如图 3 所示。

图 3 视景仿真环境

    2.2 火炮及弹丸模型的建立

    Unity3D 自身建立模型的能力不是很强大,但是它支持许多诸如 3ds Max、Maya、Blender、Cinema4D 和 Cheetach 3D[5]等主流 3 维建模软件;因此,笔者采用 UG+3ds Max 相结合的方法建立火炮及弹丸模型。

    弹丸模型的建立以尺寸轮廓为旋转对象,这样做是因为在虚拟场景中看不到的面可以忽略;而火炮的建模则要用到旋转、拉伸、切除、布尔运算以及打孔等命令。为了在虚拟场景中控制火炮射角,应将建好的火炮模型炮身和炮架部分分别装配。由于 UG 自带的材质与视景仿真要求相差甚远,并且 Unity3D 仅能识别.FBX 格式的图形文件,而 UG 中所建立的模型不能转换成这种格式,因此借助 3ds Max 的贴图和渲染功能创建能够充分表现火炮及弹丸质感的材质,同时将模型渲染并转换为.FBX 图形文件后导入 Unity3D,导入场景后的模型如图 4 所示。

图 4 导入到 Unity3D 中的火炮及弹丸模型

    3 火炮外弹道视景仿真

    3.1 火炮外弹道方程组

    火炮外弹道学主要研究由火炮发射的弹丸出炮口后的运动轨迹及姿态。通常火炮外弹道分为质点外弹道和刚体外弹道。刚体外弹道可以得到比较精确的计算结果,但是由于描述刚体外弹道的方程组比较复杂,在开发时间和计算速度上均不能满足系统开发要求,因此本系统采用质点外弹道方程组作为系统开发过程中解算弹道的工具;又由于弹丸在空中运动过程中要表现速度以及弹道倾角随时间的变化情况,因此选择自然坐标系下的弹丸质心运动方程组作为视景仿真系统中解算弹道的数学模型,自然坐标系的弹丸质心运动方程组[6]为:


    其中: π(y) 为气压函数,其大小可表示为π(y)=H(y)×τ/τ0n,H(y)为空气密度函数,其经验公式为 H(y)=(20 000-y)/(20 000+y),y 为弹道高,τ 为虚温,τ0n 为标准条件下的虚温;F(vτ)为空气阻力函数。为了方便计算编排程序,对于 43 年阻力定律的F(vτ),可用下面的经验公式[6-7]:


    其中 c 为弹道系数,可由空气动力学理论计算得到,作为已知输入条件。为了保证在程序运行过程中计算的精准度,积分初值选为:


    其中:v0 为弹丸初速;x0 和 y0 为炮口水平位置和铅直位置坐标;θ0 为火炮射角。

    3.2 火炮射角的调试

    由质点弹道方程可知,火炮射角作为质点弹道计算的初始参数必须在火炮发射前确定。火炮在进行建模过程中已经考虑了射角调试的问题,已将炮身和炮架分别建立并定义为父对象,其中炮架部分为“paojia”,炮身部分为“gaodiji”,与这 2 部分相关的零件作为子对象存入相应的父对象,模型结构如图 5 所示。

图 5 火炮模型结构

    将控制炮身运动的 C#脚本挂载到“daodiji”父对象上,即可通过输入的角度值调整火炮射角,控制火炮射角的 C#脚本代码如下:transform.localEulerAngles = new Vector3 (-jiao,0, 0); 

    功能的实现主要是通过自身欧拉角命令实现对火炮绕 x 轴的旋转(高低方向旋转),旋转的角度值由“-jiao”变量传递。

    3.3 火炮外弹道方程组的解算及仿真特效实现

    对火炮外弹道方程组的解算是该视景仿真系统的核心。Unity3D 支持多种 API 脚本编辑,笔者应用龙格库塔法,采用 C#脚本实现对火炮外弹道方程的解算,将解算出的 x, y 坐标点、速度 v 以及弹道倾角 θ 作为控制弹丸运动位置、速度及弹道倾角的参量,之后将相关脚本挂载到模型上,用于控制模型的运动。

    控制基本参数变化的脚本如下所示,分别用于实时更新 x、θ、y 和 v 的数值,而 4 个增量值 dx、djiao、dy 以及 dV 则是通过龙格库塔法解算质点弹道微分方程组得到的,其中 kj1~kj4,kx1~kx4,ky1~ky4 以及 kv1~kv4,分别为各参数采用龙格库塔法计算时各阶计算所得到斜率值。

      x+=dx;
     θ+=djiao;
      y+=dy;
      v+=dV。

    djiao= (kj1+2*kj2+2*kj3+kj4)*180/(6*Mathf.PI);弹道倾角变化量计算dx=(kx1+2*kx2+2*kx3+kx4)/6;//x 方向坐标变化计算dy=(ky1+2*ky2+2*ky3+ky4)/6;//y 方向坐标变化计算dV=(kv1+2*kv2+2*kv3+kv4)/6;速度变化量计算各弹道参量计算之后就可以在脚本中进行调用,用于实现火炮发射弹丸沿着全弹道的运行状态。

    为了实时显示弹丸的运动状态,在程序运行时设置一个与弹丸运动坐标位置在每一时刻都相隔一定距离的跟随摄像机,从而实现对弹丸运动的实时显示。其脚本如下所示:

    obj=GameObject.Find("danwan2(Clone)");// 查找弹丸对象
    shexj=GameObject.Find("Camera2(Clone)");//查找摄像机对象
    obj.transform.position=new
    Vector3((float)x,(float)(y),(float)(z));//炮弹位置实时控制    
    shexj.transform.position=new Vector3 ((float) (x+7f),(float)(y+1f),(float)(z));//摄像机位置实时控制

    火炮外弹道视景仿真除了展示弹丸飞行过程以外,还应该展现与火炮外弹道起点和终点相衔接的2 个部分,即炮口中间弹道以及落点终点弹道。尽管这 2 部分在弹道学划分上不属于外弹道范畴,但由于他们是与外弹道紧密结合的起始和终止点,因此有必要对这 2 个部分进行视景仿真设计。对这 2个部分的视景仿真实现的框图如图 6 所示。

图 6 中间弹道及终点弹道视景仿真实现


    由粒子系统与爆炸特效插件制作的炮口焰和爆炸效果如图7 所示。

图7 炮口焰和爆炸效果的设置

    为了更加真实地仿真火炮发射效果,在火炮发射和弹丸爆炸 2 个时刻添加了开炮以及爆炸声音特效,调用炮口焰效果、爆炸效果以及声音特效的 C#脚本如下所示:

    AudioSource.PlayClipAtPoint (kaipao,camera1.
    transform.position);//开炮声音特效播放
    Instantiate (paokouyan , transform.position,
    transform.rotation);//在炮口位置显示炮口焰
    void OnTriggerEnter(Collider other)// 碰撞检测
     {
        AudioSource.PlayClipAtPoint (baozha,
        new Vector3 (2242.09f,24.77655f,1672.026f));//着地时在摄像机位置播放爆炸音频;
         if (other.tag == "shandi") {//检测碰撞对象是否为地形
         Instantiate(bzxiaoguo , transform.position+
        newVector3(0,1.8f,0),transform.rotation);//在碰撞位置 y 方向向上一点的位置实例化爆炸效果。

    }

    场景中声音特效的播放是使用 Unity3D 自带的AudioSource 下 PlayClipAtPoint 方法在指定位置实现的,在脚本中选择播放位置为摄像机,主要原因是在摄像机位置播放音频的声音最大。而炮口焰及爆炸效果是通过 Instantiate 方法实例化得到的,其中爆炸效果的实例化是采用 OnTriggerEnter 方法通过碰撞检测实现的调用,主要用于模拟弹丸落地引信触发后引爆弹丸的效果。

    最后通过特效制作、C#脚本解算火炮质点外弹道方程和特效的调用,实现了火炮外弹道的视景仿真设计,最终的视景仿真效果如图 8 所示。

图 8 弹丸发射、外弹道飞行及着地爆炸视景仿真效果

    3.4 人机交互界面设计
    
    人机交互界面(graphical user interface,GUI)主要用于提高系统的可操作性,尽管本系统在功能上已经实现了火炮外弹道过程的视景仿真,但为了进一步提高系统的操作功能,需要对脚本运算的初始参数及弹道运算结果进行人机交互界面设计。由火炮质点弹道学理论其输入参数有弹道系数 c、火炮射角 θ0 以及弹丸初速 v0;弹道计算结果应包括主要的弹道诸元,即火炮射程、弹道高、飞行时间、落角以及落速。本系统采用 Unity3D 第三方插件NGUI 实现人机交互界面设计:参数的输入使用NGUI 的 UIInput 控件,计算结果以及界面相关说明应用 UILable 文本显示控件实现结果显示和文字说明,火炮的发射命令采用 UIButton 按钮控件实现控制。编辑好的人机界面如图 9 所示。

图 9 视景仿真系统的人机界面

    由于 UILable 和 UIInput 所显示和输入的内容均为字符串格式,因此在脚本编辑时使用了很多字符串与实数以及浮点数之间的转换方法,用于实现人机交互功能的脚本如下:

     string chusu = speedInput.value;//读取 GUI 界面中的速度//

     v0 = double.Parse (chusu);//将速度的字符串转换为浮点数

     string shejiao = shejiaoInput.value;//读取 GUI的射角

     θ0 = double.Parse (shejiao);//将射角字符串转换为浮点数

     string dandaoxs = cInput.value;//读取 GUI界面中的弹道系数

     c = float.Parse (dandaoxs);//将弹道系数字符串转换为浮点数

     X1.text=Xs.ToString();//计算后的射程转换为字符串

     Y1.text=shegaos.ToString();//计算后的弹道高转换为字符串

     J1.text=θs.ToString();// 计算后的落角转换为字符串

     Vc1.text=vs.ToString();//计算后的落速转换为字符串

     T1.text=feiTs.ToString();//计算后的飞行时间转换为字符串

    3.5 仿真算例

    为了验证仿真系统计算的精准度以及测试人机交互界面参数输入和计算结果变量之间的传递和显示,任选一组输入值作为仿真系统运行的初始计算数据。所选数据为:火炮初速 480 m/s,火炮射角35°,弹道系数 0.95,其运行后弹丸的飞行状态如图8 所示,计算结果如图 10 所示。

图 10 视景仿真系统参数输入及运算结果显示

    由图 10 可以看出:使用所选初始参数进行仿真后,程序运算结果为射程 9 628.342 m、弹道高2 110.907 m、飞行时间 41.1 s、落角 47.244°、落速248.902 m/s。为验证仿真计算结果的准确性,查参考文献[8]中初速 480 m/s,火炮射角 35°,弹道系数0.95 的数据与仿真计算结果进行比较,其比较结果如表 1 所示。由表中数据可以看出:仿真运算结果与弹道表表中数据相比误差较小,其中误差最大的为射程,百分比为 1.92%;误差最小的为弹道高,百分比为 0.62%,其余误差数值均在二者之间。

表 1 相同初始条件仿真结果与外弹道表数值比较

    比较项 射程/m 弹道高/m 飞行时间/s 落角/(°) 落速/(m/s)仿真结果 9 628.342 2 110.907 41.1 47.244 248.902 弹道表数值 9 447 2 098 40.76 47.6 247差值 -181.342 -12.907 0.34 0.356 -1.902误差/% 1.92 0.62 0.83 0.75 0.77产生误差的主要原因有:1) 由于质点弹道数学模型建立在许多假设条件下,与弹丸实际运动情况存在一些理论误差;2) 采用龙格-库塔法解算微分方程组,其解为数值近似解,与精确解间存在着计算误差,然而由仿真结果可以看出其误差范围很小。

    4 结束语

    笔者对火炮外弹道所应包含的过程进行了分析,采用 Unity3D 虚拟现实开发引擎以及 UG+3dsMax 联合建模方法,建立了仿真环境及模型,并结合 Unity3D 的 API C#脚本编辑系统、粒子系统、声音系统以及 NGUI 第三方插件实现了对火炮发射过程的视景仿真设计。 

    参考文献(略)
标签:Unity军事
上一篇:苹果AR眼镜概念曝光,十年内取代iPhone下一篇:基于GIS的海洋观测数据虚拟仿真研究
网友评论:基于Unity3D的火炮外弹道虚拟视景仿真系统
留名: 验证码:
最新评论
查看全部评论0
暂无评论
您可能还需要关注一下内容:
·未尔科技·军事VR视景解决方案
·空海一体虚拟战场环境构建技术
·任务驱动的面向对象战场环境仿真过程建模
·五款主流三维图形引擎基本功能对比
·十五款主流三维图形引擎简介
·国内外三维图形引擎研究现状
·三维图形引擎综述
·协同仿真-智能专家系统技术研究与应用
·基于Unity3D的气相色谱仪虚拟仿真实验系统的构建
·基于Unity3D的可变视点数裸眼立体图像合成算法
☏ 推荐产品

小宅 Z5 2018青春版
商家:小宅

杰瑞特运动平台
商家:杰瑞特智能

Dikalis眼动追踪
商家:赢富仪器

魔神 Hawk
商家:魔神运动分析

5DT Binoculars
商家:四维宇宙

Christie DS+750
商家:四维宇宙

Zalman M220W
商家:四维宇宙

全息360°
商家:四维宇宙

PD F10 AS3D
商家:四维宇宙

PHANTOM系列
商家:四维宇宙
☞ 外设导航
☏ 企业名录
【深圳】深圳市观度科技有限公司
【沈阳】沈阳中申高新科技有限公司
【北京】北京未尔锐创科技有限公司
【南昌】南昌虚拟现实检测技术有限公司
【上海】上海桥媒信息科技有限公司
【宁波】宁波维真显示科技股份有限公司
【潍坊】歌尔股份有限公司
【上海】霍尼韦尔(中国)有限公司
【北京】科视Christie-中国
【北京】北京华如科技股份有限公司
关于本站联系我们融资计划免责声明网站建设广告服务咨询策划行业推广
北京第三维度科技有限公司 版权所有 京ICP备15051154号-3
2008-2020 Beijing The third dimension Inc. All Rights Reserved.
Email:d3dweb@163.com  QQ:496466882
Mob:13371637112(24小时)
关注虚拟现实
关注第三维度