基于虚拟现实的沉浸式语言学习系统的制作方法

文档序号:18220835发布日期:2019-07-19 22:59阅读:239来源:国知局
基于虚拟现实的沉浸式语言学习系统的制作方法

本发明涉及虚拟现实领域的一种虚拟现实视频处理以及虚拟现实游戏的制作技术,具体地,涉及一种基于虚拟现实(vr)的沉浸式语言学习系统。



背景技术:

虚拟现实技术目前是一个新兴的技术,针对虚拟现实的开发也层出不穷,各项技术也已经较为成熟。而目前对于虚拟现实技术的应用主要是在游戏、影视等娱乐领域,而在室内装潢领域虚拟现实虽有些应用,但是技术并不是很成熟,应用面也不广。虚拟现实的设备主要分为一体机式和分离式的。一体机式的设备即为直接戴上头戴式可进入虚拟现实环境,直接在设备内部进行展现内容。若是应用于游戏,还需加上配套的一系列定位系统以及手握的控制杆。此类虚拟现实设备成本较高,使用的技术复杂,且主要应用于游戏,因为游戏制作可以直接针对虚拟现实来做,而电影的拍摄极少特别考虑虚拟现实的因素,否则成本会极其巨大,需要用特殊的摄像机,处理也极其复杂。

另一种分离式的设备的成本则相对低了许多,是大多数初次体验虚拟现实的消费者的选择。该设备同样是头戴式的,而区别在于分离式的设备需要插入手机,通过手机播放处理过的视频或者运行特殊的游戏,再经过设备内部的镜片的光学作用来实现虚拟现实的环境。分离式设备的价格非常低,谷歌推出过一款卡纸盒的虚拟现实,仅用卡纸和两块镜片拼成,成本仅为2美元,折合人民币不到15元。在国内稍微也有不少这样的产品,譬如暴风魔镜,产品价位跨度也不小,从入门级的不到一百元的产品到精美一些的五百元左右的。手机上主要是进行分屏处理,以通过镜片处理实现虚拟现实环境。游戏或视频运行时,会调用手机中的陀螺仪的数据来得知使用者此时的头部仰角以及旋转的角度。

而虚拟现实视频方面,目前的应用也不是很多,主要受限于器材方面。拍摄虚拟现实视频的器材与普通的器材不同,需要全景摄像机,再经过后期处理、剪辑、拼接等步骤,才能生成一段可以用分离式设备观看的虚拟现实视频。至于虚拟现实直播,目前也有,但是普及程度极低,效果也不尽如人意。



技术实现要素:

针对现有技术中存在的上述不足,本发明的目的是提供一种基于虚拟现实(vr)的沉浸式语言学习系统,该系统采用分离式虚拟现实设备,将虚拟显示技术应用到语言教育领域,形成一个用于语言学习的沉浸式语言学习系统。

本发明是通过以下技术方案实现的。

一种基于虚拟现实的沉浸式语言学习系统,包括:

-虚拟现实游戏实现模块:基于unity的游戏编写框架,开发适用于虚拟现实设备的语言学习游戏,并发送至虚拟现实设备;

-虚拟现实视频实现模块:采用gopro进行全景视频拍摄,并通过kvp对视频进行后期缝合及调整,产生语言学习视频,并发送至虚拟现实设备;

-功能界面模块:在目录界面设置链接到语言学习游戏和语言学习视频的选项,并根据需要对语言学习游戏和语言学习视频进行修改;提供对虚拟现实设备和/或gopro的操作控制;

-虚拟现实设备:提供语言学习游戏和语言学习视频的沉浸式环境。

优选地,所述虚拟现实游戏实现模块包括:场景搭建单元、游戏环节控制器单元、玩家控制单元、玩家界面展示单元、地形加载器单元以及虚拟现实处理单元;其中:

所述场景搭建单元,创建语言学习游戏的场景,并通过unity提供的预制件搭建物体显示在场景中;

所述游戏环节控制器单元,控制语言学习游戏的整个进程;

所述玩家控制单元,实现用户以及游戏物品的移动;

所述玩家界面展示单元,提供用户交互界面;

