基于Unity3D的变电站移动虚拟培训研究

2019-01-17 01:10卢梅丽
天津职业技术师范大学学报 2018年4期
关键词:脚本手柄引擎

卢梅丽

(天津职业技术师范大学信息技术工程学院,天津 300222)

电力行业作为关系国家能源安全和国民经济命脉的传统行业,其新设备、新技术的应用和工厂工人的大规模培训工作日趋广泛和复杂。由于电网具有高危险性和不可轻易断电等特殊性,传统的培训方式在电力系统的应用中具有极大的局限性[1]。近年来,随着计算机技术的发展,虚拟现实技术(virtual reality,VR)在各个领域得到了广泛的应用,如教育、机械制造、煤矿行业,化工以及医疗等领域[2-8]。VR即一种能创建虚拟场景的计算机系统,该系统生成的各种虚拟场景作用于用户的视觉、听觉和触觉,能使用户产生身临其境的感觉[9]。电力系统对操作正确性要求非常高,各种复杂的操作流程必须通过反复的操作训练才能使从业人员的技术水平得以提高,因此其运行维护具有一定的特殊性。由于VR能够整合多种资源,将复杂的数据通过立体直观和可交互的方式呈现出来,非常适合于电力系统运行维护这种高复杂性以及需要反复操作系统的仿真培训研究。近些年,VR已经在电力教育和培训以及电力系统运行等方面有了成功的应用,如变电站运行虚拟培训系统,输电线路检修虚拟培训系统以及电力工程设计虚拟系统等[10-11]。但目前大多数的电力系统虚拟培训基于PC端,要获得沉浸感较强的虚拟体验效果,用户需要配置HTC VIVE和Oculus Rift等专业设备,但这些设备成本昂贵,而且受PC端场地的选择、系统的搭建以及线缆的规格等约束,很难实施。近些年,随着智能移动终端设备的高速发展以及计算平台的普适化,基于移动端的VR受到了越来越多的重视,移动端VR只需要一部手机和相应的VR盒子,结合无线网络便能较好地满足实际使用中便捷和移动的要求。目前基于移动设备的虚拟仿真系统也倍受关注,如针对油田工作的移动客户端仿真考核系统以及手机终端的机械拆装应用等[12-13]。本文设计和开发了一种基于移动端VR和增强现实(augemented reality,AR)的电力变电站虚拟培训仿真系统,采用Unity3D引擎,结合安卓操作系统,在移动端将虚拟现实技术与电力变电站系统相结合,开发了一种移动便携式的变电站仿真培训系统。通过移动端VR和AR的应用,既节省了培训成本,又克服了PC端VR场地和线缆的局限。

1 系统的软硬件环境

虚拟现实系统主要由三维建模软件、系统集成开发引擎、输入输出设备等构成。三维建模是利用三维数据将现实中的三维物体在计算机中重建,是虚拟现实场景开发的第一步。目前广泛使用的三维建模工具主要有XSI、Maya和3ds Max等,每种建模工具都有其特点及适用范围,本系统采用3ds Max 2014三维制作软件进行变电站三维建模。3ds Max是由Autodesk公司旗下的Discreet公司开发的三维造型与动画制作软件,集建模、材料、灯光、渲染、动画、输出于一体,广泛应用于建筑艺术、计算机辅助教育、工业造型、军事和建筑设计等。3ds Max制作流程简洁高效,具备较好的兼容性,提供了多边形建模及NURBS等多种建模工具,极大丰富和简化了虚拟现实的场景构造。

现阶段虚拟现实行业市场5个主要的开发集成软件和平台分别为 Virtools,Quest3D,VR-Platform,Unreal Engine 4和Unity3D。其中Unity3D是目前开发者最为常用的一款全面整合的专业引擎,其已在三维游戏、建筑可视化和商品宣传等领域得到了广泛应用。Unity3D较好的跨平台性及简单易用的特性使其在虚拟现实领域得到了越来越多的应用。本系统采用Unity3D 5.3.2版本,用C#编写脚本实现人机交互和场景跳转等功能。计算机采用Win8操作系统,头戴显示器采用暴风墨镜4黄金顶配版和Android 4.4.2版Smartian T1测试真机。

