基于Unity3D的虚拟校园漫游的设计与实现
2015-01-08王彩玲刘瑞香
王彩玲 刘瑞香 宋 钊
(西安石油大学计算机学院,陕西 西安 710065)
0 引言
目前,虚拟现实技术已经成为计算机技术中研究,开发和应用的热点,广泛的应用于教育[1-2]、医疗[3]、建筑、工业设计[4-5]、产品展示等各个领域。虚拟校园社区实现了对校园三维景观和教学环境的数字化和虚拟化。将学校风光用虚拟仿真实现,既可以为学校树立良好的形象,让来访者足不出户就可以身历其境的感受到真实的校园实景和有关介绍信息;还可以作为校园规划的辅助工具,提高校园管理的现代化水平[6-7]。
虚拟校园社区可以提供三维虚拟环境,用于支持对现实大学的资源管理、环境规划、学校发展和远程访问等。是校园景观和教学环境在计算机中的虚拟再现。它利用地理信息技术、虚拟现实技术、计算机网络技术等高新技术,实现对真实校园环境中的三维景观和教学环境的数字化和虚拟化。到那时,世界各地的人们不必亲临现场,只需在网上就能畅游其间,方便人们随时随地了解校园的情况。
虚拟校园为师生们提供了非常便利和快捷的交流,同时完善的虚拟校园系统集学习、工作、娱乐、生活为一体,增加了师生之间交流的趣味性,有利于师生之间的良好沟通。虚拟校园社区以网络为基础,利用先进的信息化手段和先进的计算机技术、网络技术、虚拟现实技术,实现学校与教学、科研、管理和生活服务有关的所有信息资源进行全面的数字化。把学校建设成面向校内外,也面向社会的一个超越时间、超越空间的虚拟校园社区,提高传统校园的效率,扩展传统校园的功能。最终实现教育过程的全面信息化,从而达到提高教育管理水平的目的。虚拟校园技术必将成为今后校园信息化发展方向的主流,而基于网络的大规模虚拟校园漫游将成为研究的新热点.本系统以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.2 Unity3d中虚拟场景的设计
Unity3d中的地形建立:
在Unity3D软件中通过Terrain菜单建立及修改地形。Terrain地形编辑工具可以根据具体的实地场景进行随意设置及修改。采用标准统一的地形,可以完成山地、城市和乡村场景的设计,具有友好的界面。同时,可以在整个地形上铺设地形纹理来装饰地图风景,还可以混合或合并地形纹理来平滑地过渡一个地图到另一个地图,或使地图的环境多样化。这极大方便了虚拟场景的制作。
1.3 Unity3D中三维模型的导入
Unity3D软件只支持fbx格式的三维模型,因此,在设计时,采用3DMax建模,将模型存储为fbx类型。在Unity3D中的asset文件夹中添加Object文件夹,此时,Unity3D将自动识别该模型,并将其Material和 Textures分离出来导入到Object的文件夹下面。此时,当模型导入时,我们可以在菜单栏Assetsimport 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 软件测试与优化
任何系统都需要进行黑盒子测试以发现系统存在的问题和漏洞。本系统也进行了相应的测试。在测试中发现,基于网络环境下,系统存在占用网络流量大,运行缓慢的现象。分析原因是因为测试电脑配置较低及网络带宽限制。这就要求我们从用户角度出发,在保证真实度的情况下尽量减少模型的数量,大部分建筑需要通过平面建模来优化模型的复杂度,在建模过程中尽量减少模型顶点和分段数,在unity3d处理过程中,尽量使用静态灯光,动态实时灯光相比静态灯光,非常耗费资源。所以除了能动的角色和物体静态的地形和建筑。尽量减少视角范围和距离,减少不必要的运行消耗。
4 总结
本系统通过Unity3D平台建立了一个虚拟系统,并通过C/S模式构建人物交互,采用HTML格式发布,几乎适应所有平台浏览。实现效果逼真仿真度高,系统运行稳定可靠性好,系统与用户交互性好,能够非常直观地带给用户身临其境的场景漫游效果,漫游过程场景切换顺畅,而且可以为场景提供丰富的多媒体影音交互。
Unity3D提供可视化的界面操作,地形制作和文理添加,以及拥有“对象碰撞检测”、“角色漫游”功能,方便了系统的开发。基于Unity3D的虚拟漫游技术原理与渲染效果非常适合虚拟校园漫游的设计,随着以后越来越多的漫游系统的需求,Unity3D引擎技术将会被更为广泛的应用。
[1]范立冬,李曙光,张治刚.虚拟现实技术在医学训练中的应用[J].创伤外科杂志,2008,12(9).
[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.
[6]张典华,陈一民.基于Unity3D的多平台虚拟校园设计与实现[J].计算机技术与发展,2013,24(2):127,135.
[7]马瑞.基于Unity3D的多平台三维虚拟数字校园的设计与实现[J].蚌埠学院学报,2014,3(2):13-16.
[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.
[9]Okabe M,Owada S,Igarashi T.Interactive design of botanical trees using freehand sketches and example-based editing [J].Computer Graphics Forum,Eurographics(S0167-7055),2005,24(3):487-496.
[10]Livny Y,Yan F L,Olson M,et al.Automatic Reconstruction of Tree Skeletal Structures from Point Clouds [J].ACM Transactions on Graphics (S0730-0301),2010,29(6):151-1:151-8.
[11]周希望,刘正东.虚拟校园的建模优化及Web3D交互技术[J].软件导刊,2010,9(1).
[12]付林.永丰大厦虚拟漫游数字平台的设计与实现[D].北京交通大学,2010(1).
[13]倪乐波,戚鹏.Unity 3D产品虚拟展示技术的研究与应用[J].数字技术与应用,2010(9).
[14]郭海新.Unity 3D与HTML交互机理的研究[J].煤炭技术,2012(9).
[15]毛天露,王兆其.个性化三维人体模型快速建模方法[J].计算机辅助设计与图形学学报,2005,17(10):2191-2195.
[16]干建松.基于Unity 3d的室内漫游的关键技术研究[J].盐城工学院学报:自然科学版,2011(20).
[17]何志毅,田金萍,李天松,等.虚拟人行走的动作融合[J].计算机工程,2009,35(22):267-271.
[18]甘建红,彭强,戴培东,等.基于 OBB层次结构碰撞检测的改进算法[J].系统仿真学报,2011,23(1):2619-2173.
[19]Gayle R,Manocha D.Navigating virtual agents in online virtual worlds[C]//Proceedings of the Web3D 2008.New York,NY,USA:ACM,2008:53-56.