李 楠,王晓宁,林智峰,梁雪松,朱志强
(北华航天工业学院,河北廊坊 065000)
基于UE4引擎的航天科技视景仿真系统的设计与实现
李 楠,王晓宁,林智峰,梁雪松,朱志强
(北华航天工业学院,河北廊坊 065000)
介绍了一个采用虚幻4引擎(UE4)开发的火箭发射视景仿真系统的设计与实现。系统软件运行于一台高性能图形工作站,支持HTC vive虚拟现实(VR)套装。使用3DS MAX和Maya分别制作编辑虚拟场景中的模型和动画;在UE4中利用其蓝图系统集成并处理模型等各类资源和功能。体验者可以第一人称视角在火箭发射场等场景虚拟漫游并使用HTC vive与场景交互。
视景仿真;航天科技;科普;UE4;蓝图
近年来,我国的航天事业进入了快速发展时期,在卫星导航、载人航天和探月工程等方面取得了重大的成就。由于航天科技具有高技术、高机密性等特殊性,普通人要了解和认识航天科技事业,大多通过文字、图片、视频、动画以及实物等方式,无法亲身到相关环境和设施中观察和体验。虚拟现实技术(VR)一定程度上可以帮助人们近距离了解和体验航天科技。VR技术具备的交互性、沉浸感、构想性和全息性的特点,使其成为当代科普展教品研发和制作的一个主要的技术手段。VR技术在科普展教中的应用,使科普教育彻底打破了时间、空间的限制,并能够弥补客观条件的不足,营造良好的虚拟学习和体验环境。
本系统的研发是以航天科技科普为应用背景,将基于UE4的游戏引擎开发技术和HTC vive虚拟现实套装(即SteamVR)应用于航天主题的科普展品,帮助体验者在虚拟的环境中了解和体验航天科技。限于篇幅,本文将不具体介绍对HTCvive的开发过程。
UE4即虚幻4引擎,是一款由Epic Games公司开发的游戏引擎,多用于开发第一人称射击游戏[1]。UE4的高级动态光照处理功能,使其具备了实时渲染机制,并弥补了3DSMax、Maya等建模软件中在光照处理方面的不足。强大的资源管理功能,可以快速、直观地查找资源并对其进行管理。值得一提的是UE4的蓝图开发。
蓝图是一个完整的可视化游戏脚本系统,其设计思想是使用基于节点的界面从虚幻编辑器中创建游戏元素。该系统为设计人员提供了仅供程序员使用的所有概念及工具。用蓝图开发的过程,就是使用连线把节点、事件、函数及变量连接到一起,创建复杂的游戏元素、实现各种行为及功能的过程[2]。本系统中基于UE4的开发工作,均在引擎的编辑器(虚幻编辑器)上进行,且绝大部分用蓝图开发。
本系统软件共包括三个场景,分别为火箭发射场、地面控制室和空间站场景。
火箭发射场场景包括了发射场地形、发射塔架、火箭箭体和各类附属建筑。虚拟角色可在发射场中漫游,并在适当的条件下(靠近某个物体或按下某个手柄按键时)听到或看到语音和文字介绍;可进入地面控制室场景。
在地面控制室场景中,虚拟角色可通过大屏幕看到发射前的发射塔、箭体的多角度监视视频和发射过程中的监视视频以及对火箭的跟踪视频;可通过键盘或者手柄下达火箭发射命令。
在空间站场景中,虚拟角色可在空间站舱外漫游,能看到空间站舱体、同伴宇航员、地球以及其他太空景象。
以上场景中均实现物体的碰撞检测功能;支持HTCvive套装。
我们设计三个关卡对应三个场景。火箭发射场是第一个关卡,设计两个按键触发事件来实现到控制室和空间站的关卡切换;控制室和空间站场景则分别为第二、第三关卡,都只需按下一个按键即可返回火箭发射场关卡。
本系统的用户交互主要是基于HTC vive套件完成的,包括虚拟角色的移动、关卡切换、提示信息的播放显示及控制、火箭发射控制。移动通过手柄的方向键完成;关卡的切换通过左右手柄上的菜单键实现;提示信息的显示通过左手柄扳机实现;火箭发射命令通过右手柄的扳机完成[3]。
本系统的模型动画主要是在火箭发射场景。动画体现了真实的火箭发射全过程,包括火箭升空、升空后各个部件的脱落。这部分动画的设计和制作在Maya中完成,其余简单的动画在UE4中设计完成,比如空间站场景中地球的自转等。
本系统的实现经历了场景搭建、人物角色的蓝图实现和交互的蓝图实现3个主要阶段。场景搭建阶段仅以火箭发射场场景的实现为例说明。
场景的搭建分为模型的导入、场景环境设置、模型碰撞设置几个阶段,以下分别简要说明。
(1)将模型导入UE4
采用3DsMax和Maya建模后,将其产生的FBX文件导入UE4中。为了在后续的工作中为模型自由添加刚体,实现理想的模型碰撞,在导入模型时应注意在导入选项里勾选skeletonmesh(骨架网格模型),而不是static mesh(静态网格模型)。
(2)场景环境设置
UE4中每一个关卡中的地图都是一个球,而天空就是这个球面的一部分。它不是单纯的贴图,而是一个蓝图类,包括很多子类如云朵、太阳等。在火箭发射的场景中采用的是UE4默认的天空,而在空间站关卡的场景则是用户自定义的一个蓝图类,包括宇宙中太阳的模型。当场景环境搭建完成,就可以开始操作模型了。
(3)模型碰撞设置
在UE4中,为了使用户在虚拟漫游中的体验感更加真实,在模型外部都要添加刚体,使用户不能随意穿梭在模型内部或场景中一些不能被用户触及的部分,例如火箭发射架和地面。因为UE4软件自动添加的刚体总是凌乱而且不准确,所以往往需要把原先的刚体删除然后自己加上刚体,具体步骤如下:找到需要定义刚体的模型的物理评定(Physics Assess)并打开,拖拽界面查看此模型的刚体,若发现有不满意的刚体添加,选中后删除。
UE4中有四种不同精度的刚体添加方式,可以根据自己的需要选择不同的添加方式。本系统大部分模型都采用第四种精度最高的刚体添加方式。
(4)为场景导入模型
在内容窗口中点击过滤器,选择skeleton mesh(骨架网格模型)。UE4会自动拼接好所有模型,同时也会根据模型的分组把模型分成几部分,更方便操作。也可以把所有组件放在同一个文件夹整体拖拽实现导入。
(5)模型的位置调整
模型导入场景后,需要调整位置以符合项目的需要。UE4提供了两种自定义坐标的方法:第一种是相对自身坐标轴的距离;第二种是相对世界中心坐标的距离。通过输入x,y,z轴三个值,用户可以精准控制模型的位置,把需要的模型摆放在需要的位置。
(6)模型碰撞检查
首先需要在视图中查看模型的碰撞视图。点击“透视图”,选择“碰撞”选项,查看碰撞情况。更直接的方法则是,点击菜单栏中的开始按键,以游戏者的身份,亲自测试模型的碰撞效果是否贴近实际情况。
测试完模型的碰撞效果,确定了场景的模型位置,接下来就是根据开发者的关卡设计理念,对这些模型进行蓝图类的可视化编程。
3.2.1 文字提示的实现
要实现当虚拟角色靠近某一区域或物体时会有提示信息的功能,需要在场景中放置一个碰撞体,并设置相应的触发事件,具体步骤如下。
(1)在内容浏览器中新建actor蓝图类。
(2)在蓝图编辑器的内容框中添加一个box,即碰撞体。
(3)进入碰撞体的事件图表,在事件图表中选择“为box添加一个时间”,选择on component overlap。该节点的功能是当有物体与该立方体发生碰撞时,触发节点的后续功能。碰撞蓝图的设置如图1所示。
图1 碰撞蓝图设置
(4)为了实现虚拟角色与立方体碰撞时显示提示信息的功能,就需要在蓝图类中添加一个Text Render组件,该节点功能是显示文本文字。在视图窗口摆放完毕后也要进入事件图表中进行编程,因为Text Render节点默认情况下是激活的,所以需要在下一个步骤中初始化(设置为未激活)。
(5)Text Render需要首先设置为未激活,这就需要添加一个Event Begin Play节点,后面连接set visibility节点,节点内不选择任何选项。该节点作用是控制Text Render的激活。为了使碰撞能触发Text Render,要在on component overlap后添加一个set visibility节点,并把选项勾上,激活Text Render。完成后把set visibility节点的目标设置为Text Render。
(6)完成蓝图类编辑后,进入关卡蓝图界面,把新建的蓝图类拖拽进场景内,设置相应的位置。运行程序,测试相应功能。
3.2.2 按键播放动画的实现
本系统采用的模型本身就带有动画,因此,在导入后只要设计动画的触发机制即可。我们在前期为了便于开发和测试,先用蓝图实现了用键盘按键触发动画的功能,具体步骤如下。
(1)在关卡蓝图中添加一个触发键盘事件(此用例为键盘F键),在后面连接一个play motion节点,用于触发事件后播放目标模型的动画。
(2)在视图窗口点击需要播放动画的模型(此用例为开启夹),转到关卡蓝图,选择引用一个开启夹,把该节点连接到play animation目标,如图2(a)所示。
(3)在每个模型动画播放前增加一个delay节点,用于设置延迟播放的时间,以使全部动画按既定顺序播放。动画的总体实现如图2(b)所示。
图2 (a)动画播放蓝图局部图
图2 (b)动画蓝图总体实现
后期又实现了手柄按键触发,编程方法与键盘按键十分相近,在此不再赘述。
3.2.3 按键播放声音的实现
声音播放的实现和动画播放基本相同,需要在场景内添加音源并进行蓝图编程。具体步骤说明省略。
3.2.4 发射场灯光处理
在处理发射场灯光时,应该在考虑用户观感同时,兼顾灯光效果的真实性。添加和设置灯光的步骤如下:
(1)构建一个蓝图类,添加以下组件:一个灯柱模型、两个射线光源、两个点光源。
(2)把灯柱在蓝图编辑器视图场景中摆放好之后,让自发光的点光源放置在灯柱的灯泡处,射线光的光源也放置与灯泡齐平。
(3)通过对蓝图编辑器的set visibility节点进行设置,实现自定义的灯开关。
3.3.1 模型贴图的处理
在一些情况下,模型导入场景之后会产生贴图丢失或者错乱的现象,这时就需要开发者手动进行材质的编辑。UE4有很强大的材质编辑功能,在本系统用到的主要是对基本面和法线的渲染。基本面就是材质表面的颜色,默认情况下没有任何其他的渲染。法线渲染则是一种基本的渲染方式,通过编辑法线,材质能实现凹凸的效果,搭配基本颜色,可以制作出类似岩石的沟壑,木板的纹理之类的效果。完成后的材质编辑蓝图如图3所示。
图3 材质编辑蓝图
3.3.2 火箭发射的粒子特效
火箭发射时推进器会喷出大量的火焰和烟雾,这时就要用到粒子特效来体现。需要说明的是,粒子火焰也是一个物体,本系统中我们通过在火焰效果中添加绑定使其和火箭一起移动[4]。粒子特效初始化蓝图如图4所示。
图4 粒子特效初始化
此类功能在编程完成后可随即进行测试,观察运行效果。
3.3.3 跟踪摄像机的设置
在实际的火箭发射过程中,当火箭上升到一定高度后,地面的高速摄影机就无法继续拍摄到火箭。为了改善系统的用户体验,我们设置了一个跟踪摄像机全程拍摄火箭发射(直到卫星进入预定轨道前)并显示在地面控制室的大屏幕上。实现的方法通过在UE4的内容浏览器中对相机组件——SceneCapture进行设置。具体步骤不再赘述。
本系统中关卡切换同样是在关卡蓝图里编程的。无论采用传统键盘、鼠标输入,还是采用HTC vive手柄控制器输入来切换关卡,都可采用蓝图编程实现。具体做法是:打开关卡蓝图,新建一个输入节点,在输入节点后连接一个open level节点,节点中输入需要跳转关卡的名称。如图5所示,图中输入节点“Q”可切换到地面控制室关卡;“E”可切换到空间站关卡。
采用HTC vive手柄控制器输入来切换关卡,其实现方法与前文介绍的用按键实现的步骤基本相同,具体如下。
(1)打开关卡蓝图,点击事件图表。
(2)右键界面,找到运动控制器节点,该类节点包括运动控制器(右)肩部、运动控制器(左)肩部、运动控制器(右)扳机、运动控制器(左)扳机,每个按键都可以当做一个触发事件在蓝图中编程。
(3)输入触发节点后连接事件,可以是前文提到的动画播放(Play Animation),可以是控制声音的Set Active节点,也可以是控制关卡转换的Open Level节点,这样就可以实现手柄按键对关卡切换的控制。蓝图编程如图5所示。
图5 关卡蓝图控制设置
此外,在每一个关卡的界面上都设计了相应的提示信息,如图6(a)、6(d)所示。此类提示信息也用蓝图的Text Render组件实现。
UE4是一款所见即所得的游戏引擎,测试可以在各阶段编程实现后同时进行。本系统的测试阶段经过了播放场景、光照编译、蓝图和打包运行4个阶段的测试[5]。前三个阶段的测试均已完成,这里主要说明最后的打包测试阶段。
系统的测试环境为Inter i76700处理器,主频3.4GHz,内存 16GB,显卡为 GTX10808GB;windows 7操作系统。系统运行正常流畅,平均超过60fps。
图6 (a)火箭发射场场景
图6 (b)地面控制室场景
图6 (c)空间站场景
图6 (d)火箭发射场动画播放
运行系统,首先显示火箭发射场场景界面,如图6(a)所示。在火箭发射场景按键盘Q键或右手柄的肩部按键切换控制室场景,如图6(b)所示;按下E键或左手柄的肩部按键切换至空间站场景如图6(c)所示。在关卡1中按下F键实现动画的播放,如图6(d)所示。
本系统在制作开发过程中,首先用3Ds Max和Maya建好模型和动画,然后在UE4中完成了场景设置、关卡设置、交互功能、粒子特效、动画调用、音效等,实现了全部预期功能并达到了预期性能,具有画面质量高、视景效果好、交互方式新颖灵活的特点。未来,我们除了进一步优化场景的模型、材质等,使系统在防眩晕方面进一步改善外,还将增加更多的交互情节和航天科技知识,使体验者有更丰富、更新奇的体验,从而激发体验者了解航天科技知识的热情乃至探索太空未知领域的激情。
[1]Wikipedia.虚幻引擎[EB/OL].https://zh.wikipedia.org/wiki/%E8%99%9A%E5%B9%BB%E5%BC%95%E6%93%8E,2012-08-23.
[2]Epic Games,Inc..蓝图-可视化脚本[EB/OL].https://docs.unrealengine.com/latest/CHN/Engine/Blueprints/index.htm l,2016-08-16.
[3]Valve Corporation.Steam VR Support[EB/OL].https://support.steampowered.com/kb_article.php?ref=5254-FJKZ-7829,2016-04-15.
[4]Epic Games,Inc..级联粒子系统[EB/OL].https://docs.unrealengine.com/latest/CHN/Engine/Rendering/ParticleSystems/index.htm l,2016-08-16.
[5]Epic Games,Inc..打包项目 [EB/OL].https://docs.unrealengine.com/latest/CHN/Engine/Basics/Projects/Packaging/index.htm l,2016-08-16.
Design and Implementation of Space Technology Vision Simulation System Based on UE4 Engine
LI Nan,WANG Xiao-ning,LIN Zhi-feng,LIANG Xue-song,ZHU Zhi-qiang
(North China Institute of Astronautic Engineering,Langfang 065000,China)
This paper introduces the design and the implementation of a visual simulation system on rocket launching based on the Unreal Engine 4 (UE4).The system software runs on a high-performance graphics workstation that supports the HTC vive Virtual Reality(VR)suite.The models and animations in the virtual scene are edited by 3DS MAX and Maya.Resources and functions of the system are integrated and managed by the blueprints system of UE4.With first-person perspective,experiencers can roam in the scenes such as the rocket launching site and soon and interact with the HTC vive suite.
visual simulation;space technology;popularization of science;UE4;blueprints
TP391
A
1674-3229(2017)04-0011-06
2017-10-20
2015河北省科技厅科普展教品项目(15K55403D)
李楠(1976-),男,硕士,北华航天工业学院计算机与遥感信息技术学院讲师,研究方向:计算机应用。