2 系统总体结构

本培训系统由VR部分和AR部分组成,其中VR部分主要包括变电站工厂场景虚拟漫游、母线及电容器组安全巡回检查,以及电站作业前相关的安全措施查询。AR部分主要是利用AR技术将平面图纸中的电路模型进行立体化显示,实现电路图的培训。系统总体结构如图1所示。

图1 系统总体结构

变电站虚拟漫游主要实现从变电站大门外至厂区内主控楼、变压器区、配电控制室内以及职工生活区和周边小区等整个场景的虚拟漫游。变电站场景概况如图2所示。专业巡检包括母线专业巡检,如母线基础支架检查,主要检查支架牢固、焊接处有无开裂等。支持绝缘子检查,主要检查绝缘子是否完整无破损,垂直度是否符合要求等;母线本体检查,主要检查母线表面是否光滑,管母线内阻尼线是否完好等。另一项专业巡检是电容器组专业巡检,主要进行电容器组的基础检查、套管检查、外壳检查、导电部分检查及接地检查等。安全作业规程提供给用户关于作业前、作业中及作业后的各种安全措施。

图2 变电站场景概况

3 关键技术

3.1 变电站三维模型优化

变电站模型包括变电站场景和设备,其中变电站设备分为一次设备和二次设备2类。一次设备主要由变压器、断路器、隔离开关等构成,二次设备主要由继电器、测量仪表、控制开关和机构柜等构成。一次设备模型通常比二次设备模型复杂,尤其是变压器模型细节较多,包括变压器底座、散热片、机构箱等。在3ds Max中利用样条线建立设备的高精度白模,为增加模型的真实感,将3d模型保存成.FBX格式的文件,导入到Unity3D引擎中进行纹理材质的贴图,并添加光照阴影和粒子系统。

场景中模型数量众多,且部分变压器和刀闸模型非常复杂,如果不加处理会影响整个场景的运行速度。为了提高系统性能,分别在3ds Max软件和Unity3D引擎中对模型进行了优化。

(1)如果场景模型的个数和面数过多,会影响计算机对图形的加载速度,导致模型加载不全,出现丢失现象。因此,需要在3ds Max中进行模型优化。一方面模型个数的优化主要通过将相同材质的物体进行合并,在3D软件中采用Attach合并精简模型的方法:先给物体赋材质,然后调整好各物体材质的坐标,将模型转换成Edit Mesh,通过鼠标右键选择Attach合并。要保证虚拟场景的运行速度,合并后的模型总面数不超过10万面。另一方面是精简模型的总面数,主要通过降低Plane面片模型截面上的段数和Cylinder模型的高度段数与截面数,更改线型物体的厚度,然后将其转换成Editable poly导出,删除各物体间的重合面,删除模型中看不见的面等技术来实现。

(2)将场景模型导入到Unity3D引擎后,需要进行材质和贴图设置,并添加阴影和光照。影响Unity3D性能的主要因素是中央处理器CPU和图形处理器GPU的计算速度。GPU的性能会受到需要处理的顶点数和像素、屏幕分辨率以及内存带宽等因素的影响,对GPU的优化除了通过在3D建模软件中采用减少模型中三角形的数目和尽可能重用顶点的方法来减少顶点数外,还可以通过在Unity3D引擎中采用遮挡剔除(occlusion culling)技术消除隐藏在其他物体后面看不见的物体来实现。同时,通过对贴图的图片进行压缩和纹理合并处理,减少图片所占内存和优化带宽。目前Android平台主要支持ETC1格式的图片压缩,能在获得清晰图片的同时极大地减少内存。纹理合并就是通过UIAtlas将多张贴图合并做成一个大图,使用的时候再进行拆分,每一个大图能拆分的小贴图长宽比最好为正方形,且长度值是2的整数幂,以便于对纹理图进行切割和优化。针对CPU的优化主要是减少Draw Call的数量,在Unity3D中,将每一次引擎准备数据并发送渲染物体命令给GPU的过程称为一次Draw Call,因此每一帧的Draw Call次数是非常重要的性能指标,为了减少Draw Call的次数,可以通过合并相似的模型并对这些模型使用相同的材质,然后采用静态批处理的方式减少渲染次数,从而减少对Draw Call的调用。

