基于U3D的船用培训软件设计
2018-04-20吴正
吴 正
(上海船舶运输科学研究所 舰船自动化分所, 上海 200135)
0 引 言
虚拟现实技术起源于20世纪60年代,是指借助计算机系统及传感器技术生成三维环境,创造出一种崭新的人机交互方式,通过调动用户各种感官(视觉、听觉、触觉及嗅觉等)使用户得到更加真实的体验。随着此技术的发展,不仅可作用于娱乐游戏等产业,在应用教育及成果展示等许多领域均有应用。工信部在2016年4月发布了《虚拟现实产业发展白皮书5.0》,其中讲述了当前中国虚拟现实产业的发展状况,并提出了相关政策,从国家层面上充分肯定虚拟现实产业。这里将逐步说明并搭建一套完整的船用教学系统,从真实的船舶数据着手,绘制高仿真度的船体模型,加以虚拟的海航场景和设备模型,提供一个上船工作的虚拟环境。该教学系统将对船员培训及直观展示船用设备,起到重要作用。
1 数字模型制作
1.1 船体模型制作
确定船型,得到相应的主尺度、尺度比和船型系数。以10万吨货油轮为例,分别计算船长L、型宽B、型深D及吃水d。
在船舶计算中通常要进行船体计算,计算内容包括横剖面、水线面积及排水体积等面积与体积的几何形心及面积的惯性矩,这类计算称为船体计算,是船舶设计中的基础工作。由于船体型线复杂,不能使用单一的解析式表达,计算一般根据型线图,采用数值积分法进行。
图1
图2 船体模型效果图
1.2 室内以及设备模型
船上集中控制的作业地点主要分为驾驶室、货控室和集控室。其中相关设备装置种类繁多,但重在人机交互,无需设计材质和电路,故采用控制回路外循环作为基本要求,由船体得到最终模拟反馈。
此处仅以货控室为例,主要由液位测量设备和压载水操控台组成,其它设备可根据教学需求逐一制作。
各惰气压力表、液位值及高位报警和压载调水系统见图3,当使用者触及相应设备时,可对此进行操作。
a) 货控室CCR俯瞰图(远景)
b) 货控室俯瞰图(近景)
譬如改变压载调水系统的相关阀门,船体由于压载水改变倾斜度,左、右吃水会发生变化,使用者的视角也会相应倾斜,和真实的船上体验非常接近。
图4 视觉表现参数设定
1.3 环境背景模型
对于船用领域,环境背景一般为海洋,此处模型基于海浪频谱和方向谱理论,但通过海风、海浪的各种变化,可模拟各种气候现象,如潮汐、季风及飓风等极端气象。
除去功能性参数,视觉表现参数设定见图4。
2 Unity3D应用
Unity3D引擎是类似于Director,Blender engine,Virtools或Torque Game Builder等利用交互的图型化开发环境为首要方式的软件。其编辑器运行在Windows 和Mac OS X下,可发布游戏至Windows,Mac,Wii,iPhone,WebGL(需要HTML5),Windows phone 8和Android平台,也可利用Unity web player插件发布网页程序,支持Mac和Windows的网页浏览。
借助Unity3D平台,加载已完成制作的船体和海洋模型,使用FBX格式导入并调整位置,可简单地搭建出一个虚拟航行场景,然后添加CS编译器加上物理效果,最后进行渲染(见图5)。
图5 虚拟航行场景
2.1 浮力计算
若要表现出接近真实的状态,涉及到各种外界因素,其中影响力较大的是浮力,需对浮力进行精确计算。
船舶航行中,最直观的即是四角吃水。但从测量角度一般由6个基准吃水点表示,艏吃水左(右)、舯吃水左(右)及艉吃水左(右)。为便于计算,以球体近似代替船体各部分产生的浮力,根据积分原则,当分割的球体越多,船体受力越趋向于真实(见图6)。
图6 船体吃水测量
估算作用力为浮力、风力、水阻和黏滞力的合力,由于风力与其他作用力不在同一坐标轴,需独立计算。浮力等于水面下船体的重力,需通过程序计算水面下船体的体积与海水密度的乘积;水阻和船速成正比,黏滞力与水深和黏力系数成正比[2]。相关程序段如下。
86 public void UpdateForces(Rigidbody body)
87 {
88
89 if(Ocean, Instance ## null}
90 {
90 BuoyantForce=Vector3,zero;
92 DragForce=Vector3,zero;
93 Stickyness=Vector3,zero;
94 return;|
95 }
96
97 Vector3 pos=transform, position;
98
99 WaterHeight=Ocean, Instance, QueryWaves (pos.x, pos.z);
100
101 CalculateSubmersion (radius, pos.y);
102
103 float unitScale=GetUnitScale();
104
105 float Fb=DENSITY_WATER*unitScale*SubmergedVolume;
106
107 BuoyantForce=Physics.gravity*-Fb;
108
109 Vector3 velocity=body.velocity;
110
111 float vm=velocity, magnitude;
112 velocity=velocity.normalized*vm*vm*-1.0f;
113
114 DragForce=0.5f*dragCoefficient*DENSITY_WATER*unitScale*SubmergedVolume*velocity;
115
116 Stickyness=Vector3.up*(WaterHeight-pos.y)*Mass*stickyness;
117
118 }
2.2 VR镜头制作
用左、右眼分屏的独立视角产生景深,造成立体感的视觉,再依靠重力感应的头部追踪技术感知头部动作,当使用者在现实世界中移动,虚拟现实世界中的使用者也能同样地移动。
当使用者向左看,头部追踪技术能识别该动作,这时硬件就会即时渲染出左边的场景,即往左看能看到左边的场景,往右看则能看到右边的场景,不会发生场景跟着使用者移动的意外(见图7)。
在画面中添加2个摄像机,同水平线间距可设为可变化(用于瞳距校准),再将2个摄像头按左、右分布在画面中央。由于双眼视野透过球体透镜,需对画面进行反畸变处理。
当画面纹理产生畸变时,计算每一个变化的像素点是一个巨大的工作量,设计采用相对稀疏的网格的顶点做畸变处理,该方案可减少直接计算的资源,让GPU做大量的插值运算。不采用对每一个像素做处理,对网格中的每个顶点做计算,极大的减少了计算量(减少了3个数量级),且提升了性能。在Shader和Camera都可满足以上计算要求。经过畸变处理,可获得以下视角(见图8)。
2.3 人机互动设计
2.3.1场景漫游
以使用者步行角度,需添加x轴向的前进、后退,y轴向的左转、右转相关程序段如下。
Vector3 Move = cam.transform.forward*input.y + cam.transform.right*input.x;
Move.x = Move.x*movementSettings.CurrentTargetSpeed;
Move.y = Move.y*movementSettings.CurrentTargetSpeed;
以使用者视野角度,需添加y轴向的坐看,右看,z轴向的抬头、低头,相关程序段如下。
Vector3 Move.y = Move.z*movementSettings.CurrentTargetSpeed;
Quaternion Rotation = Quaternion.AngleAxis(transform.eulerAngles.y - oldYRotation, Vector3.up);
图7 数字视频激电
a)前视图
b)后视图
2.3.2设备交互
当使用者进入到场景中的室内环境,视角中所有的仪表和按钮都可设置为具有操作性,对应现实中的表现进行改变。
当程序默认从使用者双目中心位置射出一根隐藏的射线,通过射线与设备相交产生触发行为。
RaycastHit [] hits = Physics.RaycastAll ( transform.position, transform.forward )
根据要求可添加压载水调平衡操作,通过对控制台上压载水控制系统的使用,模拟船体各压载舱内的水位,同时影响到船体吃水位,产生倾斜角,使用者将得到真实的反馈表现。
同时,对控制台上的液位测试系统也进行相应的互动。各舱的液位也可反馈在仿真仪表上,令使用者身临其境,提高对设备使用的熟练度。
3 结 语
通过基于U3D的船用培训软件可提高上船工作者的环境认识度,在以后的船舶作业中,可快速掌握对相应设备的操作。用虚拟现实的设备可做到完全仿真的效果,对于一些具有危险性或价值巨大的设备,这种教学认知系统可提供安全可靠的学习环境。
参考文献:
[1]刘红. 船舶原理[M].上海:上海交通大学出版社,2009.
[2]朱珉虎. 阻力、功率和航速的估算(一)[J].中外船舶科技,2005(2):36-40.