所述地形加载器单元,设置语言学习游戏中的地图,包括墙壁、用户的初始位置、游戏物品以及目标点,并对地图中的各部分进行初始化,载入场景搭建单元中制作完的物体作为目标点;

所述虚拟现实处理单元,调用虚拟现实设备提供的虚拟现实资源包,并处理语言学习游戏与虚拟现实设备之间的冲突。

优选地,所述游戏环节控制器单元,在unity内置的场景初始化函数中赋予位于场景中的物体以游戏控制器的类型,并且设置该物体为在游戏中不会被销毁的部分。

优选地,所述游戏控制器的类型为unity内置的游戏控制器类型。

优选地,在地形加载器单元中,将一块平面分为9乘9的小格子,设定数个9乘9的数组,每个数组对应一个地形,即一个关卡;在每一个数组中,用0表示正常的地面,即用户与游戏物品都能够经过的地面,用1表示墙壁所在的位置,用2表示游戏物品所在的初始位置,用3表示目标点,即要把游戏物品最终放置到的地方,用4表示用户的初始位置;在载入物体时,每载入一个目标点,将需过关卡的分数加1。

优选地,在玩家控制单元中,用户的移动具体体现在场景中的操作,通过实现用户自己设计的逻辑和调用unity内置的碰撞判断函数完成,并通过虚拟现实处理单元调用虚拟现实设备提供的虚拟现实资源包的接口,使用手柄进行控制。

优选地,所述gopro为6台,6台gopro环形固定到固定机位上,通过功能界面模块实时监测及调整6台gopro之间的角度,并控制gopro拍摄。

优选地,所述功能界面模块安装于移动设备上。

优选地,所述虚拟现实设备采用暴风魔镜。

与现有技术相比,本发明具有如下有益效果:

1、本发明结合了教育与虚拟现实技术;

2、本发明低成本的开发与使用;

3、本发明整合了语言学习游戏与语言学习视频。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1为本发明系统框图。

具体实施方式

下面对本发明的实施例作详细说明:本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。

实施例

本实施例提供了一种基于虚拟现实的沉浸式语言学习系统,包括:

-虚拟现实游戏实现模块:基于unity的游戏编写框架,开发适用于虚拟现实设备的语言学习游戏,并发送至虚拟现实设备;

-虚拟现实视频实现模块:采用gopro进行全景视频拍摄,并通过kvp对视频进行后期缝合及调整,产生语言学习视频,并发送至虚拟现实设备;

-功能界面模块:在目录界面设置链接到语言学习游戏和语言学习视频的选项,并根据需要对语言学习游戏和语言学习视频进行修改;提供对虚拟现实设备和/或gopro的操作控制;

-虚拟现实设备:提供语言学习游戏和语言学习视频的沉浸式环境。

优选地,所述虚拟现实游戏实现模块包括:场景搭建单元、游戏环节控制器单元、玩家控制单元、玩家界面展示单元、地形加载器单元以及虚拟现实处理单元;其中:

所述场景搭建单元,创建语言学习游戏的场景,并通过unity提供的预制件搭建物体显示在场景中;

所述游戏环节控制器单元,控制语言学习游戏的整个进程;

所述玩家控制单元,实现用户以及游戏物品的移动;

所述玩家界面展示单元,提供用户交互界面;

所述地形加载器单元,设置语言学习游戏中的地图,包括墙壁、用户的初始位置、游戏物品以及目标点,并对地图中的各部分进行初始化,载入场景搭建单元中制作完的物体作为目标点;

所述虚拟现实处理单元,调用虚拟现实设备提供的虚拟现实资源包,并处理语言学习游戏与虚拟现实设备之间的冲突。

进一步地,所述游戏环节控制器单元,在unity内置的场景初始化函数中赋予位于场景中的物体以游戏控制器的类型,并且设置该物体为在游戏中不会被销毁的部分。

进一步地,所述游戏控制器的类型为unity内置的游戏控制器类型。

