【摘 要】虚拟校园建设是虚拟现实的重要应用领域,目前相关的研究多是构建单机系统下的应用。为了提高网络传输效率和交互能力,在校园场景建模中需要在模型逼真度和模型大小之间进行平衡。本文以西安石油大学校园场景为建模对象,介绍了校园场景总体设计思想,重点介绍了实现虚拟场景的合并、人物的虚拟漫游设计及基于C/S模型的动态人物的交互。针对虚拟漫游网络占用大量网络带宽,影像虚拟漫游系统运行的流畅性,提出了在建模优化及程序中的优化实施措施,经过软件测试,表明该优化方法能够有效地降低网络带宽,能够一定程度上提高虚拟漫游系统运行效率,验证了在网络环境下的操作流畅性,为构建虚拟数字化校园及相关方向研究提供实用参考价值。
【关键词】虚拟现实;虚拟校园;校园漫游;Unity3D
Design and Realization of Virtual Campus Roaming Based on Unity3D
WANG Cai-ling LIU Rui-xiang SONG Zhao
(School of Computer Science, Xi’an Shiyou University, Xi’an Shaanxi 710065, China)
【Abstract】Virtual campus use is one of important application field of virtual reality. Nowadays, most virtual systems are almost stand-alone system. In order to improve the efficiency of systems’ network transmission and interaction ability, the model fidelity and model size should keep a right balance. This paper takes the campus scenario f Xi’an shiyou university as modeling object, introduces the overall design thought, and how to realize the consolidation of virtual scene, the design of virtual roaming of characters and the interaction of dynamic characters based on C/S model are mainly introduced. Many factors such as network bandwidth in system implementation and implementation measures in modeling optimization and program optimization are discussed. This paper verifies the system’s operation fluency under network environment, and provides practical reference value for building a virtual digital campus and the relevant research.
【Key words】Virtual reality; Virtual campus; Campus roaming; Unity3D
0 引言
虚拟校园社区可以提供三维虚拟环境,用于支持对现实大学的资源管理、环境规划、学校发展和远程访问等。是校园景观和教学环境在计算机中的虚拟再现。它利用地理信息技术、虚拟现实技术、计算机网络技术等高新技术,实现对真实校园环境中的三维景观和教学环境的数字化和虚拟化。到那时,世界各地的人们不必亲临现场,只需在网上就能畅游其间,方便人们随时随地了解校园的情况。
虚拟校园为师生们提供了非常便利和快捷的交流,同时完善的虚拟校园系统集学习、工作、娱乐、生活为一体,增加了师生之间交流的趣味性,有利于师生之间的良好沟通。虚拟校园社区以网络为基础,利用先进的信息化手段和先进的计算机技术、网络技术、虚拟现实技术,实现学校与教学、科研、管理和生活服务有关的所有信息资源进行全面的数字化。把学校建设成面向校内外,也面向社会的一个超越时间、超越空间的虚拟校园社区,提高传统校园的效率,扩展传统校园的功能。最终实现教育过程的全面信息化,从而达到提高教育管理水平的目的。虚拟校园技术必将成为今后校园信息化发展方向的主流,而基于网络的大规模虚拟校园漫游将成为研究的新热点.本系统以unity3d作为开发平台,结合AUTOCAD规划总平面图[8];利用AutoCAD、3DMAX、Photoshop、Unity3D等软件实现了某高校虚拟校园设计,该虚拟校园场景具有良好的沉浸感,通过网上发布,测试了其流畅性,可以作为该学校的数字解说平台使用。
1 三维虚拟校园漫游的总体设计
1.1 虚拟校园漫游开发总体框架
虚拟校园的设计总体框架如图1所示。 如图1所示,首先,基于通过测量、观察、相机记录等方式获取校园地理信息数据。包括校园建筑平面图AutoCAD和校园建筑鸟瞰图[9-10],以及花草、树木、道路的具体数据及信息。
然后,使用3d建模软件例如maya 3dmax 等专业建模软件,制作三维数字模型。本系统使用的是最为流行的3dmax 对校园建筑模型进行加工和渲染。从而得到更加真实的三维立体模型。
第三步,在Unity3D中添加地面。将上述步骤建好的三维建筑模型根据地理坐标依次添加到Unity3D中,进行场景融合。以及纹理添加、灯光渲染等工作[11-13]。
第四步,通过unity3D的跨平台性,生成可以通过网页浏览的Web格式的虚拟社区[14]。
图1 虚拟校园总体设计流程
Unity3d中的地形建立:
在Unity3D软件中通过Terrain菜单建立及修改地形。Terrain地形编辑工具可以根据具体的实地场景进行随意设置及修改。采用标准统一的地形,可以完成山地、城市和乡村场景的设计,具有友好的界面。同时,可以在整个地形上铺设地形纹理来装饰地图风景,还可以混合或合并地形纹理来平滑地过渡一个地图到另一个地图,或使地图的环境多样化。这极大方便了虚拟场景的制作。
图2 Unity3D的Terrain菜单项
1.3 Unity3D 中三维模型的导入
Unity3D软件只支持fbx格式的三维模型,因此,在设计时,采用3DMax建模,将模型存储为fbx类型。在Unity3D中的asset文件夹中添加Object文件夹,此时,Unity3D将自动识别该模型,并将其Material 和 Textures 分离出来导入到Object的文件夹下面。此时,当模型导入时,我们可以在菜单栏 Assets\import new asset, 选择我们要导入的*.fbx[15]。
1.4 建筑模型纹理设计
在 Unity3d 环境中设计纹理及贴图之前应先确定各模型的材质、贴图和物理属性。在获取相关属性后,将模型导入Unity3d中进行Shader 脚本设置和纹理贴图。Unity3D中的shader脚本,采用shaderlab脚本语言编写,shader的框架如下:
shader "shader name"
{ properties
{ _Color("Diffuse Color", Color) = (1,.5,.5,1)
_Texture("Main Texture", 2D) = ""{}
}
SubShader
{
Tags{"Queue"="Transparent"}
pass
{
Tags{}
Material{}
}
}
Fallback ""
}
其中,properties 中定义的变量,是可以采用编辑器编辑的。在Unity3D编辑器中选中一个材质,材质中的shader里面定义在properties 中的变量就会出现该材质的属性面板中,可以手动设置对应的属性。其中,纹理属性后面,还有一些可选的属性可以设置,用于设置纹理的坐标,和其他一些属性。
1.5 虚拟场景的合并
在进行模型设计后,需要将多个模型及场景依据平面图进行场景整合,还需要背景配乐等多媒体文件支持。在设计时,通过建立 Directional Light和sky box,可以使场景更加明亮和逼真。
2 虚拟系统的实现
2.1 漫游技术的实现
在虚拟漫游中,我们希望通过控制鼠标或者键盘实现视角和场景的转换。在具体实现中,首先,在3DMax 建模软件中分别制作人物的行走动画、站立动画、跳跃动画和跑步动画,制作完毕后,将动画模型保存为 .fbx 文件格式。将动作模型导入到Unity3D 项目的Object文件夹中。然后,在栏中选中导入动画模型,在属性面板中设置模型不同动作的开始和结束帧,所拖拽动画模型到舞台中去。
通过Character Moto命令给动画模型添加人物控制器,在属性面板中调节Radius和Height来调节人物控制器的轮廓、高度。在软件中添加Javescript控制代码实现运动控制。具体的,设计鼠标控制需要对人物添加Mouse Look旋转控制器,设计键盘控制需要对人物添加FPS Input Controller移动控制器。对相应控制器设计即可实现视角随着鼠标方向的旋转和键盘控制人物实现前后左右的移动[16-17]。
在具体设计时,需要考虑当角色移动时,需要配合相应的动作来完成角色移动的效果,比如:跑动作、跳动作等,为了给用户带来视觉的更加逼真的效果,在设计时,在animatioController.js添加动作代码, 其中核心代码如下:
if(Input.GetAxis("Vertical") .1)//如果是竖直方向的向前运动
{
if(Input.GetButton("Run"))//按下run按钮
{
animation.CrossFade("run");//播放run动画
walkSpeed = 4;//同时设置速度为4
}
else
{
animation["walk"].speed = 1;//其他时候则为走路 animation.CrossFade("walk");//播放走路动画
walkSpeed = 1;//同时设置速度为1
}
if(Input.GetAxis("Vertical") -.1)// //如果是竖直方向的向后运动
{
animation["walk"].speed = -1;//速度设置为负值
animation.CrossFade("walk");//播放走画面
walkSpeed = 1;
}
else
{
animation.CrossFade("idle");//其他时候为站立动画
}
if ( Input. GetI}eyDown ( " space" ) )//当空格键被按下就执行跳跃动画。
animation. CrossFade(”jump");
}
水平方向的控制和垂直方向运动相同代码在此省略。
2.2 碰撞检测[18]
碰撞检测[19]是模拟现实环境中的人物及物体在遇到障碍物时发生的本能反应,例如,当角色遇到墙壁,如果没有设计碰撞检测,则角色会出现穿墙而过的失真现象,在现实中,应该是当发现墙壁与角色存在一定距离时,则需要停止前进。在这种情况下,设计人员需要添加碰撞检测函数。在Unity3d软件中提供了Mesh Collider 撞检测组件,该组件可以有效计算模型表面的网格自动生成碰撞面,但是如果模型表面的网格较多会影响执行效率,通过给网格较多的模型添加一个基本体作为该模型的父模型,设置成不可渲染则可以有效解决该问题。
2.3 系统联机功能实现
当用户漫游在数字校园中,如果只包含静态的建筑,而缺乏了动态的人物交互,这样的设计缺乏真实的体验,在本系统中,采用C/S客户端服务器模型,实现场景中的人物互动。其中,服务器相对独立,可支持多个客户端的访问。两者之间交互的原理为:客户端向服务器发送请求,服务器给予反馈。当访问者按下移动按键时,客户端将事件发送至服务器,服务器端判断角色该如何移动才能将事件返回给客户端,当客户端接受到服务器返回的数据后,开始移动角色,同时服务器端还会将其他访问者的移动事件发送给客户端。这样客户端就可以显示其他访问者的模型位置了。
具体设计时,服务器默认开启,服务器端核心代码:
Void OnGUI(){
Switch(Network.PeerType){
Case NetworkPeerType.Disconnected:
StartServer ();
Case NetworkPeerType.Server:
Break;
Case NetworkPeerType.Client:
Break;
Case NetworkPeerType.Connecting
Break;
}
}
Void StartServer()
{
if(GUILayout.Button("创建服务器”))
{
//服务端创建服务器
NetworkConnectionError error=Network.Connect(IP, Port,false);
//如果连接失败,将错误信息打印出来
Debug.Log("连接状态:"+error);
}
客户端核心代码为:
Void OnGUI(){
Switch(Network.PeerType){
Case NetworkPeerType.Disconnected:
StartConnect ();
Case NetworkPeerType.Server:
Break;
Case NetworkPeerType.Client:
Break;
Case NetworkPeerType.Connecting
Break;
}
}
Void StartConnect()
{
if(GUILayout.Button("连接服务器”))
{
//客户端连接服务器
NetworkConnectionError error=Network.Connect(IP, Port);
//如果连接失败,将错误信息打印出来
Debug.Log("连接状态:"+error);
}
服务器创建完成后,客户端需要向服务服务器发送消息请求,并且确保服务器能够将来自某一客户端的请求消息返回给连接到服务器的所有客户端。需要首先创建一个网络视图组件,然后就可以使用RPC向服务器发送消息了。使用RPC发送消息的方法如下:
networkView.RPC("RequestMessage",RPCMode.All ,inputMessage);
在服务器端或客户端中接收消息请求的方法如下:
void RequestMessage(string message,NetworkMessageInfo info) {
//message:消息内容
//info:消息附带信息
}
模拟效果如下:
图3
3 软件测试与优化
任何系统都需要进行黑盒子测试以发现系统存在的问题和漏洞。本系统也进行了相应的测试。在测试中发现,基于网络环境下,系统存在占用网络流量大,运行缓慢的现象。分析原因是因为测试电脑配置较低及网络带宽限制。这就要求我们从用户角度出发,在保证真实度的情况下尽量减少模型的数量,大部分建筑需要通过平面建模来优化模型的复杂度,在建模过程中尽量减少模型顶点和分段数,在unity3d处理过程中,尽量使用静态灯光,动态实时灯光相比静态灯光,非常耗费资源。所以除了能动的角色和物体静态的地形和建筑。尽量减少视角范围和距离,减少不必要的运行消耗。
4 总结
本系统通过Unity3D平台建立了一个虚拟系统,并通过C/S模式构建人物交互,采用HTML格式发布,几乎适应所有平台浏览。实现效果逼真仿真度高,系统运行稳定可靠性好,系统与用户交互性好,能够非常直观地带给用户身临其境的场景漫游效果,漫游过程场景切换顺畅,而且可以为场景提供丰富的多媒体影音交互。
Unity3D提供可视化的界面操作,地形制作和文理添加,以及拥有“对象碰撞检测”、“角色漫游”功能,方便了系统的开发。基于Unity3D的虚拟漫游技术原理与渲染效果非常适合虚拟校园漫游的设计,随着以后越来越多的漫游系统的需求,Unity3D引擎技术将会被更为广泛的应用。
【参考文献】
[2]吴燕玲.基于Wed的玩味动画技术及其在教学中的应用[J].中山大学学报:自然科学版.2002,12
(6):53-56.
[3]詹胜利.Web3D技术在网络教学中的应用[J].网络技术与网络教学,2006.1:15-17.
[4]来翔.面向电子商务的虚拟商品模型研究[J].浙江大学,2003.
[5]沈璞.虚拟现实技术在现代工业设计中的应用[J].制造业自动化,2004.11
(6):76-78.
[8]Okabe M, Igarashi T. 3D modeling of trees from freehand sketches [C]//International Conference on Computer Graphics and Interactive Techniques. ACM SIGGRAPH 2003 Sketches Applications. New York, USA: ACM, 2003:1-1.