基于Unity 3D的丝绸之路虚拟学习系统设计与实现∗
2020-05-15闫兴亚魏梦婕王馨梅
闫兴亚 魏梦婕 王馨梅
(西安邮电大学计算机学院 西安 710121)
1 引言
虚拟现实[1](Virtual Reality,VR)在教育领域的应用颠覆了传统的教学方式,通过虚拟化教学环境,学习者可以通过一定的硬件设备与虚拟世界进行互动实现知识的学习[2],解决传统课堂中互动性、情境性、沉浸性不强的问题,在教学的实践中具有广阔的应用前景。2003年美国林登实验室推出的Second Life(SL)项目和2009年澳大利亚和新西兰合作成立的虚拟世界工作组等是典型代表。其中,SL项目提出要探索个体在虚拟世界获得教育与成长的可能,学生可以采用一个“化身”投身到虚拟世界的学习中去,其具体执行过程与角色扮演游戏有些类似[3]。2011年以来,每年都会举行关于虚拟现实技术的专业国际会议IEEE VR(IEEE Virtu⁃al Reality Conference),有效促进了领域内学者之间的交流互动。2017年5月10日,IEEE(电气和电子工程师协会)与IEEE标准协会(IEEE Standards As⁃socaition)宣布了针对虚拟现实和增强现实的8个IEEE标准项目,其中包括沉浸式用户界面、真实世界的虚拟对象映射、虚拟对象与现实世界之间的互操作性等多个领域。同年,虚拟现实作为情景化学习的关键技术成为《2017新媒体联盟中国高等教育技术展望:地平线项目区域报告》十二项教育技术的重要发展之一[4]。
虚拟现实学习能够提高学生对知识的掌控力。Cai,Wang和Chiang设计了几个面向初中生的关于化学物质结构认识的虚拟融入操作实验,实验中,学生可以采用自然交互方式对虚拟出来的微观世界中的分子、原子进行操作、组合和创作[5]。虚拟现实学习环境还被应用在具体操作技能的培训课程中。Y Eugenia、Νikiteas Nikolaos、P Despina等通过在腹腔镜手术中使用虚拟现实模拟器构建训练环境,能够训练基础外科手术技能,提供改进腹腔镜手术性能的替代手段[6]。虚拟现实学习环境可以模拟危险性较强的现实环境,在避免伤害的情况下完成教学任务。Buono、Cortese和Lionett等设计的虚拟消防逃生系统,实验参与者对于灭火逃生相关概念的掌握以及对灭火器的使用、成功逃脱至集合点的能力均较佳。
基于此,本文提出基于Unity 3D的丝绸之路虚拟学习系统。Unity3D是一个对编辑器、地形编辑、着色器、脚本等特性全面整合的专业游戏引擎[7],可发布系统至Windows、Mac和Android等平台。丝绸之路虚拟学习系统以Unity3D为开发平台,以3Dmax,Maya,Photoshop等软件为辅助工具,搭建丝绸之路三维教学场景。系统搭建过程中实现了包括LOD、碰撞检测、自主寻路、基于NGUI的UI制作等技术,采用C#语言实现各模块之间的功能交互,创建了一个集专业性,沉浸感,交互性,趣味性等特点的丝绸之路虚拟学习系统。与传统学习方式不同,学习者通过与虚拟环境中物体进行动态交互,实现对知识的掌握与理解。实践结果表明,基于Unity3D的丝绸之路虚拟学习系统对于提高学习者的积极性有良好的作用。
2 系统总体构架模型
基于软件工程的思想,结合丝绸之路教学理念,丝绸之路虚拟教学系统的开发主要分为两个阶段:第一阶段是系统前期的分析策划与素材的收集、整理与制作;第二阶段是在Unity3D中进行场景的搭建以及和模块之间交互功能的实现。其流程图如图1所示。首先,根据系统的实际需求确定各模块的功能;其次,搜集有关丝绸之路的相关资料信息,确保系统中的知识教学与事实相符。搜集的资料包括,丝绸之路的地图,以及丝绸之路主要经过城市的人文和地理信息等等;再次,利用3Dmax或Maya等建模软件进行三维建模,相关场景平面图设计,将制作好的模型文件以FBX格式导出。最后将三维模型导入Unity工程中进行系统的第二阶段开发。第二阶段的开发包括两方面的内容:第一,场景的搭建,其中主要包括丝绸之路主要涉及城市的分布、周围环境、场景烘焙、碰撞检测等。第二,实现各模块功能的交互,这里采用C#语言进行模块功能的开发,完成丝绸之路虚拟学习系统。
图1 系统搭建流程图
3 系统实现的关键技术
3.1 基于边折叠的LOD算法
LOD[8](level of detail)细节层次模型,是一种保证绘制实时性的经典算法,广泛应用在场景可视化与视野仿真领域中。基本思想是:为每一个原始多面体模型生成具有不同复杂度的多个版本[9],在场景渲染过程中,根据物体离摄像机的距离来采用适当的模型来表达物体。如果模型远离摄像机,则选择较粗糙的LOD模型绘制,如果模型离摄像机较近则选择精细的LOD模型进行绘制。本文采用的是基于边折叠的LOD算法,具体方法如图2所示。
图2 边折叠法
边折叠算法的步骤可以表示为
1)删除所有同时包含顶点1和顶点2的三角形;
2)删除与顶点1相关的三角形,用顶点2来代替顶点1;
3)删除顶点1;
完成上述步骤,便可以得到简化后的图1。重复上述步骤最终可以得到图4。一般的,每此简化会去除一个顶点,两个面和三条边。
基于边折叠的LOD算法可以通过减少地形绘制所需的三角形个数生成连续的LOD模型,并且保留了模型的几何信息以及纹理、拓扑等重要特征信息。该算法是根据摄像机离模型的距离来选择适当的模型,在不影响画面视觉效果的前提下,通过减少场景的几何复杂度,提高图像渲染的速度,从而解决了系统运行流畅度的问题[10]。
3.2 射线碰撞检测
虚拟环境中碰撞检测的目标是如何在实时交互的需求下完成对复杂对象的碰撞检测[11]。例如:当移动物体遇到障碍物,如果没有设计碰撞检测,则移动物会穿过障碍物,从而产生失真现象[12]。一般的碰撞检测是通过检测两个实体所占的几何空间是否相交来判断是否发生了碰撞,无法确定碰撞的具体位置,本文采用的射线碰撞检测是检测虚拟世界中发出的一条射线与一个平面是否相交的问题[13],因此准确的碰撞需要的是精确计算出射线与物体表面的交点,即碰撞点位置。
假设射线公式是由式(1)所示,且空间中存在一个平面,指定p1为该面上的一点,以矢量N表示为该面的法矢量,以这两个矢量既能确定出这个平面,由式(2)表示出任意平面公式为
式中,P、P0、a均为三维矢量,其中P0表示为该射线的起点,P表示为射线上任意一点,a表示该射线的方向,t属于0,正无穷。当t=0时,P为七点P0,t为其他数值时,P则为射线上某一点,此时t则表示为该起点与该点之间的距离。
式中d为坐标系原点与平面距离。
假设射线与平面相较于一点P,则P必定为式(1)与式(2)的公共解,反之由以上二式解方程组得:
以式(3)带入式(1)即解出射线与平面的碰撞点位置。
3.3 自动寻路
Unity自从3.5版本之后增加了NavMesh寻路功能,但是由于不是自带的功能,所以需要设定网格和烘焙过程[14]。用户首先编辑好地形场景,然后将场景中的静态物体设置为Navigation Static物体,之后点击Bake进行导航烘焙,Unity将根据已经烘焙的物体在游戏三维坐标中Y轴的正向进行网格节点计算,从而形成一张在游戏场景中的淡蓝色网格节点导航地图。地图形成后,给需要被导航的游戏对象加上NavMeshAgent组件,这样游戏对象便可绕开障碍物并沿着最短路径到达目的点[15]。其主要代码如下所示:
Private NavMeshAgent agent;
Viod Star()
{
//获取组件
agent=GetComponent<NavMeshAent>()
}
void Update()
{
if(Input.GetMouseButtonDown(0))
{
//摄像机到点位置的射线
Ray ray=Camrea.main.ScreenPointToRay(Input.mousePosition);
RaycastHit rayhit;
if(Physics.Raycast(ray,out rayhit))
{
//判断点击的是否是地形
if(!rayhit.collider.name.Equals(“Terrain”))
{
return;
}
//点击位置坐标
Vector3 point=rayhit.point;
//转向
transform.LookAt(new Vector3(point.x,transform.posi⁃tion.y ,point.z));
//设置寻路的目标点
Agent.SetDestination(point);
}
}
}
3.4 基于NGUI的UI制作
用户界面(User Interface,UI)是任何系统都必不可少的一部分,好的UI设计应该能贯穿整个产品开发流程,而非单纯的图形界面设计,并且可以将系统功能逻辑分散化,不用关注跳转和显示关闭等细节问题,更好地展示系统本身的功能效果[16]。丝绸之路虚拟学习系统的界面设计采用的NGUI提供的界面工具来完成UI界面的制作。NGUI(Next-Gen UI)是使用C#语言编写的一个Unity插件。该插件严格遵循“KISS 原则”[17],即 Keep It Simple,Stupid,指的是UI设计应当注重简约。它将各个功能都封装成了脚本,并且将常用的一些组件做成了预设物,它可以在编辑状态下来任意调整位置及大小,还可以添加一些UI特效。在本系统中,利用NGUI插件制作了系统地图导航模型,系统菜单栏、按钮、工具箱、答题面板等界面。同时NGUI的Anchor能够使各个UI元素具有屏幕自适应功能,使系统能够适应不同分辨率的屏幕。
4 系统效果展示
基于Unity 3D的丝绸之路虚拟学习系统包括总路线图、城市漫游、城市概况认知、在线考评、资源库五个模块。系统效果及部分功能模块截图如图3~5所示。
图3 总路线图
图4 城市漫游
图5 城市概况
其中,总路线图是古丝绸之路所经城市的一个三维展示,用户可以看到古丝绸之路的全貌,并且可以点击地图上分布的城市名进行城市漫游。城市漫游是用户对城市进行第一视角的漫游,通过完成系统设置在建筑物中的任务,获得相应的道具,打开通关盒子才能进行下一个城市的漫游。该模块采用任务激励,使得系统具有一定的娱乐性,提高用户的学习兴趣。城市概况认知是丝绸之路主要城市的简介,在系统的右下角配以语音、文字解说,该模块使用户可以快速地了解城市的人文地理信息。在线考评是进入系统后的后台考评系统,是对用户关于丝绸之路的理论知识进行一个全面的测评。资源库是是对丝绸之路主要城市风土、特产以及城市主要建筑物的一个视频介绍。
5 结语
本文对基于Unity 3D的丝绸之路虚拟学习系统进行了详细的研究,文中重点讨论了虚拟学习系统的设计以及涉及到的关键技术,系统中引进了任务激励游戏机制,在发挥虚拟现实技术优势的同时,实现了学习者对所学知识积极主动的探索。虚拟现实技术是信息技术进步的重要成果,信息技术只有被接受与持续使用的时候,其价值才会真正发挥出来。未来虚拟学习必将成为教育发展的时代趋势,并将不断出现在多个领域。本系统的开发将会为其他领域的虚拟培训以及虚拟现实项目的开发提供一定的参考价值,同时具备推广应用价值。