进一步地,在地形加载器单元中,将一块平面分为9乘9的小格子,设定数个9乘9的数组,每个数组对应一个地形,即一个关卡;在每一个数组中,用0表示正常的地面,即用户与游戏物品都能够经过的地面,用1表示墙壁所在的位置,用2表示游戏物品所在的初始位置,用3表示目标点,即要把游戏物品最终放置到的地方,用4表示用户的初始位置;在载入物体时,每载入一个目标点,将需过关卡的分数加1。

进一步地,在玩家控制单元中,用户的移动具体体现在场景中的操作,通过实现用户自己设计的逻辑和调用unity内置的碰撞判断函数完成,并通过虚拟现实处理单元调用虚拟现实设备提供的虚拟现实资源包的接口,使用手柄进行控制。

进一步地,所述gopro为6台,6台gopro环形固定到固定机位上,通过功能界面模块实时监测及调整6台gopro之间的角度,并控制gopro拍摄。

进一步地,所述功能界面模块安装于移动设备上。

进一步地,所述虚拟现实设备采用暴风魔镜。

下面基于具体的语言学习游戏、语言学习视频实例,对本实施例进一步详细说明;在以下描述中,虚拟现实设备采用暴风魔镜4,移动设备采用手机。

本实施例提供了一个用于语言教育的系统框架,并有配套的负责用户注册、用户管理的网站以及教育类游戏。在用户体验上,虚拟现实能给用户带来完全不同的语言学习体验,能更好地集中用户的注意力,极为真实地模拟出真实环境,使得学习语言不再那么枯燥。

在虚拟现实游戏部分,基于现有的硬件,即暴风魔镜4,来进行开发。暴风魔镜公司有专门针对开发者的虚拟现实sdk接口,可以直接下载使用。而开发平台以及动画引擎的选择上,经过调研以及考虑到暴风魔镜sdk的需求,使用unity引擎进行开发,学习成本较低,效果也能达到需求,总体较为理想。以下将详细介绍基于unity和暴风魔镜的虚拟现实sdk进行开发的语言学习类游戏。

在本实施例中,基于传统的推箱子游戏,做了一个有助于背单词的游戏。即把传统推箱子游戏中的箱子换成了字母,在完成任务之后,连成一排之后能拼成一个单词。所以对于本游戏针对的人群(学龄前儿童)来说,即使原本有些推箱子的关卡有些难度,这些字母拼成的简单的单词也能作为一个提示,帮助他们完成游戏,同时也能帮助他们记忆单词。在后文中,为叙述以及理解的方便,提及的箱子若无特殊说明即认为被替换为字母。

此游戏操作较为简单。在手机上运行之后,将手机连接进入暴风魔镜中,使用暴风魔镜产品配套的手柄,即可随时随地进行游戏,仅需单手操作。配戴虚拟现实眼镜也可以避免儿童过长时间低头使用手机。

在软件部分,使用unity内置功能,自动生成android安装包,并通过暴风魔镜官方网站发布到暴风魔镜平台上,用以提供用户使用界面以及提供虚拟游戏及vr视频的接口。

由于软件部分的主要功能在于提供vr游戏和视频接口,所以软件的主题即为用户交互界面,通过unity来搭建用户界面的模型,做出一个具有视觉错觉的3d三角形通道,在它的上面有一只球由于重力模块不停地滚动,利用视觉上的错觉和画面的更新。侧面有两块按钮,左右按钮分别导向后续提到的vr背单词游戏以及独立制作的vr特色教学视频。

该界面操作较为简单,主要在于内嵌游戏及视频的链接,需要根据暴风魔镜sdk进行更改。符合暴风魔镜中的头控式操作,利用视觉中心作为指针,长按模块表示确认,简单易操作。

在虚拟现实视频部分,针对中小学生的语言教育目的,仿照当前流行的面对面语言教学服务以及stem教育内容,决定采取前期拍摄加后期缝合的方式来制作实地vr视频,避免了vr动画视频的空洞及技术门槛,同时将语言教学的功能融合到有趣的stem课堂中,做到寓教于乐。接下来将详细介绍我们gopro和kolorautopanovideopro(后文统一用kvp来替代)来进行实地拍摄以及后期处理产生具有语言教育意义的vr内容呈现。