3.2 Unity脚本实现人机交互

Unity3D是一款面向组件的开发引擎,一个工程由多个场景构成,每一个场景中的所有物体都被称为游戏对象,对每一个游戏对象来说,通过对其添加组件的方式来实现游戏对象的各种功能,即游戏对象的所有功能都要通过组件来实现。脚本是一种特殊的组件,通过添加到游戏对象上来实现用户自定义的一些功能。在设计一个游戏对象的具体功能时,可以将组件分为3个层次,从低到高分别为:基础组件,指的是Unity3D提供的内部功能组件,如物理组件、声音组件、渲染组件等;模块功能脚本组件是通过脚本实现的、相对独立的、可重用的功能模块组件;高层的整合代码脚本,这些脚本将引擎基础组件和模块功能组件整合到一起,实现最终游戏对象逻辑。

在进行脚本开发时,必须注意到作为一个组件,脚本不能孤立于游戏对象而独立运行,即必须添加到游戏对象上才能生效。每一个脚本文件必然包含一个与脚本文件名相同且继承自MonoBehaviour的Public类,MonoBehaviour类中常用的方法构成了Unity脚本的生命周期,Unity脚本的生命周期如图3所示。

图3 Unity脚本的生命周期

从Awake方法到Start方法属于初始化阶段,Awake是生命周期的开始,用于在游戏开始前初始化变量或游戏状态。向下执行时,先进行一个判断,如果Start方法已经被执行过,则不会再被执行,即Start方法在生命周期中只被执行一次。FixedUpdate在固定的时间间隔执行,不受游戏帧率的影响,类似于定时器,如果帧率很低,一帧可被调用多次,一般用于处理物理逻辑。LateUpdate总是在Update方法执行之后被调用,与Update方法一样,每一帧调用一次,LateUpdate常用于第三人称摄像头的实时跟随。OnGUI属于渲染模块,每帧调用多次,用于绘制图形界面。OnDisable在游戏对象被禁用时调用,一旦激活游戏对象,可以重新回到OnEnable状态。当游戏对象被销毁时,就会执行OnDestroy,然后通过OnApplicationQuit退出应用程序,结束一个脚本的生命周期。

Unity引擎常用的脚本语言有C#和JavaScript,本项目采用C#实现人机交互功能。人机交互指用户通过键盘、鼠标和一些外部输入设备控制和操纵虚拟场景中的动作。本项目采用暴风魔镜的手柄作为输入设备,利用设备上的OK键和摇杆控制虚拟场景的跳转和漫游。为了在Unity中获取手柄的按键和摇杆信息,首先将暴风墨镜手柄的资源包Mojing SDK for unity导入到Unity引擎中,然后加入IntegrateInputManager跨平台交互预设和Overlay聚焦预设,IntegrateInputManager用来获取手柄的按键事件,Overlay实现场景中的射线准星,用于聚焦UI按钮。获取按键事件的脚本中需要引入using Mojing Sample.Cross Plat form Input,然后采用Cross Plat form Input Manager获取手柄的按键和摇杆信息。入口场景界面采用UGUI中的Button元素实现进入培训系统场景和退出培训系统的功能。手柄对虚拟场景中Button的控制通过手柄射线触发UI实现,在培训系统入口这个场景的主摄像机Main Camera下添加脚本MainFrom,通过手柄的OK键控制进入或退出系统。主要代码如下:

