李旭洋,马思群,李 健,史良宇,陶 然
(1.大连交通大学 机车车辆工程学院,大连 116028;2.大连交通大学 艺术学院,大连 116028;3.知识科学系,北陆先端科学技术大学院大学,能美市,日本)
动车检修车间包括动车检修、维护、检测等工作,是保证动车安全运行的基础,而检修车间的设计、设备分布对列车检修效率及检修人员技术培训起到十分重要的作用。因此,为使动车检修人员培训时更快、更好地熟悉检修车间设备、工作环境和动车检修流程,十分有必要开发一款基于Unity3D 的动车虚拟检修车间漫游系统。
虚拟现实(VR)是利用计算机模拟三维空间,用户通过计算机、头盔及相关设备能够身临其境一般,观察三维空间内的事物,使某一特定的现实世界真实环境能够利用VR 技术呈现在人们眼前[1-2]。
3DS Max 检修车间的模型建立是整个动车虚拟检修车间漫游系统创建的关键。本文选用3DS Max软件建立三维模型,充分利用其具有的强大的建模、材质表现及渲染功能[3]。
Unity3D 是一款三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台综合型游戏开发工具。可视化模式让游戏开发者能够轻松构建互动体验,参数可以在游戏运行时更改。
采集数据是虚拟检修车间建立的重要环节之一。需到现场采集检修车间内部的照片或图片,车辆基地地形尺寸、建筑高度、大型设备尺寸等,建立三维建模所需要用到的材质和图片库。通过查阅参考文献、书籍、网络检索及车间的设计图纸获取检修车间尺寸,绘制车间建模工程图。需要对车辆基地内建筑和检修车间内大部分设备进行简化绘制和建模,对于基地的二维平面图,只要标明各部分建筑的位置,注明其功能,以简易平面图形表示。对于检修车间的三维建模尽量采用规则立体图形,简化建模方式,有助于降低建模难度。导入3DS Max 中建模,模型建成后,将其导入到Unity3D 中,进行脚本开发、数据库设计、界面设计,实现交互漫游的目的,完成动车虚拟检修车间漫游系统的开发。
虚拟检修车间漫游系统的开发主要包括二维车辆基地的平面绘制、检修车间三维场景创建和系统功能的开发。其中,检修车间三维场景信息不仅指虚拟场景,还包括检修信息、设备功能、背景音乐等。系统的开发流程,如图1 所示。
图1 虚拟检修车间漫游系统开发流程
虚拟检修车间的真实感与三维模型的本身质量有直接关系。如果提高场景的制作质量,可以有效地降低三维模型的粗糙度,提高清晰度,增强系统的真实感。由于车辆基地面积太大,所以开发时以检索到的车辆基地资料,总结相关资料给出的尺寸,使用二维CAD 软件绘制出整个车辆基地的平面图,在设计过程中线型的选择,如表1 所示。
表1 线型选择
(1)通过CAD 软件界面菜单,从样式菜单中选择“粗线”,根据机械制图标准选择标准线宽,绘制出图纸线框,如图2 所示。
图2 局部绘制线型图
(2)线型选择,实线(细、粗比例为1∶2)、虚线和点划线。
(3)检修车间为车辆段中最为重要的部分,也是整个漫游系统的主体,采用并列式布局,线组并联布置、维护线组并联布置,两线之组间设有一定的距离,用于设置工业管道和道路,创建图层,设置线型统一采用粗实线,并标注好尺寸。最后对整个车辆基地进行总平面图的设计和绘制。设计完成的总平面图,如图3 所示。
图3 二维车辆基地平面图
2.2.1 检修车间平面基图的创建
建模前,将车辆基地二维CAD 平面图导入3DS Max 中,设置文件单位为cm。需要冻结导入的场景图形组,以避免在复杂场景中出现图形选择不全,导致在3DS Max 中出现缺面现象。在视图窗口中创建一个平面,在“修改”命令中修改其各项系数。将其转换为可编辑多边形,选择顶面使用“挤出”命令,使其平面有一定高度,将二维图形转换为三维图形[4]。
2.2.2 轨道和路基的创建
为了保证钢轨建模的逼真性,根据钢轨国标尺寸在二维CAD 图纸中画出钢轨的截面图形。将CAD 图纸导入3DS Max,转换成可编辑多边形,创建钢轨长度,然后复制创建多个钢轨模型。因为实际检修车间的路基较复杂,为了有效地创建模型,建模时对其结构和外观进行分类,并进行简化,多采用标准基础体。所设计的模型,如图4 所示。
图4 轨道和路基的三维模型
2.2.3 检修平台和楼梯栏杆的创建
实际情况中,平台结构、楼梯尺寸和栏杆大小都十分类似,为了减轻工作量,根据现有掌握的各项尺寸,使用基础形状建模方法分别创建出三维平台模型,设置7cm 厚度,楼梯模型和栏杆模型则在几何体中,点击创建楼梯栏杆模型,并设置参数,设计模型,如图5 所示。
图5 检修平台和楼梯栏杆的创建
2.2.4 检修车间墙体和房间的创建
检修车间墙体和房间的三维模型是整个模型创建中最重要的部分。主要使用多边形建模方法,创建一个长方体,转换为可编辑多边形,使用“连接”“桥”和“切片平面”等命令,创建出合适的检修车间三维建筑模型。对其细节部分进行处理,调整各组成部分的空间结构,完成整体模型的创建。
2.2.5 材质与贴图
三维设计软件3DS Max 最大的优势之一在于拥有各种各样的贴图类型。在检修车间内外进行贴图,能够使车间环境更加逼真,具有高沉浸感。贴图主要来源于实地的照片拍摄,利用相关的图像处理软件,如Photoshop 调整图片的大小、色彩、光暗度和透明度。完成的模型,如图6 所示。
图6 检修车间三维模型
2.3.1 角色动作设计
角色漫游是整个漫游系统的重要组成部分,当用户在虚拟场景中观察和漫游时,有必要创建角色模拟器。在Unity3D 的角色模拟器中,本文选择了第一人称角色模拟器。
所有动作的实现必须要有脚本的添加,在脚本中编写对应的代码,对设备输入信息进行处理和及时的反馈,并以动作的形式呈现出来。
(1)角色移动的实现
在Unity3D 的操作面板中选择3D Object 中的Caspsule 创建一个3D 物件胶囊体,并将其命名为Player,通过更改其Inspectors 的Transform 属性,将胶囊体移动到地面上合适的位置(也可以在scene 面板内左键点击拖动胶囊体的x,y,z轴箭头来调整它的位置)[5]。将相机(Camera)的父级拖拽到胶囊体(Player)的子层级中,充当玩家的眼睛,并调整到适当位置。在SImpleNaturePack 中创建一个C#Scripe的脚本。设置好一个单元移动速度,GetKey 函数用于监视输入指令,并在玩家移动时触发语句。根据触发时间乘以单位移动速度所花费的单位时间,可将相应的单位按规定方向移动。
(2)视角控制的实现
在角色模拟器的摄像机组件中添加脚本,通过GetAxis 函数监视鼠标在垂直和水平方向上的输入,设置好参数值,记录上次移动的位置,当Player 移动触发语句时,移动速度v乘以相应时间t,摄像机就可以实现旋转相应的角度,达到控制视角的效果。
2.3.2 碰撞检测技术的实现
碰撞是Unity3D 中很重要的一个概念,在三维虚拟场景中,移动角色和物体模型,都是相互独立的。漫游各种物体时,角色移动时需要自动绕开这些物体障碍物。
碰撞检测的工作原理是检测两个或多个物体之间是否有渗透或接触,并根据碰撞物体的特点和应用要求做出相应的碰撞响应。主要采用球体碰撞,定义两个球体球心和半径分别为a1、a2和r1、r2,球心距离为d,比较这两个球体的半径。如果距离d<r1+r2,则发生碰撞,否则不发生碰撞,有关碰撞检测的相关原理与方法在相关文献有详细说明。
球体的包裹为碰撞器和触发器,利用OnCollision族函数和OnTrigger 族函数作用于碰撞器及触发器,判断物体是否发生碰撞,在对象中分别设置有碰撞组件,检测重要函数,完成碰撞检测。
2.3.3 数据库的设计
在虚拟检修车间漫游系统中,场景数据库中存储了检修车间建筑信息、尺寸、车间内各工作用房的功能及信息、设备功能和操作方法等。本文采用SQL Server2012 作为数据管理和开发的基础。用C#脚本在Unity3D 中实现数据查询。例如:在Unity3D引擎中,检修车间各建筑信息、设备型号功能和设备用房作用信息在数据库中都有对于的ID,在数据库中按房间和设备两个大类分类以数组形式储存和读取,以C#脚本为基础设置信息查询功能,在漫游中实现实时交互。
虚拟动车检修车间漫游系统包括主菜单界面、场景漫游模块和交互功能模块,在各模块中可以添加背景音乐、环境效果场景特效等功能。
创建一个不可见的Player,浏览到的场景即是Player 所看到的视角,为了控制浏览的状态,通过导航功能进行控制,对浏览的方式、Player 化身的大小进行设置,其设置代码如下:
Speed 字段用于设置玩家在场景中的漫游速度,单位为m/s。Type 字段用于更改交互式漫游的实现方式,Visibility Limit 定义了Player 视野的最远距离,默认值0.0 为无穷远[6]。
当Player 与场景中物体距离小于avatarSize[0]时,触发碰撞器,使用“步行”方式,当遇到系统设置的高度障碍物时,高度大于avatarSize[1.4]时,即改为其他浏览方式,此方式可以限制浏览者(Player)的活动范围[7]。
用户在整个虚拟场景中沿着预设好的路线进行漫游。角色在已设置好的路径上移动,Unity3D 中采用全局导航,创建导航网格,在场景中设置可通过区域和障碍区,勾选Navigation Static 烘焙处理选中对象,调整烘焙设置满足代理半径、代理高度、最大坡度和台阶高度,完成网格创建。之后创建导航移动角色,一般为球体(高度为2cm和半径为0.5 cm)适用于人体,添加导航组件,创建C#脚本,让角色移动到由另一个球体指定的目的地,实现自动漫游。
当用户在漫游整个虚拟场景时,经过某一房间建筑或某的状态一处设备时,能通过菜单项查询到房间或某一设备的具体信息和功能。每个设备检修流程和房间信息都存储在自己的组件中,可通过编写的自定义脚本进行搜索和读取。用户可以经过数据库管理器查询数据,显示出查询对象的基本信息,如果查询对象输入错误,窗口就会自动显示错误或者查询对象不存在,提示重新输入。
在漫游系统中预先设置好主要设备的传送功能,在漫游菜单中选择传送按钮点击会出现下拉菜单,提供各个主要设备的选项,使用者点击则会传送到相应设备旁边。具体实现则是在各个选项按钮中添加脚本OnClick 方法,当使用者点击拥有设备名称的按钮时,就会执行脚本,赋予角色模拟器新的三维坐标,传送至其对应地点。
虚拟检修车间漫游系统界面主要包括开始菜单、检修维护车间介绍及功能、结束菜单和漫游界面。
(1)初始界面。初始界面由底部按钮、上部文本框和背景图片组成。菜单按钮包括车辆基地介绍、检修维护车间介绍、退出4 个选项。在场景中创建一个画布,设置4 个按钮组件,添加脚本,以开始按钮为例,创建一个C#脚本文件,通过ClickObject函数判断是否被点击过,通过点击执行脚本文件进入到漫游场景中[8]。
基地介绍与功能按钮是当被点击时会自动弹出文本窗口显示介绍信息和基地功能信息。为了保证界面阅读效果,当点击基地介绍与功能按钮时会自动弹出隐藏的窗口,窗口内首先出现基地介绍信息然后是功能介绍信息,阅读完后会自动关闭。需要首先添加窗口组件,创建文本组件,将文本信息录入文本组件中,创建C#脚本,编写代码,设置参数属性[9]。
(2)漫游场景界面。包括一个漫游窗口和一个菜单。
(1)用户在登录界面上登录,可以实现验证身份信息,包括建筑信息,场景中的设备信息,模型数据加载等。
(2)点击进入漫游界面后,根据系统已设置和渲染好的初始用户视角,通过鼠标点击和键盘操作,在虚拟检修车间移动,观看场景和了解设备、建筑信息。
(3)在漫游时可以通过系统内的查询功能,查询想要了解的子房间功能,设备型号及其功能,系统将自动弹出相关信息。
(4)用户点击右下角退出按钮,退出系统。系统工作流程,如图7 所示。
图7 虚拟检修车间漫游系统工作流程
开发获得的虚拟检修车间漫游系统,用户可以通过鼠标点击,可查阅车间检修设备信息、型号、各工作用房的功能,在车间内进行实时的漫游,全方位展示出检修车间的内外部结构和其功能。利用3DS Max 解决三维检修车间建模问题,利用数据库技术对检修车间房间和设备信息进行交互管理学习,通过脚本语言、碰撞检测技术、界面设计,使用户真实了解功能和结构。开发出的虚拟检修车间漫游系统最大优势在于打破传统车间的空间地形、设备、费用等环境和经济因素的限制,通过基本信息、设备信息、作业流程等,增强培训人员对检修车间设备操作和检修流程全面掌握的能力,达到理论学习与实践操作的结合。