拍摄内容采用stem中关于engineering的部分,目前系列为制作arduino为核心的智能遥控小车课程,由上海交大密西根学院的口碑课程vg100,工程学导论老师亲自教授。老师来自美国,英语纯正且具有感染力,另外课程仿照工程学导论中的project部分,老师教授过三年以上,因此可以保证vr视频内容的丰富性和语言教学要求。

此外,为了完善基于vr的沉浸式语言学习系统,开发一个web应用进行用户注册和用户注册,并对整个系统进行管理以及展示。这个web应用后台使用python的flask框架,前端主要jinja模板进行渲染,数据库使用mongodb。此web平台主要功能包括,登陆与注册,学生个人信息管理,vr视频资源集中展示与管理以及vr游戏展示。其中注册的账号与android端同步,用户可以自由选择在web端或者android端进行注册与登陆。

学生个人信息管理的内容包括学生的基本信息如名字,学校等,此外还有学生的缴费情况以及课程或教学游戏的获取资格。该web平台不仅旨在发布我们自己的vr教学资源,也希望达到用户可以自己上传自己制作的教育类vr视频,经过审核后同样可以让通过授权的其他用户进行下载以及学习,这就需要用flask框架中提供的文件上传以及解析储存功能。并且,用户自行上传的视频采用人工审查以及脚本审查结合的方式,为此在后台里用python编写了一个对视频内容进行提取以及审查的程序,辅助对视频内容进行核查。

对于本发明的游戏部分,这里将做简单说明,叙述基于unity的游戏编写的框架,以及各个部分的实现。

首先,本游戏编写主要分为六个部分:场景搭建、游戏环节控制器、玩家控制、玩家界面展示、地形加载器以及虚拟现实处理部分。在介绍各个部分之前,我们首先介绍一下unity运行模式。除去场景搭建,剩余的五个部分都是使用c#脚本编写,作为unity运行时不同的类,由unity运行游戏时自动解析。脚本会绑定在不同的展现在场景里的动画界面的物体上,以脚本来控制各个物体,同时,在游戏中每个物件都可以有自己的记号,或者称为标记,可以在脚本中通过这些记号来获得这些物体的状态,比如位置,是否显示该物体等等。在脚本中,还可以调用库函数,来实现一些动画,也可以做一些逻辑判断、切换场景、判断物理碰撞、控制物体位移、实现与用户交互等等。总之,除了看到的场景中的物体的设计不能由unity的脚本实现,需要作者通过unity内置的模型手动搭造设计,其他都是通过c#脚本完成。

在脚本中,unity实现的类都是继承自同一个它的内置的类(monobehaviour),在这个内置的类中,提供了一些函数接口,最经常使用的是几个帮助初始化函数结构和维护函数运行的函数,比如有些函数中可以实现在编译时即可初始化当前类中的某些参数或者执行某些指令(后文称其为初始化函数),有些函数可以指定在动画效果的第一帧或者游戏刚刚开始的那一刻执行某些命令(后文称其为启动函数),有些函数可以指定在游戏运行的每一帧的瞬间执行什么指令,主要用于维护游戏运行状态(后文称其为刷新函数)。还有一些辅助的函数,比如可以实现一些鼠标点击的时候进行的函数、鼠标经过某个区域的时候执行的函数,也有支持连接服务器的函数,比如在游戏中连接服务器时执行的函数,可用于通知用户等待连接,或者连接失败时执行的函数,告诉用户错误信息。不过本游戏由于是虚拟现实游戏,没有鼠标的操作,只有虚拟现实资源包中的手柄操作,而且目前还没有搭建并连接服务器,所以这些函数的就没有应用。较为有用的是碰撞发生时执行的unity内置的碰撞判定函数,在推箱子这个游戏中可以判断用户与箱子是否碰撞并执行相应的函数,在其他游戏中也应用甚广。

