基于5G网络的VR虚拟现实旅游平台的设计与实现
作者: 殷凤梅 程洋
摘要:如今,随着人们生活质量的提高,旅游已经是绝大多数家庭在节假日用来放松心情、增进感情的不二之选。但面对旅游景点经常人山人海的情况,急需一个基于5G网络的VR虚拟旅游平台。该平台通过提供360度全景,游客可以利用虚拟现实头盔观看旅游景点的全景,足不出户便能体验到身临其境的感觉。
关键词:虚拟现实;VR旅游;5G技术
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2022)25-0064-03
开放科学(资源服务) 标识码(OSID) :
1 引言
VR(Virtual Reality,简称VR) 技术的快速发展[1]和5G(5th Generation Mobile Communication Technology,简称5G) 网络的逐渐普及,为VR虚拟现实旅游平台的实现提供了保障。虚拟旅游是通过计算机模拟再现景区环境,借助VR设备使人足不出户便可置身于模拟环境中,遍览外地的风光美景。
模拟旅游景区环境可以通过两种方式实现:三维建模方式和VR全景方式。目前,大多数的景区利用三维建模方式模拟景区环境。这种方式虽然可以准确地模拟出景区的空间布局,但是不能真实地再现景区环境。另外,三维建模的成本过高,不宜普及。于是,出现了利用VR全景的方式模拟再现景区环境。这种方式通过相关的设备拍摄景区实景,并制作出360度全景,游客利用VR头盔可以观看景区的全景。与三维建模方式相比较,VR全景方式的真实感更强,能真实再现景区的全貌,让用户体验到身临其境的感觉。另外,VR全景的成本较低,可通过网络迅速传播。
基于VR全景方式的优势,本文提出一种基于5G环境下的VR虚拟现实旅游平台的实现方案[2]。
2 问题分析
各级政府十分重视旅游业的发展,旅游市场近几年的收入以及变化趋势如图1所示。旅游作为群众精神娱乐的主要方式,虽然在国民的消费中占有很大的比例,但还是存在一些弊端:1) 游客对景点的内容开始疲劳,很难对同一个景区进行二次消费。2) 游客不再满足传统的图文展示和游玩内容,传统的景点宣传方式逐渐降低了游客的热情。3) 游客通过网络查询景区信息、自主规划线路时,会因线上和线下信息的不对称,无法获得真实直观的景区实况。因此,现有的景观旅游发展模式急需向大数据旅游、智能旅游等全球旅游模式发展转型,以促进大数据旅游,增强游客的旅游体验感。
传统旅游业的抗风险能力低,其敏感性主要体现:1) 容易受到气候、环境和季节等因素的影响。舒服的气候、环境和充足的时间等因素可以带动游客。与工作日相比较而言,节假日期间,许多景区人流激增,人数爆满,所以景点具有一定时间的淡季和旺季。2) 容易受到自然灾害的影响。旅游业依靠自然发展,难以避免地震和海啸等自然灾害,另外新冠肺炎疫情也会导致不同程度的旅游需求减少,影响旅游业的发展。受新冠肺炎疫情影响,全球经济疲软,旅游业损失惨重。根据联合国数据,2020年和2021年全球旅游业收入损失合计约3.3万亿美元,折合人民币约21万亿元。疫情终将过去,但这次新冠肺炎疫情造成的巨大损失也敲响了旅游业的警钟,需要利用5G的优势,创新融合共同发展,培养新的旅游方式。所以基于5G网络的VR虚拟现实旅游平台的开发迫在眉睫。
3 相关技术介绍
3.1 VR全景技术
VR全景技术是一种基于全景图像的真实场景虚拟现实技术,是虚拟现实技术的核心部分。全景是一种通过计算机技术,将一组或多组由摄像机环路360°拍摄的照片拼接成全景图像,实现全方位的交互式观看,从而还原和显示真实场景的方法。
VR是虚拟现实(Virtual Reality) 的缩写,是一种新型的视觉显示技术。它通过拍摄构建一个三维的仿真环境,让观看者可以通过网络调整图像、放大图像、缩小图像、移动观看等控制,获得三维空间的感觉,达到身临其境的效果。通过深入编程,它还可以实现场景中的热点链接、多场景间的虚拟漫游、雷达定位导航等功能,让观看者可以在每个场景中四处走动,清晰地看到每个场景的细节[3]。
3.2 5G技术
第五代移动通信技术(5G) 是新一代宽带移动通信技术,具有高速、低延迟、大连接等特点。5G通信设施是实现人机互联的网络基础设施。
4 虚拟现实旅游平台
4.1 平台功能简介
在分析了用户需求的基础上,本文设计的VR虚拟现实旅游平台主要包括景区导览、景区漫游、VR展示3个模块,如图2所示。
景区导览是整个VR虚拟现实旅游平台的开始。在景区导览中,平台将以360度全景来展示景区的导游图、各个景区入口处的图片。并且用户可以进行景点图片、图文信息热点等设置。景区漫游是对一个景点提供相关的景点介绍,如旅游地概括、各级行政地图及GPS坐标、旅游地交通、景点的住宿餐饮历史等,同时本平台还可以提供语音解说服务。VR展示主要是对景点进行全方位的VR展示,让用户可以在任意地点通过VR设备来访问任意景点的360度VR全景,让用户享受身临其境的感觉。
4.2 平台功能实现
VR虚拟现实旅游平台在技术实现上主要分为三个部分:全景拍摄、软件实现和VR实现。
1) 全景拍摄
VR全景拍摄,顾名思义就是拍摄我们能够看到的身边360°景观的视频。传统的视频拍摄受到相机镜头的影响,只能拍摄镜头前方180°的景观。而VR全景视频可以看到镜头附近360°和上下180°的一切景观。可以让用户有更加完美的沉浸感和体验感。
利用全景相机、三脚架、全景云台设备进行拍摄。将全景相机装在全景云台上,然后将全景云台连接手机蓝牙,打开专门的手机全景云台适配软件,软件启动之后,自动地旋转拍摄,并由软件自动拼接合成[4]。
由于拍摄设备的不同,拍摄方法也会不同。以GoPro 6为例,它拥有6个摄像头,因此每个全景视频拍摄将生成6个片段,这些片段被导入Kolor Autopano 视频用于拼接和编辑,形成完整的360°全景视频,再由GoPro导入到计算机,所有要缝合的视频都要放在同一个文件夹中。
通过将这些视频直接拖到Autopano视频软件界面,可以快速导入这些视频。单击工具栏中的同步窗格,底部有两个按钮:音频同步和运动同步。分别点击这两个按钮,可以看到多个视频的开始时间已经改变,这是自动同步的结果。最后,单击下面的应用按钮进行确认[5]。如图3所示。
接下来,点击顶部的缝合按钮,在打开的缝合窗口中做一些设置,然后点击“缝合”按钮打开缝合相关工具和预览窗口。你可以看见几个视频已经被整合,下面可以进行各种调整。另外,点击预览窗口左下角的“编辑”按钮,还可以修改和编辑全景视频,手动弥合拼接缝,保存后返回自动切换视频,然后就可以渲染和输出,完成了一个完整的全景视频。
2) 软件实现
通过UnityEngine来实现开发,主要代码如下:
namespace Valve.VR{
using System;
using UnityEngine;
public partial class SteamVR_Actions{
private static SteamVR_Action_Boolean p_default_InteractUI;
private static SteamVR_Action_Boolean p_default_Teleport;
private static SteamVR_Action_Boolean p_default_GrabPinch;
private static SteamVR_Action_Boolean p_default_GrabGrip;
......
public static SteamVR_Action_Boolean default_InteractUI{
get{
return SteamVR_Actions.p_default_InteractUI.GetCopy<SteamVR_Action_Boolean>();
}}
public static SteamVR_Action_Boolean default_Teleport{
get{
return SteamVR_Actions.p_default_Teleport.GetCopy<SteamVR_Action_Boolean>();
}}
public static SteamVR_Action_Boolean default_Grabpinch{
get{
return SteamVR_Actions.p_default_GrabPinch.GetCopy<SteamVR_Action_Boolean>();
}}
public static SteamVR_Action_Boolean default_GrabGrip{
get{
return SteamVR_Actions.p_default_GrabGrip.GetCopy<SteamVR_Action_Boolean>();
}}
......
private static void InitializeActionArrays(){
Valve.VR.SteamVR_Input.actions = new Valve.VR.SteamVR_Action[]{
SteamVR_Actions.default_InteractUI,
SteamVR_Actions.default_Teleport,
SteamVR_Actions.default_GrabPinch,
SteamVR_Actions.default_GrabGrip,
......
};
Valve.VR.SteamVR_Input.actionsIn = new Valve.VR.ISteamVR_Action_In[]{
SteamVR_Actions.default_InteractUI,
SteamVR_Actions.default_Teleport,
SteamVR_Actions.default_GrabPinch,
SteamVR_Actions.default_GrabGrip,
......
};
Valve.VR.SteamVR_Input.actionsOut = new Valve.VR.ISteamVR_Action_Out[]{
SteamVR_Actions.default_Haptic};
Valve.VR.SteamVR_Input.actionsVibration = new Valve.VR.SteamVR_Action_Vibration[]{
SteamVR_Actions.default_Haptic};
Valve.VR.SteamVR_Input.actionsPose = new Valve.VR.SteamVR_Action_Pose[]{