APP下载

基于UE4的虚拟仪器操作的开发

2019-01-30陆春雨

电子技术与软件工程 2019年1期
关键词:轮廓线蓝图脚本

文/陆春雨

1 前言

三维虚拟仿真技术是一种可以创建和体验虚拟世界的计算机仿真系统,其利用计算机生成一种多源信息融合的交互式的三维动态视景和实体行为的系统仿真,使用户沉浸其中。该技术已被广泛应用于实验教学过程中,即以计算机三维建模技术来生成数字化三维仪器,用仿真软件构建虚拟仪器的操作环境,通过设定虚拟仪器在输入设备如键盘和鼠标的操作下响应方式,以实现人机交互,达到虚拟仿真教学的目的。

2 虚拟仿真软件介绍

UE4(虚幻引擎4)是一套为使用实时技术的人士开发的工具。从企业应用和电影体验到高品质的PC、主机、移动、VR及AR游戏,UE4都能够提供从启动项目到发行产品所需的一切,在同类产品中独树一帜。其优点包括:实时逼真渲染、包含完整的C++源代码、对设计师友好的Blueprint(蓝图可视化脚本)、稳健的多人框架、内置级联粒子视觉效果编辑器、电影级后期处理效果、包罗万象的动画套件、先进的人工智能等。

本研究即尝试使用UE4来实现高效液相色谱仪操作的虚拟仿真。

3 开发流程

开发流程如图1所示。

3.1 建模和贴图

在3ds Max中采用多边形建模的方法制作模型,包括实验室房间、实验台、高效液相色谱仪的各个组件、显示器、烧杯、废液瓶等。建模过程中注意模型的布线,确保都是四边面,同时精简面数以保证在UE4中进行虚拟互动时运行流畅。需要做旋转操作的物体(如盖子),要设置好旋转的轴心。每个模型要展开好两套UV(贴图坐标),第二套UV是UE4里光照贴图使用。模型最后都导出成FBX格式。贴图尺寸的长和宽最好都使用2的次方像素,如128×128、256×128、512×512等。一 般 贴 图的格式用jpg即可,如果要在引擎中作为贴花(Decal)使用,则要保存成有透明通道的png格式。

3.2 在UE4中构建场景

在UE4开始创建一个新工程时有许多模板可以选择,如First Person、Third Person、Flying、Top Down、Side Scroller等等。本研究使用First Person(第一人称)模板。因为这个模板默认是制作第一人称射击游戏的,所以首先要做一些修改:把手臂模型和枪械模型删除,保留胶囊体和摄像机,胶囊体相当于操作者的身体,摄像机相当于操作者的眼睛;把Spawn Projectile(发射子弹)功能取消,保留用键盘W、A、S、D键控制移动和用鼠标控制视角的功能。

把模型都导入到UE4中,调整好位置。有交互操作的模型的Mobility属性设置为Movable,同时添加一个名为BPI_Interact的蓝图接口。在房间靠天花板的地方放置几盏灯,调整好亮度和范围,调整天空球中太阳的位置,使阳光透过窗户洒在地板上。

UE4中的材质是PBR(基于物理渲染)材质。主要属性有BaseColor(基本色)、Metallic(金属性)、Specular(高光)、Roughness(粗糙度)等。分别制作好金属、玻璃、塑料等材质,赋予相应的模型。布置好灯光、赋予材质后的场景如图2所示。

3.3 UE4中的主要蓝图脚本

3.3.1 FirstPersonCharacter

在这个脚本中要创建两个函数:Trace和ShowName。它们的功能:当操作者把准心对准场景中某一个可交互的物体时,该物体会显示出金黄色轮廓线,同时在画面下方显示该物体的名称(如图3所示),这时如果按下鼠标左键即可进行交互操作;当把准心移开时,轮廓线和名称消失。

图1:开发流程图

图2:布置好灯光、赋予材质后的场景

