1. 引言
华北理工大学坐落在沿海现代化城市、环渤海经济区工业重镇—唐山市唐山湾生态城,是一所具有全方位教育层次的省属重点骨干大学。虚拟校园漫游系统,将传统的几何建模技术与基于图像的绘制技术进行了结合,在电脑上真实的再现了校园环境及校园文化,浏览者不用亲自到学校就可以形象直观体验亲身游览校园的感觉,在体会到于校园中自由漫步的同时,又可以在特定的场景中进行环视,犹如亲身站在校园中观看景观,增强了用户体验。同时,对学校的招生宣传、发展规划、数字化建设等都具有重要的意义。虚拟校园漫游的开发有很多种工具和平台,最常用的一种方法是使用3Ds Max进行建模、材质等前期处理,然后导出到Unity 3D软件中进行后期的交互处理。下面就使用这两款工具开发虚拟校园漫游过程中设计到的关键技术进行介绍。
2. 虚拟校园漫游系统研究技术路线
虚拟校园漫游系统是以真实校园为整体蓝本,采用3Ds Max建模技术以及Unity3D虚拟现实开发平台等,并使用其他网络技术实现网络在线浏览。
具体技术路线图如图1:
1) 收集相关文献资料,进行调研分析,设计系统的结构和功能。
2) 根据华北理工大学校园不同的建筑、场合,收集数据,整合分析,完成系统设计。
3) 校园空间数据的获取与处理:通过相关软件获得华北理工大学地形的俯视图。
4) 三维虚拟场景建模,对模型进行数据处理、场景分块与模型优化后,集成三维场景。
5) 以Unity3D为虚拟现实开发平台,以3Ds Max为场景建模软件,通过C#.Net语言与HTML的集成整合,完成基于Web的虚拟校园的开发。
6) 完善并优化虚拟校园漫游平台,网上试运行。
3. 虚拟校园漫游系统功能及简单操作
虚拟校园漫游系统的设计目的是通过对华北理工大学校园环境的模拟并利用三维场景建模技术、优化及交互技术等来实现校园全景全方位展示、自由漫游及校园管理等功能,提供真实、全面的数据,增强媒体的交互性和沉浸感。系统功能主要包括虚拟场景展示、虚拟漫游、校园信息管理。虚拟场景展示包括教学楼、宿舍楼等建筑;虚拟漫游包括自动漫游和自由漫游;校园信息管理主要是校园简介、用户
管理系统维护等作用。用户通过在网页上登录漫游系统可以全方位浏览校园风光、掌握校园实时信息等,具体功能如下:
1) 通过鼠标及滚轮来实现视角的变换和全方位观看校园内建筑物、景观等虚拟场景;
2) 通过鼠标点击相应按钮用户可沿着设定的路线自动展示校园风光,也可按着用户自己的兴趣和需要选择路径对虚拟校园进行漫游;
3) 通过键盘、鼠标等动作控制访问者的漫游方向、速度、视角等;用户可以开门进入某个建筑物,参观教室、食堂、宿舍等;
4) 通过鼠标点击部分场景可为用户提供声音介绍和角色互动,同时也可以点击相应的按钮实现部分场景的文本提示的显示与隐藏。
4. 虚拟校园漫游系统的关键技术
4.1. 场景三维模型的构建及优化
虚拟校园漫游中的场景模型主要涉及教学楼、宿舍楼、餐厅等建筑物以及操场、道路、树木等,是一个大场景,建模时需要对整个校园的这个大场景进行区块划分,各个区块制作完成后导入到一个场景中,将极大的降低建模的难度。
在进行场景建模时,我们并没有校园的详细的测量参数等资料,可以使用GETscreen软件截下通过Google Earth得到的卫星影像,在3Ds Max透视图中建一个面片并将截下的航拍图赋给该面片,作为建模时的布局参考。建筑物主体建模使用二维样条线勾勒出轮廓,然后挤出建筑物的高度,附属物用基本几何体变形制作,细节部分如门窗等用贴图来表现。路面、人工湖建模基本同建筑物建模方法一样。花草树木是场景中最多的装饰物,花草树木的逼真程度影响到场景的真实感,可以通过交叉的面片来实现,这种方法极大的降低了模型面片数,并配上良好的照片素材和透明贴图来实现模型效果 [1] 。如图2所示。
校园漫游系统要在用户的网页上浏览,则对软件的大小有比较高的要求,系统运行不流畅对用户体验有很大影响,因此,场景优化是必不可少的步骤。三维模型的面数越多,渲染时就会消耗很多系统资源,将用户看不到的面或线删除,同时对于合并的物体使用同一种材质,从而加快渲染的速度。建模时如果模型的面距离比较近,容易引起闪烁,因此需要将面的距离设置到合适的距离 [2] 。对灯光也做了相应的优化,在漫游场景中通过顶点灯渲染整个画面,从而即使是配置低的计算机也同样可以顺畅运行该系统 [3] 。
4.2. 系统交互性设计与实现
人机交互技术是通过计算机输入及输出设备,以有效的方式实现人与计算机相互传递信息的技术。在本系统中主要的人机交互技术包括GUI界面设计和漫游功能设计。用户通过网页可以直接打开漫游系统,并可进入使用界面选择多个漫游模式,包括自动漫游、自由漫游、地图导航、使用帮助等 [4] 。选择自动漫游,系统将以预先规定的路线指引用户参观校园; 如果选择自由漫游,用户则可以通过鼠标或者键盘上的按键以第一人称视角随意改变视点。
针对本文所设计的虚拟校园系统,总体遵循的原则是在功能逻辑块划分上应该区分清楚并联系紧密,尽量做到操作简便、客户端提示信息的及时正确显示。具体交互功能主要有虚拟角色的创建和登陆服务器等UI界面的设计和场景之间的碰撞、多人实时在线的客户端间的信息交互等。