首先介绍场景搭建。由于在unity中,初始界面是一个完全空旷的三维空间,必须先设立一个“地面”,然后所有的游戏都在这个地面上进行。要制造这个地面,可以随意创造一个unity中的3d物体,然后在它的材质一栏中将其替换成“平面”即可。在unity中,可以在它的官方资源库中找到很多“材质”的资源包,这些材质可以导入到unity中,并通过给物体施加材质来改变物体的外观。例如应用类似于草地的材质,改变地形,使其看上去更加美观。在unity中,搭建场景时,经常需要使用重复的物体,所以unity提供了预制件的功能。预制件的功能是,用户可以在场景中首先自己搭建一个自己想要的物体,可以是复杂的、多个模块拼起来的,然后将其通过unity制作成预制件,然后用户即可将该预制件保存在自己的资源栏下的预制件文件夹中,之后要重复使用相同的模型的时候,直接在预制件文件夹中拖拽相应的预制件进入场景中,并挪动到合适的位置即可。本实施例使用简单的立方体加上木纹材质做成箱子以及障碍物,并用球形做成目标点和代表玩家的点。在搭建完成后,就可以通过脚本来调用这些预制件,使其显示在场景中了。具体实现方法我们将在下文的地形加载器中提到。

本游戏应用除了虚拟现实处理的五个部分,即场景搭建、游戏环节控制器、玩家控制、玩家界面展示,和地形加载器,皆是继承自unity内置的monobehaviour类。在游戏环节控制器部分中,本实施例在初始化函数中赋予了绑定这个脚本的物体以游戏控制器的类型,并且设置它为在游戏中不会被销毁的部分。这样做可以确保在游戏初始化的时候就有一个游戏控制器,而且游戏环节控制器在游戏运行时不会由于一些因素被删除,能保证游戏的正常运作。比如在切换场景时,unity内部处理方式可能会将某部分物体重置,或者直接销毁所有该场景中的物体,在新的场景中再重新加载。这并不是我们所希望看到的,因为我们有时会希望在游戏加载器中存储一些游戏进行的信息,比如玩家的得分等等,或者在其他游戏中,可能有其他项目要记录,游戏控制器出于任何理由都不应该被销毁。而在加载当前的场景时,会将当前的等级进行计算。在刷新函数中,控制器每一帧都会读取当前的得分,并将其显示出来。当总得分等于在该关卡中的所有得分时,即为所有目标点上都有箱子(即可能出现箱子比目标点多的关卡),游戏环节控制器会退出该等级并进入下一个等级的游戏。总的来说,控制器就是控制游戏的整个进程的。

在玩家界面展示部分中,本实施例在初始化函数中获取了在动画界面中的用户交互界面的内容,即当前阶段的等级数,以及目前的得分情况。获取该内容之后就可以实时修改它。得分环节主要是在游戏环节控制器中实现的,在这个用户交互界面中,主要实现的是给用户能重新开始关卡的提示,并实现这个重置关卡。重置关卡可以通过重新加载这一关的场景实现,所以主要是将当前的等级记录下,并加载对应的场景即可实现重置。

在地形加载器中,正如其名,每一关的地图,即墙,用户的初始位置,箱子,以及目标点都是在这一部分中进行实现的。我们将一块平面分为9乘9的小格子,并且在这一部分中,设定数个9乘9的数组,每个数组对应一个地形,即一个关卡。在数组中,我们用0表示正常的地面,即人与箱子(这里被换成了字母)都可以经过的地面,用1表示墙壁所在的位置,2表示字母所在的初始位置,3表示目标点,即要把字母最终放置到的地方,4表示玩家的初始位置。而在设计完地形之后,需要分别初始化,载入之前制作完的预制件物体作为目标点。并且在载入时,每载入一个目标点,我们就将需要过关的分数加一,这样就不用每次新载入地形时都要手动设置其过关分数了,只需要考虑如何设计地形以及单词即可。由于最后的目标地必须连成一排,且难度不宜过高,主要以思路与模型为主,所以本游戏设计的关卡都较为简单,后续可以再多加创造,并适当加入难度大一些的单词,帮助记忆。