进入虚拟漫游培训场景后,可以通过手柄摇杆控制场景中的漫游动作。将场景中的主摄像机Main Camera替换为MojingMain预设摄像头,添加脚本组件MojingWalk挂在MojingMain上,实例代码如下:

3.3 系统发布和实施

虚拟漫游培训系统采用暴风魔镜IV系列进行测试,其头盔显示器和手柄如图4所示。

图4 暴风魔镜IV系列头盔显示器和手柄

只需要将开发的.apk文件下载到手机中,然后将手机插入头盔显示器即可使用。

手机端.apk文件打包步骤如下:

(1)下载安装Java的JDK,然后在我的电脑-属性-高级系统设置中对Java进行环境变量设置。

(2)下载安装Android SDK。

(3)在Unity引擎环境的菜单Edit的下拉菜单Preferences中,对External Tools项进行设置,使其中JDK和SDK分别指向步骤(1)和(2)中安装的路径。

(4)安装Android设备驱动,打开Android SDK Manager,安装 Google USB Driver,最后在 Unity3D 中build场景,设置合适的参数后,发布成Android apk文件,然后下载到手机中。手机中的效果图如图5和图6所示。

图5 手机端效果图1

图6 手机端效果图2

本培训系统对电路图的培训采用AR技术,AR技术可以在真实世界中叠加虚拟信息,主要通过跟踪注册技术实现。目前的增强现实AR系统中,主要有2大类跟踪注册技术[14-15]:一类是基于硬件的跟踪注册,另一类是基于计算机视觉跟踪注册。本文采用计算机视觉技术中的人工标志方法进行跟踪注册,基于人工标记的AR系统能够将虚拟场景准确定位到真实世界,具有快速、稳定、准确的特点,可以快速从复杂的真实环境中检测出人工标记且对硬件配置要求不高。可以分为以下几步实现:首先采用手机摄像头获取视频图像,然后根据模式识别匹配算法,将标记图像与标记库中的模版标记图像进行比较匹配来判断此标记是否为合法标记,若匹配则可进行标记识别[16]。本系统AR部分采用高通Vuforia系统,具体实现步骤如下:

(1)进入Vuforia官网注册账户,在网站主页的选项Develop下的License Manager中注册得到注册码。

(2)在Develop的Target Manager注册数据库,在新建的数据库中添加需要立体显示的虚拟场景识别图。

(3)将所有的场景识别图下载成Unity资源包,将该资源包和Vuforia SDK一起导入到Unity引擎中。

(4)在Unity场景中对ARCamera和ImageTarget分别进行设置,将ARCamera、ImageTarget拖入场景。在ARCamera的Inspector窗口中点击Open V uforia Configuration,在打开的界面中的App License Key项中填写步骤(1)获得的注册码,导入识别图数据库并激活。然后将需要识别后展示的虚拟场景作为ImageTarget子物体,设置多个需要识别的场景位置。

4 结语

本文设计并开发了一种基于移动端的变电站虚拟培训系统,结果表明:虚拟培训系统基于3D场景的优化和Unity引擎中GPU性能的改善,能够实现流畅的虚拟场景漫游以及友好的人机交互界面。与传统的PC端虚拟培训系统相比,手机端漫游系统不受场地和线缆的约束,操作更加灵活方便。但是,由于手机端受手机性能如分辨率、视场角以及陀螺仪精度的限制,使用时容易产生一定的延迟感,从而造成用户眩晕的感觉。因此,在开发中应尽量选择分辨率高的手机型号,同时控制漫游系统的使用时间,能一定程度上缓解手机端漫游给用户造成的不适感。

猜你喜欢
脚本手柄引擎
酒驾
基于PLC控制的手柄座钻孔攻丝一体机的研发
新海珠,新引擎,新活力!
安奇奇与小cool 龙(第二回)
车坛往事4:引擎进化之屡次失败的蒸汽机车
一种多功能无线手柄的设计
蓝谷: “涉蓝”新引擎
快乐假期
小编的新年愿望
为什么厨具的手柄不是金属的?