Figure 2. The scene graph of teaching building
图2. 教学楼场景图


Figure 3. The picture of campus information management
图3. 校园信息管理图
例如,在界面中设计一个自动漫游的Button,在脚本中代码如下:
voidOnGUI()
{varbuttonWidth = 100;
varbuttonHeight = 50;
varbuttonX = (Screen.width - buttonWidth) ;
varbuttonY = (Screen.height - buttonHeight) ; //在屏幕右下角绘制一个button组件
UnityEngine.Rect r =new Rect();
if (GUI.Button( new Rect(buttonX, buttonY, buttonWidth, buttonHeight), 自动漫游))
{//在调试控制台打印一些文字
Debug.Log(开启自动漫游模式);
}
}
校园信息管理如图3所示。
4.3. 碰撞检测
在虚拟环境当中,碰撞检测技术是用来检测两个不可穿透物体模型之间、物体模型与场景之间是否发生碰撞的技术。在Unity3D中Collider组件的主要功能就是进行碰撞检测,并且在使用刚体时,一般会和Collider共同使用。发生碰撞的条件是:1) 发生碰撞的两个物体必须都带有Collider组件;2) 发生碰撞的两个物体至少有一个带有刚体;3) 发生碰撞的两个物体必须有相对运动。虚拟环境当中,碰撞检测的主要任务是:检测基于的虚拟校园仿真技术基础模型是否发生碰撞、何时发生碰撞以及和谁发生了碰撞。在Unity3D中可以在脚本语言中可以实现控制:
//碰撞开始时会调用一次
voidOnCollisionEnter (Collision other) {
print (“碰撞开始”);
}
//碰撞持续发生的时候调用
voidOnCollisionStay (Collision other) {
print (“碰撞进行中”);
}
//碰撞结束时会调用一次
voidOnCollisionExit (Collision other) {
print (“碰撞结束”);
}
//检测物体和谁发生碰撞时可用:
voidOnCollisionStay (Collision other) {
print (“碰撞到的物体的名字:”+other.gameObject.name);
}
5. 结束语
基于Web的华北理工大学虚拟校园漫游系统具有完整的系统结构,比一般的虚拟校园漫游系统具有更强的交互性、沉浸感、实用性、跨平台性以及地方特色性等。通过校园漫游系统用户可以更方便认识、了解校园,也在提高我们学校知的名度、构建数字化校园、提升校园文化实力等方面起到了积极作用。
基金项目
国家大学生创新实验项目(编号:X2017007)。