玩家控制部分是本游戏最难实现的部分,人物以及箱子的移动都是要在这一部分实现,而在unity中,碰撞等的实现不是非常简单的。首先,要先判断玩家输入的方向键指令与玩家目前面朝的方向是否一致,若是不一致,先用旋转函数,将玩家转向,面向其输入指令的对应的方向。然后通过玩家面对的方向发射一条虚拟射线,长度为一个单位。然后利用内置函数,判断该射线是否碰撞到物体。若是碰撞到了箱子,则箱子也向同一方向发射一个长度为一个单位的射线,此时判断有没有碰到墙壁或者是别的箱子,若没有,则箱子和玩家一起移动一格。而若是一开始发射的射线就碰到了墙壁,则玩家不会进行移动。而若是一开始玩家发射的射线没有碰撞带任何物体,则表示玩家移动方向上没有任何物体,玩家可以直接朝其输入的方向挪动一格。至于玩家的移动具体体现在场景中的操作,都是通过unity的内置函数完成的,初始的三维游戏版本是使用键盘输入,使用wasd来控制方向。后续以虚拟现实游戏为标准进行改进,调用虚拟现实资源包的接口,使用蓝牙手柄来进行控制,视线无需离开游戏界面与虚拟现实眼镜。

在虚拟现实处理部分中,做的工作主要是调用使用的硬件暴风魔镜提供的配套软件的虚拟现实资源包,并且处理一些虚拟现实游戏与初始的三维游戏的一些冲突之处。在这个资源包中,主要是处理输入部分,即将键盘上的wasd控制方向替换成使用手柄控制方向。而且由于界面是通过手机的分屏显示,unity中原本的摄像机,即可以看到的画面的来源,也需要进行替换,换成了资源包中的特殊摄像机。在生成手机上的安装包的时候,在unity中勾选上支持虚拟现实包,即可生成可以用于手机应用程序的安装包。

对于本发明的android客户端应用部分,以下将做详细说明。

先介绍unity。通过unity中的函数和类来制作动画,在地形加载器中,需要加入直线沟道和球的模型,控制大小符合视觉感官后设定空间位置,然后加入重力模块用以驱动运动之后设定好开始和结束的时间并调整重力模块参数,重复动画。

另外再添加带有链接的两个按钮模块和标题,控制它们在视角中的位置,达到整体的和谐。链接指针需要根据魔镜sdk以内嵌游戏及视频模块的要求进行调整。魔镜平台发布应用的时候最终确定。

对于本发明的视频产生部分,以下将做详细说明,叙述基于gopro的全景视频拍摄以及后期通过kvp来进行视频的后期缝合及调整产生较高质量的虚拟现实视频的过程。

首先在全景视频的拍摄过程中,需要将6台gopro环形固定到已经固定机位的配套机架上,通过手机实时监测彼此角度差距合适无死角且达到要求视频质量后进行拍摄。尽量保持教师及需要用到的部件处于独立全景摄像机的中间位置,以减少画面失真和后期调整的难度。另外需要尽量保证教师和展示部件距离摄像机不小于1.5米,避免画面比例失调。

由于gopro摄像机脱离电源只能续航半小时左右,所以尽量保持每节课程时间为25分钟。

关于摄像机的输入输出帧率,我们选择1920*1440作为输入帧率,拍摄帧速率30fps,这样的话后期缝合后会输出4k,及4096*2048的mp4格式视频,一方面保证了视频的清晰度,同时也减少了视频的处理时间。

在拍摄好了每节视频后,根据相机编号以及课程节数来对视频进行编号。然后进行缝合处理,通过kvp,添加6节视频,使用gopro自带操作器对齐时间线,然后调整视角进行视频拼接,通过垂直线调整画面,得到原始的vr视频,然后通过锚点等工具进行局部的视频调整,最后添加制作好的片头和结尾就完成了vr视频的制作。

该视频智能小车系列包括arduino基础介绍,小车构造,arduino功能模块和拼装指导四部分构成,每部视频开头都会有相关术语辅以实例的说明,结尾也会有这些词汇的复习,最大程度保证了教学内容的易懂性,用户在学习系列课程的同时自然地接受英语的输入,达到动手动脑相互促进的效果。

最后将完成好的vr视频上传到魔镜平台,通过后台审核后既可以公布出来供用户观看。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1