Trace函数:首先获取操作者(摄影机)的位置和方向,然后从摄影机发射一条100cm的射线,如果射线没有碰到物体,就隐藏CurrentTarget变量中的物体的金黄色轮廓线,把CurrentTarget设为空,设置Interact变量为False,把物体名称变量设为空。如果射线碰到了物体,先判断该物体是否具有BPI_Interact。如果没有,则隐藏CurrentTarget变量中的物体的金黄色轮廓线,设置Interact变量为False,把物体名称变量设为空,然后调用ShowName函数。如果物体具有BPI_Interact,则与CurrentTarget变量中的物体比较:如果相同,就用SetRenderCustomDepth显示物体的金黄色轮廓线,设置Interact变量为True,把该物体通过HitActor变量传值给ShowName函数,并调用ShowName函数;如果不同,就隐藏CurrentTarget变量中的物体的金黄色轮廓线,把该物体设置为CurrentTarget,显示物体的金黄色轮廓线,设置Interact变量为True,把该物体传值给ShowName函数,并调用该函数。如图4所示。

图4:Trace函数的蓝图脚本

图5:ShowName函数的蓝图脚本

图6:交互操作的触发脚本

图7:power蓝图脚本

ShowName函数:从Trace函数传递过来的物体,利用GetClass和GetDisplayName可以得到该物体在UE4里的英文名,要显示出中文名就要做一下转换。先创建两个Array(阵列),一个存放英文名EngName,一个存放中文名ChiName,顺序一致;然后用ForEachLoop对GetDisplayName的值和EngName阵列进行一一比对,再把得到的ArrayIndex传给ChiName阵列,最后转换成字符串通过蓝图UI(用户界面)显示出来。如图5所示。

3.3.2 交互操作的触发脚本

当按下鼠标左键时,如果Interact变量为真,则通过BPI Interact蓝图接口发送消息给HitActor变量中的可交互物体,该物体接到消息后就会执行相应的交互操作。如图6所示。

3.3.3 可交互物体的蓝图脚本

每一个可交互物体都有自己的蓝图脚本,以三个按钮(power电源、pump泵、purge排气泡)为例:正确的顺序是先检查固定相和流动相,再按下电源开机,然后是排气泡,最后启动泵。如果顺序不对,则会出现相应提示。比如:先按purge,会提示“还没有开机”;开机后直接按pump,会提示“请先排气泡”;排气泡之前如果没有拧松二通阀,会提示“请先拧松二通阀”等等。另外,按钮还有一个按下和弹起的小动画,即按钮在该场景中沿X轴进行位移运动,可以通过Timeline实现。如图7所示。复杂的动画则是通过Matinee功能实现,比如清洗泵头。清洗泵头由多个动画组成:打开甲醇瓶的封口塑料纸、泵头从甲醇瓶中取出并移动到烧杯上方、打开流动相瓶子的盖子、流动相瓶子上升并倾斜、流动相倒出清洗泵头、流动相瓶子放回桌面、泵头移动至流动相瓶子中、封口塑料纸移动到流动相瓶子的瓶口处。水流的效果则是通过粒子系统模拟实现。

3.4 打包

通过UE4的打包功能,可以输出成.exe的可执行程序。

4 最终效果

操作者以第一人称视角,在一个实验室场景中漫游,并可对实验桌上的高效液相色谱仪进行操作:检查固定相色谱柱、检查流动相、清洗泵头、开机、排气泡、启动泵、进样等。

5 小结

许多高校由于受场地、经费、人员等方面的限制,仪器设备往往数量有限,而且昂贵仪器的使用寿命也限制了其使用的次数。学生操作实验设备的机会常常不足,导致他们的动手能力薄弱。通过虚拟仿真技术来实现仪器设备的虚拟操作,可以在一定程度上解决这一问题。本文即以高效液相色谱仪为仿真对象,提出了一种基于UE4的虚拟仿真开发的解决方案,可满足低成本、易操作、交互性强、可重用、安全、逼真等教学需求,也有利于提高学生的学习兴趣,增强学生的自主学习能力。

猜你喜欢

轮廓线蓝图脚本
酒驾
蓝图
五年蓝图
基于HTML5的凸轮廓线图解法App教学软件研究
数据库系统shell脚本应用
快乐假期
我们的健康新蓝图
绘好国家级健康新蓝图
多轮廓线的三维形体重构技术研究与实现*
基于鼻子下轮廓线的鼻尖定位法