张绍江
(天津中德职业技术学院,天津,300350)
基于Unity虚拟校园漫游系统的设计与开发
张绍江
(天津中德职业技术学院,天津,300350)
随着虚拟现实技术的不断发展和计算机硬件系统性能的不断提高,虚拟现实技术已被广泛应用于众多领域,虚拟校园漫游系统就是其中之一,它让学生足不出户就能游览校园全貌,感受校园文化,对学校的对外宣传起到积极作用。文章使用Unity游戏引擎设计了一套虚拟校园漫游系统,并介绍了该系统的开发流程和使用的关键技术。
虚拟现实;虚拟校园;漫游;Unity
虚拟现实(Virtual Reality,简称VR)是在综合使用计算机图形图像技术、传感器技术、人机交互技术、网络技术、多媒体技术等创设的一个以视觉感受为主,包括听觉等多种感受在内的人工虚拟世界,并在这个虚拟世界中运用多种交互手段给人一种多感官的刺激,是一种高级的人机交互系统[1]。同时,虚拟现实不仅是一个演示载体,还是一个设计工具,它以视觉为主要形式产生一个多维的信息空间,为我们创建和体验虚拟世界提供了有利的支持[2]。随着虚拟现实技术的不断发展和计算机硬件系统性能的大幅提升,虚拟现实技术的应用领域从最初的军事仿真已逐渐过渡到文物保护、交通模拟、城市规划、室内设计、游戏开发、教育教学等诸多领域,并取得了巨大的发展。其中虚拟校园漫游系统就是虚拟现实技术在校园景观展示方面的应用。
Unity是一款跨平台的游戏开发引擎,主要应用于虚拟现实、建筑可视化、三维视频游戏等互动系统的开发。其主要特点是入门简单、自动化程度高,可同时运行在windows和Mac OS操作系统下,支持C#、JavaScript、Boo三种脚本语言,其成品可发布至windows、Mac、Android等多种平台。
按照虚拟现实系统开发的一般流程,可以将虚拟校园漫游系统的开发流程分为素材的收集与整理、三维场景的建立与优化及系统交互的开发4个部分,如图1所示。
图1 虚拟校园漫游系统的开发流程图
素材的收集与整理为三维场景的建立提供校园内部建筑、场地、道路等尺寸数据和外观图像素材;三维场景建立后要优化并导入到Unity中进行使用;最后在Unity中进行系统交互的开发。
(一)三维场景建模技术
在三维场景的建立过程中,校园中的地面、建筑等主要使用3DS MAX软件来完成。先通过丈量好的尺寸数据或施工图纸绘出建筑外观轮廓线,再制作建筑物外墙,然后通过布尔运算和对多边形中的顶点、边、面和元素进行修改,完成建筑模型的建立。最后,将处理好的建筑外观图像作为建筑模型的贴图进行应用,如图2所示。
图2 使用3DS MAX进行建筑建模图
在3DS MAX中建立的三维模型需要导出到Unity中进行使用。常用的方法是在3DSMAX中将文件导出为.FBX文件,连同贴图一同放置到Unity的资源文件夹中。打开Unity后,即可自动加载,供开发人员使用。
对于天空盒的建立,Unity中提供了一个设置选项,可以方便地使用Unity中默认的天空盒资源,或者自定义5张可无缝连接图片进行天空盒的设置。
(二)三维场景的优化技术
三维场景中面数的多少直接关系到系统运行的效率,因此要尽量降低模型的面数,以达到系统流畅运行的目的[3]。
1.三维建筑的优化
一是将漫游过程中看不到的面降低其复杂程度,使用一个平面来代替;二是使用纹理贴图技术,将面数较多的外墙文字、门窗部分的模型,复杂的光影效果等元素进行先期渲染,然后作为虚拟校园中建筑的贴图使用,以达到减少面数的目的。
2.树木、路灯、隔离墩等场景元素的优化
在校园场景中,离不开树木、隔离墩、垃圾桶等场景元素,数量多且不是重点。可使用DoubleBoarding(交叉板)技术进行优化,即使用两个互相垂直且中心交叉的平面,并为其添加树木、隔离墩等场景元素的透明纹理。
3.实时交互技术
系统交互主要在Unity中开发。虚拟校园漫游系统中的交互主要是键盘与鼠标的交互,通过键盘和鼠标的控制改变场景中漫游视角的浏览位置与角度,主要使用C#脚本语言编写的脚本文件来实现。例如向前移动的交互代码为:
此外,GUI也是虚拟校园漫游系统的主要交互方式,负责系统漫游方式的选择、系统的帮助和退出。例如,创建“自动漫游”功能按钮的代码如下:
4.碰撞检测技术
碰撞检测是虚拟现实中一项重要技术,是基于现实生活中一个普遍存在的事实:两个不可穿透的对象不能共享相同的空间区域[4]。碰撞检测技术的主要目的是检测两个物体之间是否发生了碰撞,如果发生碰撞将如何进行处理。好的碰撞检测要求物体在场景中可以平滑移动[5]。在Unity中,内置了盒形碰撞器、球体碰撞器、胶囊碰撞器、网格碰撞器等来实现物体之间的碰撞检测。用于进行碰撞检测的函数有:
MonoBehaviour.OnCollisionEnter(Collision colli sionInfo)、
MonoBehaviour.OnCollisionExit(Collision collision Info)、
MonoBehaviour.OnCollisionStay(Collision collision Info),分别表示当进入碰撞器、退出碰撞器和逗留碰撞器时所触发的函数。
(一)系统的总体规划与功能设计
虚拟校园漫游系统一般是在网页浏览器上展示学校整体面貌的系统,为使用户能够直观获取校园的外观特征,校园中的建筑、场地等都真实重现,并且用户可以通过鼠标、键盘自主控制观看角度。虚拟校园漫游系统主要实现以下功能:
1.漫游功能
系统的漫游功能包含自动漫游与交互式漫游两种方式。自动漫游是指漫游路径已固定的方式,在该方式下浏览视角将按照规划好的路径进行运动,用户不能改变其状态。交互式漫游是用户可以通过鼠标、键盘等交互方式控制浏览视角与位置的方式,这种方式需要用户手动控制,灵活性更强。
2.GUI功能
系统提供操作方便的GUI用户界面,用于控制手动漫游与交互式漫游之间的相互切换,以及帮助、退出系统等功能。
(二)系统主要功能的实现
1.自动漫游功能的实现
自动漫游功能是按照预先设定好的路径进行的漫游,可以通过为显示漫游浏览内容的主摄像机(以后称为“漫游摄像机”)设定动画的方式来实现。这需要在Animation(动画)面板中为漫游摄像机设置关键帧动画,如图3所示。
图3 为漫游摄像机设置关键帧动画图
2.交互式漫游功能的实现
由于交互式漫游功能是用户控制漫游摄像机进行浏览的方式,整个漫游的路径受用户控制,为避免漫游摄像机与建筑、树木等碰撞后“穿入”其内部的情况,需要为场景中的物体添加碰撞器,进行碰撞检测。
交互式漫游使用Unity中的第一人称角色控制器来实现,给人以强烈的沉浸感。在实现上使用一个名称为“First Person Controller”的物体作为用户操作的对象,同时添加“Character Controller”这一角色控制组件和Mouse Look、Character Motor、FPSInput Controller三个C#脚本组件,即可实现交互式漫游功能。
3.GUI界面的实现
GUI界面主要用于实现手动漫游与交互式漫游之间的切换、打开帮助和退出系统等功能,以界面功能按钮为主。例如,由手动漫游向交互式漫游进行切换时,用户只需使用鼠标点击“交互式漫游”按钮,然后系统将关闭自动漫游摄像机,打开交互漫游摄像机,完成功能的转换。具体程序如下:
void OnGUI(){
if(GUI.Button(newRect(400,560,100,50),"交互式漫游")){
其他功能按钮使用同样的方法进行创建,并为其添加被点击时所执行的语句。完成后的效果,如图4所示。
图4 GUI界面功能按钮图
随着计算机技术和虚拟现实技术的不断发展,虚拟现实技术已经成为用户通过计算机来获取知识信息的新途径。虚拟校园漫游系统是使用Unity进行开发的能够在浏览器上使用的校园展示系统,它为学生及其家长提供了一个了解学校的平台,对学校的对外宣传起到了积极的作用。
[1]石教英.虚拟现实基础及实用算法[M].北京:科学出版社,2002:1-3.
[2]Steven M.Drucker,David Zeltzer.Intelligent Camera Control in a Virtual Environment[J].USA:Computing&Electronic Books,1998,34-57.
[3]贾民政,刘书香.3ds Max中低多边形模型的创建方法研究.北京工业职业技术学院学报[J],2012 (7):36-39.
[4]王祎.虚拟现实中碰撞检测关键技术研究[D].吉林:吉林大学,2009.
[5]王树斌.浅析Unity3d开发游戏流程及常用技术[J].电脑知识与技术,2012,8(22):5351-5352.
编辑 朱荣华
G712
A
2095-8528(2014)02-065-03
2014-07-03
张绍江(1980-),男,天津市人,硕士,天津中德职业技术学院艺术系讲师,研究方向为影视动画与虚拟现实。