版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业论文基于Photon的校园虚拟漫游系统的设计与实现学院专业名称班级学号学生姓名指导教师年月日第页基于Photon的校园虚拟漫游系统的设计与实现摘要近年来,虚拟现实技术(VirtualReality,英文简称VR)在城市规划、工程设计、旅游、教育等领域都有着极为广泛的应用。而随着计算机网络技术的不断发展,单机版的虚拟漫游系统已经不能满足人们的需求,将网络技术应用到虚拟漫游系统中已经成为一个热门话题。本文以东北大学秦皇岛分校单机版校园虚拟漫游为基础,设计并实现了基于Photon技术的东北大学秦皇岛分校校园虚拟漫游系统(简称东秦VRS)。本论文首先探讨了Photon和Unity3D网络游戏开发技术,而后深入分析了东秦漫游系统的需求并对系统的设计进行了详细的阐述,最后论文结合当下流行的游戏优化技术着重介绍了客户端程序的优化技巧。本系统使用C#语言开发,主要采用了Photon和Unity3D网络游戏开发工具,完成了用户注册、登陆、聊天、移动、断线控制等功能。关键词:虚拟漫游,Photon,Unity3D,校园漫游
DesignandRealizationoftheCampusVirtualRoamingSystemBasedOnPhotonAbstractInrecentyears,virtualrealitytechnology(VirtualReality,theabbreviationVR)inthefieldofurbanplanning,engineering,tourismandeducationhaveaverywiderangeofapplications.Withthecontinuousdevelopmentofcomputernetworktechnology,thestand-aloneversionofthevirtualroamingsystemcannotmeetpeople'sneeds,networktechnologywillbeappliedtothevirtualroamingsystemhasbecomeahottopic.Inthispaper,NortheasternUniversityCampusVirtualTourstandaloneversionoftheprogram,basedonthedesignandimplementationofresearch-basedonlinegamePhotonTechnology,NortheasternUniversityatQinhuangdaoCampusVirtualRoamingsystem(referredtoastheDongQinVRS)for.ThispaperfirstdiscussesthePhotonandinUnity3Donlinegamedevelopmenttechnology,andthenanalyzestheEastQinroamingsystemdesignrequirementsofthesystemwereexplainedindetail,thefinalpapercombinescontemporarypopulargameoptimizationtechniquesfocusonoptimizingtheclientprogram.ThesystemusesC#languagedevelopment,themainuseofthePhotonandUnity3Donlinegamedevelopmenttool,completedtheuserregistration,login,chat,move,breakcontrol.KeyWorks:VirtualRoaming,Photon,Unity3D,CampusRoaming目录1绪论 11.1研究背景 11.2研究现状 21.3研究研究的目的与意义 31.4研究的主要内容 31.5本章小结 32相关技术简介 42.1Photon网络游戏引擎简介 42.2Unity3D游戏引擎简介 52.3Unity3D与Photon的关系 72.4Unity3D和Photon交互方式 72.5本章小结 83东秦VRS的系统分析 93.1需求分析 93.2系统设计目标 103.3系统功能结构 103.3.1系统总体功能结构 113.3.2系统网络结构 123.4本章小结 124东秦VRS的系统设计 134.1系统整体设计 134.2服务器程序架构 134.3客户端架构 154.3.1客户端总体结构 154.3.2状态模式简介 164.3.3中间件结构 184.4本章小结 225东秦VRS的系统实现 235.1注册及登陆功能 235.2人物移动功能 255.3断线状态机 275.4配置文件加密 295.5本章小结 306东秦VRS的性能优化 316.1客户端优化技术 316.1.1LOD 316.1.2遮罩剔除 326.2服务器端程序改进措施 346.3本章小结 35结论 36致谢 37参考文献 38附录 39附录A 39附录B 491绪论1.1研究背景随着计算机技术的发展,人们对信息的获取方式已经不仅仅的局限于打印输出和屏幕显示这样浅显的层次。人们更多地渴望通过视觉、听觉、触觉、肢体语言及命令等方式获得一个立体的综合信息,将感性知识与理性知识相结合,从而达到身临其境之感。这些要求使得信息的处理不再是单一维度的获取、输出,而是建立在一个更高层次的多维度信息空间之上,虚拟现实技术(VirtualReality,英文简称VR)无疑将会成为支撑这个多维度信息空间的关键技术。游戏产业在经历了20世纪末的初期形成阶段,于近几年呈现出井喷式的快速发展状态,现已成为日本、美国、英国、韩国等发达国家的支柱型产业之一。当前中国游戏产业正处于快速成长期,产业规模不断扩大。VR技术作为游戏技术的衍生品已被广泛的应用于教育、军事、建筑、医疗、工业设计等各个领域。VR系统是以计算机技术为主体,以对现实世界的抽象研究调查数据为依据,以人的参与为核心,从而形成的一种可以人机互动的高技术模拟系统。虚拟校园,是虚拟现实技术在现代教育中最早的应用,它实现了对校园三维景观和教学环境的数字化和虚拟化,在学校的教学资源管理、环境规划和学校发展等许多方面发挥了重要的作用[1]。校园虚拟漫游系统的研究对校园建设具有重要意义,以VR技术为支撑,将学校风光通过虚拟仿真实现,既可以为学校树立良好的形象、提高学校的知名度、宣传校园文化,还可以作为校园规划的辅助工具,提高校园现代化管理水平。将校园虚拟漫游系统与学校的有关信息相结合后,可以提供给师生一个三维可视化的信息介绍与查询环境。同时它还可以促进远程教学的发展,为数字校园的建设提供一个良好的平台。目前,校园虚拟漫游系统大多是以VR技术为支撑的单机版漫游系统,这类系统虽然可以很好的模拟校园环境,为校园发展提供宣传规划服务,但因为用户功能缺少粘性导致这类系统难以牢牢的吸引用户人群。用户往往在体验一次之后就对这类单机系统失去了兴趣,网络社区和网络游戏作为互联网飞速发展的主流推动力量,他们对用户的吸附能力是有目共睹的。因此将网络功能引入校园虚拟漫游系统中,利用网络互动的魅力增加虚拟漫游系统的用户吸附能力,成为了一个值得研究和探讨的问题。1.2研究现状对于VR技术的研究国外大学及科研机构相对起步要早。其中美国加州大学北卡分校及伯克利分校在这方面走在了世界前沿,他们拥有世界一流的漫游技术研究室,研究室里配有许多前沿的虚拟现实技术相关设备。研究室把建筑漫游作为自己的主要研究方向,到目前为止,他们完成的实时漫游大型建筑己达十个以上,其中至少有三项是在建筑施工前进行的事前仿真,让用户和设计者在工程开始之前,就可以对整个设计做出评估并反复修正设计方案[2]。早在1977年,北卡分校就实现了由一亿三千万个三角形构造的电厂模型的实时交互漫游,他们采用的纹理盒消除模型、多细节层次模型、可见区预计算等算法大大提高了场景渲染的效率。1996年,加州伯克利分校在SGI工作站也实现了本校新楼SodaHall的实时漫游。SodaHall模型由1418807个多边形构成,由于研究小组采用了高效的数据存储结构、多级动态LOD技术、场景调度算法、实时可视区域判定算法及计算处理等多种技术使得SodaHall的实时仿真率(每秒钟刷新频率)恒定在每秒20帧左右[3]。在我国,清华、武大、北航、浙大、西南交大等许多大学都己经开展了虚拟场景漫游技术的研究。武汉理工大学开发出了一套校园虚拟全景漫游系统,横跨余家头及东、西院三个校区,上海大学也实现了宁波科技园区实时漫游系统,清华大学土木工程系的“RGROUP”小组使用SPuerscPae公司的VRT虚拟环境软件包于1998年开发了“清华北大蓝旗营教师住宅小区”虚拟环境漫游系统。2010年,北京大学在给每个新生录取通知书的时候附带了一张名为《北大英雄》的光盘,光盘以2D游戏的形式介绍了北京大学各个场地的用处,让新生未到校之前即通过计算机了解学校。《北大英雄》给北大的数字化建设带来了巨大的推动作用,也带来了校园宣传的新途径[4]。Web3.0的时代即将到来,有专业人士预测,Web3.0的时代即Web3D时代,3D漫游系统将会受到企业和社会各界的青睐。综上,我们可以看到对于虚拟校园系统的研究国内外大学早在很久以前就已经开展了。而且随着VR技术的进步及计算机软硬件的发展,目前虚拟校园系统已经可以实现仿真度达90%以上的仿真建模及漫游工作。但是对于网络虚拟校园的研究工作,国内外高校及研究机构涉足较少。以校园为社区平台,运用VR技术,将场景仿真化;运用网络游戏、网络社区技术,让虚拟校园系统内容丰富化将成为未来虚拟校园系统研究的主流。1.3研究研究的目的与意义本论文主要研究了如何将网络游戏技术运用到校园虚拟漫游系统中,以学校真实场景为原型进行建模工作,同时加入网络功能,让用户除了可以进行人机互动以外还可以通过网络进行人人互动。东北大学秦皇岛分校校园虚拟漫游系统采用3DsMax进行3D建模,使用Unity3D游戏开发引擎搭建校园场景,利用Photon网络游戏引擎实现网络功能,3种工具配合使用,采用C#语言编程实现网络虚拟校园系统整个开发工作。由于时间和精力有限,本论文主要阐述客户端程序和服务器端程序的架构设计,以期获得一个可方便修改、扩充的C/S结构系统。1.4研究的主要内容本论文以东北大学秦皇岛分校网络虚拟漫游系统(简称东秦VRS)为例,在进行了充分的需求分析和设计后主要研究了如何使用Unity3D、Photon来完成网络虚拟校园的建设工作。本论文主要分为六个章节,各章节主要内容安排如下:第一章绪论:讲述课题的研究背景、国内外研究现状、课题的研究意义、本论文主要研究的内容以及章节安排。第二章相关技术简介:简要介绍了系统开发过程用到的主要工具及技术。第三章系统分析:依据实例分析了系统的需求,并介绍了系统的设计目标及应具有的功能和结构。第四章系统设计:详细阐述了系统的设计结构。第五章开发及实现:介绍了系统的实现过程及开发难点。第六章优化与改进:介绍了系统实现过程中用到的主要优化技术、难点、后期改进措施。结论:总结了整个系统的设计心得以及目前系统中存在的不足及改进措施。1.5本章小结本章主要介绍了课题的研究背景,国内外研究现状,课题的研究意义以及本论文主要的研究内容,本章主要为后面的章节起到铺垫和方向指导性作用。
2相关技术简介2.1Photon网络游戏引擎简介网络游戏引擎是指支持网络游戏的服务器端应用组件。对于很多大型商业游戏公司,他们都内建了自己的服务器引擎。但是对于中小型开发团队或个人开发者,独立建设游戏引擎是一件非常困难的事情。为了解决这些困难,游戏行业开始出现了拥有基础组件功能的网络游戏引擎。这些引擎能帮助开发者实现基础游戏功能,从而大大降低开发难度缩短开发周期节省开发成本[5]。目前市面流行的网络游戏引擎非常多,主流引擎包括:BigWord、SmartFox、ElectroServer、Photon等。根据引擎所提供的功能和所支持的用户并发、负载量,网络游戏引擎可分为中小型和超大型,Photon即中小型网络游戏引擎的代表。Photon英文原意是指光量子,这里指由德国ExitGame公司开发的MMO(MassivelyMultiplayerOnline,大型多人在线)服务器端网络游戏引擎。ExitGame是国际著名的多平台网络游戏引擎供应商,它开发的高性能Photon网络游戏引擎以SDK(SoftwareDevelopmentKit,软件开发工具包)形式,为游戏开发者开发实时多人应用提供了最佳的解决方案。目前Photon游戏引擎已经支持了如Unity3D、IOS、Android、Flash、HTML5等多达18个游戏平台的SDK,图2.1列出了目前Photon支持的主流游戏平台。图2.1Photon支持的游戏平台相比其他网络游戏引擎(如SmartFox、ElectroServer)而言,Photon支持的平台更加广泛,可选择的协议也更多。表2.1列出了Photon、SmartFox、ElectroServer三个网络游戏引擎在支持的协议、开发语言、服务器端语言、支持的数据类型四个方面的对比。从表中我们可以看出Photon比其他两个引擎支持的协议更多,这使得基于Photon的游戏开发将更加灵活、方便[6]。虽然相比BigWord这类超大型游戏服务器而言,Photon在性能上可能略有不足,但是它低廉的价位使得一些中小型游戏制作公司或独立游戏制作团队有了开发网络游戏的能力,尤其是在社区游戏盛行的这个年代,Photon这类套装的服务器引擎更是大受欢迎。表2.1Photon、SmartFox、ElectroServer的参数比较参数PhotonSmartFoxElectorServer支持HTTP协议YesNoYes支持UDP协议Yes(可靠的)NoNo支持TCP协议YesYesYes使用的开发语言C++JavaJava服务器端APIC#ActionScriptJavaScriptPython,JavaJavaActionScript支持的数据类型AllDataTypesStringsOnlyWithAS3AllTypes目前包括OpenFeint、BigPoint、WaltDisney、KONAMI等著名游戏开发公司都在使用Photon网络游戏引擎。2.2Unity3D游戏引擎简介网络游戏除网络游戏引擎(即服务器程序)外还需要客户端游戏引擎,这类游戏引擎是用来开发客户端程序,客户端程序一般包括了Android、IOS、PC、Web等各种平台。本文用游戏引擎指代这类负责开发客户端程序的工具,用网络游戏引擎指代这类负责服务器程序开发的工具。目前市面上流行的游戏引擎主要有:虚幻、D3D、Cocos2D、Unity3d以及制作虚拟现实产品专用的VRP、Cult3D。从技术上来看,实现虚拟漫游系统(特指客户端程序)的工具越来越多,最初的VRML[7]建模语言仍然在应用中,VRP作为国内首屈一指的虚拟漫游引擎受到广泛好评,Cult3D用来设计虚拟产品展示简单方便,而较新的开发软件Unity3D在国外享誉盛名而被国人学习。从技术选择的角度来说,Unity3D画面表现优质,可制作4A级画面特效,并且良好的跨平台和高性价比,使得使用Unity3D开发虚拟校园客户端程序成为最好的选择。Unity3D是由UnityTechnologies公司开发的一款跨平台游戏制作工具,它可以让游戏开发者轻松的创建诸如三维视频游戏、建筑可视化、移动端手机游戏等3D游戏,它是一个全面整合的专业游戏引擎。与Director、BlenderGameEngine、TorqueGameBuilder等游戏引擎类似,Unity3D是一款利用交互的图型化开发环境为首要开发方式的游戏制作软件,其编辑器可运行在Windows和MacOS操作系统下,并且Unity3D可将游戏发布至Windows、Mac、Wii、iPhone、Android和Linux等平台[8]。Unity3D最大的优势是较高的性价比,相比传统的游戏开发引擎,它的价格更低廉,更适合中小型和独立游戏制作团队使用,同时它支持JavaScript、C#、Boo等脚本语言。图2.2是Unity3D的游戏开发环境,友好的图形化界面让Unity3D学习和使用更加简单方便[9]。图2.2Unity3D工作界面2.3Unity3D与Photon的关系Photon作为一款服务器端网络游戏引擎,它本身并不具备任何的图形渲染和处理能力,也就是说Photon本身只负责网络数据的发送和管理工作,它是一款完美的SocketServer。Unity3D是一款专业的游戏开发工具,他在图形渲染、3维模型处理上有较强的功能。虽然Unity3D本身带有网络功能,但是它自带的网络功能并不适合制作大型网络游戏。Photon和Unity3D二者可以说是相辅相成,二者结合即可完成一款完整的MMO游戏,图2.3用一个太极形象的表明了Photon和Unity3D的关系。图2.3Photon和Unity3D的关系东秦VRS系统的使用的是C/S结构,这种结构有利于充分利用本地资源从而展现优质画面。客户端由Unity3D这类物理引擎负责开发,Photon则负责服务器端程序的开发。Unity3D开发的客户端通过Scoket方式和Photon服务器程序建立连接从而接受服务器的控制并在本地进行画面渲染和表现。2.4Unity3D和Photon交互方式作为一款完美的黄金组合,Unity3D主要负责客户端的开发工作,而Photon主要负责网络数据的发送、管理和服务器的响应。在Unity3D的客户端开发中只要引入Photon提供好的开发包,并实现相应的接口即可使用Photon的网络功能来发送数据。这里我们应该明白,Photon本身对我们的数据包的内容并不感兴趣,它只是负责发送和管理数据包,具体的响应行为需要我们在服务器端进行自主开发,图2.4表明了Unity3D和Photon的在系统中主要的分工,这里值得一提的是,Photon的网络通信是多信道通信的,他的数据接收和发送是在两个信道中被分别发送的,这种机制更有利数据包的管理和“数据包协议”的制定。图2.4Photon和Unity3D主要分工示意图从图2.4中可以看出客户端和服务器的交互主要是通过Photon来完成的。作为网络游戏引擎,Photon在客户端加入了他自身的组件用来管理客户端的网络通信工作,Unity3d在开发客户端时通过调用Photon客户端组件提供的数据发送功能将数据发送给服务器,服务器在接受到数据后,Photon引擎将数据交给我们自主开发的服务器业务逻辑部件来处理数据,并将处理的结果返回客户端。因此在使用Unity3D和Photon开发网络校园虚拟漫游系统的时候,我们的主要工作是服务器端规则逻辑和客户端控制逻辑以及客户端模型、画面的开发工作。整个系统对于网络层的数据发送、接受和优化交由Photon完成,对于UI层的画面渲染、模型优化交由Unity3D来完成。2.5本章小结本章主要对Photon网络游戏引擎和Unity3D游戏开发引擎做了简要的介绍并对二者的交互方式做了简要说明。Photon和Unity3D相辅相成,它们一个运行在服务器端一个作为客户端游戏开发工具,为一款完整的网络游戏开发提供了便捷的解决方案。基于Photon和Unity3D进行网络游戏开发能极大的降低开发成本,提高开发效率。3东秦VRS的系统分析3.1需求分析为了加强自身的网络化宣传,东北大学秦皇岛分校早在2009年就推出了一套单机版的校园虚拟漫游程序,但是随着网络浪潮的冲击,单机版校园虚拟漫游系统已经不能满足广大用户的需求了。对于广大新生而言,虽然他们期望能早日了解校园风貌,融入校园生活,但是他们更希望能够通过一种表现力丰富的方式找到知心校友。东秦VRS系统即在学校原有的单机版校园虚拟漫游系统之上做出的网络化改进,新生通过该系统可以了解学校基本信息、学校建筑布局、各建筑的基本作用,联网功能让用户可以和其他用户互动交友共同漫游。预留的扩展接口可以让系统方便的修改、扩展系统功能,让系统的二次开发更加容易,维护更加方便,系统可以长期使用。东秦VRS的用户群主要分为两类:普通游客和注册用户。普通游客只能进行简单的漫游功能,他们可以看到其他用户的聊天内容,但是无法发表聊天内容。注册用户除了拥有普通游客的功能外,他们还有可以使用聊天功能来互动。图3.1游客用例图和图3.2注册用户用例图说明了东秦VRS系统中用户可以使用的功能。图3.1游客用例图图3.2注册用户用例图东秦VRS除上述用户功能外,为了配合学校对宣传和管理工作的需要,还包括一些管理类功能,他们主要包括:(1)管理员对当前所有用户信息的修改删除操作。(2)管理员发布特殊公告。(3)管理员对特定用户的停用、启用操作。3.2系统设计目标相比其他虚拟漫游系而言,东秦VRS主要为了解决传统系统使的互动性弱和用户吸附力不强的问题。东秦VRS系统以学校真实场景为原型建立虚拟的3维空间并搭建相似度在90%的3D场景,玩家通过建立虚拟人物可以在场景中自由参观、活动,同时玩家可以看到其他玩家的昵称和行为。图3.3预期成果图展示了系统开发完成后预计达到的效果。图3.3预期成果图从预期成果中我们可以看出,系统最终效果类似现代网络游戏风格,但是系统功能以展示和交友互动为主,采用的技术与网络游戏开发技术相似但是内容上脱离网络游戏内容,仍然以虚拟现实思想为主,除人物外其他建筑模型均来自对真是建筑的建模工作。3.3系统功能结构通过对用户和学校的需求分析,我们可用看出现行的单机版校园漫游系统已经跟不上时代潮流的发展。东秦VRS系统在原有的系统之上引入了更多的网络功能,让用户参与其中乐在其中。3.3.1系统总体功能结构为了满足学校宣传和管理的需求的和用户对系统交互性的要求,东秦VRS系统针对用户和学校进行两方面分别进行了功能设计。图3.4为东秦VRS系统的总体功能结构图。从图中可用看出东秦VRS系统被划分为用户系统和管理系统两个功能子系统,用户功能子系统根据用户是否登录进行了相应的权限划分。其中登录功能下设快速登录和传统登录两种。快速登录的用户无需填写任何信息即可进入系统。使用传统登录的用户需要先注册然后使用用户名密码登录到系统中。图3.4系统总体功能结构图管理系统主要为学校管理员设置,通过管理系统学校可以和用户之间进行互动宣传,管理员可用管理所有注册用户的信息数据。此外为了配合学校的宣传性要求,系统为管理员设立了公共发布功能。利用此功能,管理员可用发布宣传性、警示性、提示性的信息,管理员发布的信息将被以特殊的方式表现给所有登录到系统中的用户。除系统总体功能结构图中列出的功能外,基于Photon和Unity3D开发的东秦VRS还大量使用到了Photon和Unity3D提供的基础服务功能,如人物动画控制、模型渲染、3维空间管理等基础组件。3.3.2系统网络结构在传统软件系统中根据系统终端的表现形式,系统结构可用分为B/S(浏览器/服务器)结构和C/S(客户端/服务器)结构两种软件结构。B/S结构的系统界面通过用户浏览器展现,用户无需下载客户端程序,使用起来较为简便。一般网站和信息管理系统多采用这类结构。相比B/S结构,C/S系统结构可能过于陈旧,但是由于B/S结构的系统程序受制于浏览器、带宽等因素的限制,系统可利用的资源较少、服务器负载压力大。而C/S结构的系统则可以更好的利用终端设备的本地资源,尤其是显卡和CPU资源,这在界面渲染上有很大优势。3D校园虚拟漫游系统在运行时对显卡和CPU有着极高的要求,因此系统拥有的资源越丰富,系统可以表现的画面会越靓丽、用户体验会更流畅。所以为了能更好的提升用户体验度,提高系统画面显示质量。东秦VRS系统会采用C/S结构实现。系统开发和设计过程中会分客户端和服务器两个子程序,二者通过自定义代码(简称通信协议)进行网络通信和信息交换,从而降低服务器负载压力提升系统流畅度。3.4本章小结本章主要针对学校以及用户的需求进行了充分的需求分析,通过对学校和用户的需求分析,确定了系统的设计目标和功能结构。系统旨在建立一套可用联网的校园虚拟漫游程序,程序采用C/S客户端设计实现。服务器端主要负责逻辑功能的控制和用户数据持久化的保存,客户端主要负责3D虚拟校园场景的渲染工作以及用户行为的响应。采用C/S客户端模式可充分利用用户本地计算机资源让画面更加精致用户体验更流畅。4东秦VRS的系统设计4.1系统整体设计根据系统功能的需要,系统整体被设计为四个子系统,分别为客户端程序、服务器程序、网站和数据库。客户端程序为整个系统的核心部分,基于Photon和Unity3D引擎进行开发,主要负责用户登陆、模型选择、主场景的加载、渲染、优化、聊天信息的显示、断线控制。客户端程序的设计要预留扩展接口以保证程序可进行二次开发。服务器程序响应客户端程序的行为,基于Photon网络游戏引擎进行开发,主要负责用户缓存列表的维护,虚拟房间的建立、销毁和维护,登陆数据的验证,二次登陆控制、聊天和移动数据的转发。网站主要是为了补充客户端的功能,将某些功能转移到网站上可以有效的降低客户端开发成本。网站采用JavaWeb技术进行开发,主要负责客户端下载,用户注册,操作简介,更新维护通知。由于网站技术已经很成熟,网站设计和实现较为简单,本论文对网站部分的设计和实现不做论述。数据库作为数据持久化工具,主要是为系统的扩展预留的模块,同时数据库作为网站和服务器程序的联系纽带实现了系统的功能连接。在系统目前版本中数据库主要负责存储用户基本信息,网站向数据库中写入注册信息,服务器程序通过查询该类信息判断用户是否可用登陆。4.2服务器程序架构系统的服务器端程序设计较为简单,对于复杂的功能如虚拟房间的建立、维护、销毁,Photon已经提供了基础工程。在开发时可以通过添加引用的方式来继承这些功能,图4.1列出了我们的工程继承树。从图4.1中可以看出,服务器端程序主要继承了Lite和MMO两个基础工程。Lite是Photon提供给开发者用来建立虚拟房间的基础工程,通过C#的base关键字可以调用Lite的房间管理功能,从而实现服务器端虚拟房间的建立,销毁,房间内用户数据的广播等。MMO工程实现了著名的网格式世界分割算法和独占式的资源管理,通过MMO工程卡发着可以很好的实现用户二次登陆控制等功能[9]。图4.1工程继承树在第二章中论文已经介绍了Photon和Unity3D的基本交互方式以及Photon的基本开发过程。图4.2所示为东秦VRS服务器端程序架构设计图,MyApplication作为入口点主要提供程序启动时的初始化和关闭工作,同时它实例化一个MyPeer对象交给Photon。Photon将接受到的数据包经处理后交给MyPeer对象,MyPeer对象根据数据包的协议号(客户端和服务器端商议的代码)来确定将该包交给哪个操作处理类进行处理,处理类依靠相应的Request类提取数据,处理完毕后通过相应的Request类返回操作信息。图4.2Server架构图服务器端程序的架构相对来说比较简单。不过这种简单的程序设计却有着很大的扩展性,当卡发着需要扩展服务器功能时,开发人员只需要添加相应的Handler、Request、Response类即可。当需要修改某个功能时,开发人员也只需要修改Handler、Request、Response三个类,甚至当系统仅仅需要修改某个功能的逻辑处理流程时,开发人员只需要修改Handler类的处理逻辑即可。4.3客户端架构客户端是整个系统的核心模块,相比服务器端程序,客户端程序需要负责更多的事情。基于Unity3D进行客户端开发能让客户端程序具有很好的3D交互行为,而Photon则为客户端提供了很好的网络功能。客户端在设计时应充分考虑Photon和Unity3D这两个引擎的特点,同时结合面向对象设计原则和部分设计模式,能让客户端的设计更加科学合理。4.3.1客户端总体结构客户端因为涉及到三维空间的管理和交互行为,所以客户端的逻辑较为复杂容易出现逻辑混乱。客户端的总体设计采用MVC设计思想,如图4.3所示为客户端总体设计图。客户端总体设计为4层分别为NetworkIO(网络输入输出层)、Model(模型层)、Controller(控制或管理层)、Viewer(试图层)。各个层主要负责的功能如下:1、NetworkIO:网络输入输出层主要封装了网络功能,该层基于Photon实现,用于数据包的发送和接受、包数据的分析、事件回调、基本状态码的管理。该层保证了客户端的网络功能对其他层是透明的。2、Model:模型层主要是对客户端程序中设计到的数据的抽象,包括对现实世界的抽象(如Player即对用户的抽象)和对虚拟对象的抽象(如Role、NPC是对虚拟的3D人物的抽象)。该层保存了各个抽象对象的属性和数据,对象的属性和数据对外是只读的,各个Model只能修改和访问他们自身的数据。3、Controller:控制层(或称管理层)该层由一系列的Manager组成,每个Manager负责Model层中的一个模型对象的管理工作,其他对象想要获得Model层中某个具体对象的属性数据必须通过该层对应的Manager来完成,这样虽然增加了编程的复杂性但是却可以保证很好的逻辑思维不会产生逻辑混乱。为了管理众多的Manager,Controller层增加了一个总的Manager(即图中的ClientManager)ClientManager主要负责了其他Manager的初始化、组合已经状态码的管理工作。在该层中还有一个独立的小模块:EventManger,这个Manager应用了C#独有的事件机制主要用来发送一些回调事件,这些事件一般是由Model层或Contoller层在修改了模型数据后发送给Viewer层的。图4.3Client总体架构4、Viewer:试图层主要是由一系列的Ctrl和具体的行为类组成的,Ctrl和具体的行为类控制了3D世界的行为,如GUI界面的显示、人物的移动、场景的加载等。这些Ctrl有些会调用到Controller层的功能和方法有些是纯粹的Unity脚本,这样对于交互行为的修改就不会影响到其他的层保证了层与层之间的相对独立性。以上是客户端的总体设计结构,可以说客户端的总体设计是相对复杂的,复杂的设计有效的保证了客户端的易扩展和易修改性,比较好的遵循了面向对象设计原则[10]。客户端总体结构图只代表了客户端的逻辑结构和模块划分方法,某些模块如Controller层和Model层的具体设计还要结合特定的设计模式来完成。4.3.2状态模式简介从客户端的总体设计图中可以看出Controller、Model、NetworkIO这三层因为与Unity的脚本无关,所以这三层可以被单独抽出来组成客户端中间件,而客户端中间件的作用即负责网络通信服务、模型数据的管理工作。利用C#事件机制的特点,在Unity脚本只要向中间件注册相应的事件,当事件触发后中间件会调用相应的处理方法,这样可以有效的分割Photon和Unity3D代码,更便于开发和管理。在介绍中间件的结构之前,首先要介绍面向对象编程中非常重要的一种设计模式——状态模式。状态模式是中间件的核心设计模式,合理转换客户端状态将有效的管理客户端行为。状态模式属于行为模式中的一种,它是指当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。如图4.4是状态模式的类图,从图中我们可以看出,状态模式需要一个接口类和许多与具体状态有关的实现类,在使用时,逻辑处理类持有一个状态接口的引用,在不同时刻只需改变引用的具体对象即可改变处理类的处理行为[10]。图4.4状态模式类图状态模式主要适用于以下两种情况:1、一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为。2、代码中包含大量与对象状态有关的条件语句:一个操作中含有庞大的多分支的条件ifelse(或switchcase)语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常有多个操作包含这一相同的条件结构。State模式将每一个条件分支放入一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化[11]。状态模式有如下三方面的优点:1、它将与特定状态相关的行为局部化,并且将不同状态的行为分割开来:State模式将所有与一个特定的状态相关的行为都放入一个对象中。因为所有与状态相关的代码都存在于某一个State子类中,所以通过定义新的子类可以很容易的增加新的状态和转换。另一个方法是使用数据值定义内部状态并且让Context操作来显式地检查这些数据。但这样将会使整个Context的实现中遍布看起来很相似的条件语句。增加一个新的状态可能需要改变若干个操作,这就使得维护变得很复杂。State模式避免了这个问题,但可能会引入另一个问题,因为该模式将不同状态的行为分布在多个State子类中。这就增加了子类的数目,相对于单个类的实现来说不够紧凑,但是如果有许多状态时这样的分布实际上更好一些,否则需要使用巨大的条件语句。决定状态转移的逻辑不在单块的if或switch语句中,而是分布在State子类之间。将每一个状态转换和动作封装到一个类中,就把着眼点从执行状态提高到整个对象的状态。这将使代码结构化并使其意图更加清晰。2、它使得状态转换显式化:当一个对象仅以内部数据值来定义当前状态时,其状态仅表现为对一些变量的赋值,这不够明确。为不同的状态引入独立的对象使得转换变得更加明确。而且,State对象可保证Context不会发生内部状态不一致的情况,因为从Context的角度看,状态转换是原子的——只需重新绑定一个变量(即Context的State对象变量),而无需为多个变量赋值3、State对象可被共享:如果State对象没有实例变量——即它们表示的状态完全以它们的类型来编码——那么各Context对象可以共享一个State对象。当状态以这种方式被共享时,它们必然是没有内部状态,只有行为的轻量级对象。当然适用状态模式也是有缺点的,如状态模式的使用必然会增加系统类和对象的个数。并且适用状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。但是合理的使用状态模式能使我们的程序更加易于维护和修改,代码不至于过于冗余[12]。在客户端程序中,使用状态模式来实现中间件结构,能让中间件易于修改,逻辑上更加清晰。4.3.3中间件结构通过对客户端总体结构的分析,可以知道Controller层和Model以及NetworkIO层和Unity3D脚本是无关的,而这三层是完成整个网络通信最重要的环节,所以将这三层抽象出来组成客户端中间件。如图4.5即客户端中间件结构图,图中实线框代表的是中间件的核心部分,它以状态模式为核心,由ClientPeer模块负责发送和接受数据,ClientPeer接受到的数据交给PhotonClient类来处理,而PhotonClient将数据交给IGameState接口的具体对象来处理不同时刻收到的数据包。IGameState的具体实现类依赖于对应的Handler来完成逻辑功能,这些Handler可以访问Model对象对应的Manager从而访问Model数据。图4.5中间件结构ClientManager负责管理PhotonClient类、事件系统和具体的Manager的初始化工作,它提供了一个全局化的管理入口,通过该类可以打开、关闭网络功能。中间件的静态操作模块主要封装了一系列的静态操作方法,高层通过调用这些静态方法可以实现数据包的发送从而完成和服务器的交互。Model层可以访问事件系统(即EventManager),在修改了自身数据后,Model层通过事件系统发出相应事件从而通知该高层代码。对于中间件的工作流程,可以通过图4.6和图4.7的登陆功能时序图来说明,图4.6是客户端发送登陆数据包的时序图,LoginCtrl是建立在Unity3D上的代码,它获取了用户的登陆信息(如账号密码),LoginCtrl调用LoginOperation的静态方法Login,来发送登陆数据,而LoginOperation则会通过ClientManager将数据发送出去,ClientManager仅仅负责对发送出去的数据进行数据统计,它不关心该数据包是否可以发送。LoginState检查网络状态并验证数据的合法性,LoginState一旦检查出数据问题如账号密码为空等,则停止发送该数据包。如果数据合法LoginState通过PeerClient将数据发送给Server。PeerClient保存了Server的IP地址等信息,它依据ClientManager的指示和Server保持一个Socket连接。图4.6客户端登陆时序图图4.6的登陆数据发送操作所有方法返回值均为空,这些方法均不关心登陆是否成功。图4.7所示的是当Server通过了用户验证之后数据包返回后的处理流程,当Server通过了用户验证之后,PeerClient接收到Server的数据,如果包是完整的PeerClient将包交给ClientManager,ClientManager在记录日志之后将包交给IGameState的具体状态类,LoginState将包数据交给对应的Handler,LoginHandler在通过检验包数据得知用户登录通过,同时取出Server返回的用户信息然后这些信息交给PlayerManager让其初始化Player的数据,Player在初始化数据之后通过事件系统发出登录成功事件。LoginCtrl在注册了登录成功事件之后则被通知登录成功,LoginCtrl在回调方法中则进一步实现其他的如加载场景等功能。状态模式可以有效的将代码分散到具体的实现类中,这样不同的状态类可以关注不同的业务处理逻辑,如登陆状态会忽略所有移动数据包、聊天数据包,同时它禁止客户端发送这类数据,这样在不同的时刻客户端运行的功能会有侧重。状态模式的关键在于状态转换,通过状态转换,客户端可以在不同运行不同的功能。图4.7网络服务端登陆时序图图4.8为中间件的状态转换图,该图按时间顺序从左到右显示了客户端系统运行时整个状态转换过程,其中圆表示当前系统状态,方块表示发出的操作,实线表示状态转换,T代表成功,F代表失败,虚线表示在转换过程中需要发出的操作以及状态转换完成后系统会发出的事件。图4.8Client端状态转换图从图4.8中可以看出,系统最初为Disconnection状态,这时系统仅仅允许高层代码发送ConnectionToServer操作,其他操作均属违法操作。当Client尝试和服务器进行连接后,客户端状态会转换为WaitForConnection状态。当成功连接后客户端状态马上转换为Connection。这时系统会允许客户端发送登陆操作和快速登陆操作,如果数据发送失败,系统会转换为FailLogin状态并发出登录失败原因,之后自动转换为Connection状态。图4.8状态转换图考虑了很多细节的实现,如WaitForConnection,对于小型系统这类状态完全可以省略。但是对于一个运行良好的系统,这类状态可以保证系统的健全性。并且状态之间的转换是可逆的,这样可以实现代码的重用,弱条件下的状态转换关系使得系统所有状态集合可以随意删减,在系统增加或者删减系统功能后,开发人员只需要修改或者增加相应状态类即可,这样的设计可以极大的满足客户端的扩展需求。4.4本章小结本章主要介绍了网络漫游系统的整体设计以及服务器和客户端的详细设计,服务端程序设计较为简单,客户端程序应用了状态模式保证了逻辑上的清醒和程序的易扩展。本章主要是为了后面的系统实现做准备工作,有了良好的设计系统的实现才能更加轻松容易。5东秦VRS的系统实现5.1注册及登陆功能用户注册和登陆登陆功能分别在网站和客户端完成,因为网站技术已经较为成熟,注册功能实现较为简单,这里只做简单阐述。图5.1网站注册时序图是网站注册功能处理过程,用户将注册信息提交给RegisterServlet,RegisterServlet接受到数据后交给UserManager,UserManger在检验数据的合法性之后通过UserDao将数据写入到数据库中,图5.2为注册页面。图5.1网站端注册功能时序图用户注册页面,用户名和昵称不能重复,这里采用Ajax方式验证增加用户体验。图5.2注册页面客户端的登陆功能分为两种:用户登陆和游客登陆(即快速登陆)。用户登陆需要填写用户名和密码,游客登陆则无需填写用户名和密码。用户登陆后系统会显示用户注册时填写的昵称,而游客的昵称则由系统自动分配。图5.3为客户端的登陆界面,用户可自由选择登陆方式。用户登陆后系统会自动判断用户是否为首次登陆如果为首次登陆,系统会自动跳转到人物选择界面让用户选择自己喜欢的模型,用户的选择会被记录到服务器数据库中。而游客登陆后系统会自动跳转到模型选择界面,游客选择模型后会加载主场景。图5.3客户端登陆界面在本论文第四章的客户端中间件设计中已经以登陆功能为例说明了用户登陆功能的实现流程。图5.4为客户端游客登陆功能的处理流程,它与用户登陆的不同点在于,它向Server发送的是用户选择的模型的ID号,而用户登陆向Server发送的是用户的用户名和密码。Server通过判断用户选择的模型ID号是否合法来判断游客是否可以登陆,游客登陆成功后Server会为游客返回一个唯一的ID号,这个号码是依据当前在线的用户数量依次自增分配的。图5.4快速登陆时序图系统开发时采用Player作为用户的抽象代表,表5.1Player属性列表列出了Player的属性,从表中可以看出每个用户除了拥有一个ID号外还拥有一个ActorNum(ActorNumber的简写),对于登陆用户来说Player的ID是唯一不变的取自数据库,而游客的ID号统一为-1。ActorNum是在用户进入房间后由Server端程序分配的,它是根据当前在线人数变化的,Server端通过这个ActorNum为用户建立缓存列表来管理用户信息。表5.1Player模型属性列表属性名类型说明IDInt用户的唯一ID号ActorNumInt用户在当前房间中的号码NicknameString用户昵称ModelIDInt用户选择的模型ID号BirthPositionFloat[]用户出生点的三维坐标在Server端建立缓存列表时,使用C#提供的IDisponsable对缓存资源进行独占可以有效的解决并发访问带来的读写错误。如图5.5为缓存清空方法,使用写锁的方式可用有效防止清空缓存的时候,其他线程操作缓存对象从而造成资源争夺、系统崩溃的问题。图5.5写锁代码示例系统的注册登陆功能实现还是较为简单的,在这个过程中需要注意两点,一客户端对于两种登陆方式处理时要注意状态的转换控制,二服务器端程序在建立用户缓存列表时要注意对用户缓存列表的读写锁控制。5.2人物移动功能用户在登陆并选择相应模型之后即可进入主场景,在主场景中最重要的一个功能即完成人物移动。图5.6为人物移动效果图,网络版程序的人物移动和单机版人物移动不同之处在于,网络版同一个场景中拥有众多人物模型,而用户只能控制自己的人物的移动,同时客户端还要接受并显示其他人物的行为。图5.6人物移动效果图图5.7为人物移动功能的时序图,LocalRole负责管理本地玩家的人物行为,它从RoleController获得人物移动的参数如坐标和旋转信息,然后它调用中间件的RoleOperation提供的Move方法将移动参数广播出去,Server程序收到客户端发来的移动数据包后将包广播给房间内所有玩家,客户端收到来自Server的移动数据包之后经中间件处理之后将它发送给RemoteRole,RemoteRole负责管理非本地玩家的人物行为,它本身保存有一个缓存列表,该列表保存了其他玩家的人物形象和对应的ActorNum,RemoteRole根据中间件发来的ActorNum和移动参数更新非本地人物的移动行为。图5.7人物移动功能时序图人物移动功能的难点在于如何将本地模型移动行为和网络功能分离,虽然系统需要依赖网络来传输人物移动参数,但是人物移动时的表现(如行走动画的播放)是通过本地引擎来完成的,这些需要单独的建立脚本来完成,通过中间件和RemoteRole以及LocalRole,可以有效的将本地行为和网络行为分开。通过对上面人物移动功能的时序图的分析不难发现,人物移动功能是建立在半服务器之上的,所谓的半服务器是指人物移动数据只有一半是通过服务器来控制,而本地人物的移动更新不受服务器的管理。这样的设计好处在于方便编程实现,但是缺点很明显如果网络性能较差时,会出现本地人物可以移动而非本地人物不会移动的状况。人物移动过的另一个难点在于数据发送量的控制上,在Unity3D中,Updata方法是系统提供的一个常用方法,这个方法在没帧都会被系统调用,系统FPS(framespersecond即每秒的帧数)在较高的情况下Updata方法会被频繁调用,如果客户端每帧都发送一个移动数据包的话这很有可能会造成包阻塞现象,尤其是在在线用户较多的情况下,这样会导致网络性能急剧下降,甚至呈指数形式下降。为了控制数据包的发送量,可以采用较为简单的时间控制法。即在每次数据包发送前都和上次包发送时间做比较,如果上次发送时间加本次传输时间大于本次发送时间则不允许发送该数据。采用时间控制法来控制数据包的发送量虽然编程上较为简单,但是同样它会带来很多问题,如果系统发送的数据量过少,非本地人物更新速度会远远小于系统的FPS值,这样会带来人物卡顿的现象,所以间隔时间的选取成为了一个关键点[13]。对于间隔时间的选取可用下面的公式来获取:其中t1表示间隔时间,n表示我们的fps值,用上面的公式可以得到一个很好的经验值,而每秒的数据发送量就为该值的倒数。5.3断线状态机在客户端程序的功能中还有一个很重要的功能——断线控制,客户端的断线控制功能可以自动检测网络状况,一旦发现客户端程序与服务器断开,断线状态机[14]会发出相应事件,并提示用户网络断开原因。图5.8和图5.9为不同原因下的断线显示界面,这些界面全部由断线状态机控制显示。图5.8服务器关闭后断线界面下面是用户二次登陆后,第一次登陆的用户被迫强制退出时的断线界面。图5.9用户二次登陆后被迫退出界面断线状态机的实现并不困难,但却是客户端程序中非常重要的一个功能。断线状态机可以很好的帮助客户端修复非正常因素带来的Bug,包括程序逻辑错误导致的系统崩溃,断线状态机一旦检查到可能产生程序崩溃的异常都会主动的与服务器断开连接从而防止崩溃蔓延到服务器程序或引起其他更大的破坏[14]。断线状态机的实现主要是在状态接口中加入一个OnPeerStatusCallBack方法,这个方法既是Photon要求我们必须实现的方法,也是我们建立断线状态机的关键性代码。这个方法负责处理客户端状态码发生改变后的逻辑,在这个方法中通过侦听客户端状态码来判断当前的网络状态是否正常。另外通过建立InvalidOperation方法来统一处理客户端未捕获的异常,这些异常通常是不可预计的。在这个方法中,客户端状态码会被强制设置为断开状态,这样断线状态机在侦听到状态码发生改变后则通过事件系统立即发出断线事件,同时强制系统与服务器断开连接[15]。5.4配置文件加密由于服务器地址和网站地址的不确定性,如果将这两个值写入到程序代码中,每次服务器地址发生改变都需要重新编译客户端程序,这会极大的影响客户端程序的灵活性,所以客户端程序在设计时将必要的配置信息放置到了config.xml文件中,图5.10所示即为XML的结构。通过.net提供的XMLDocument可以很方便的读取到XML中指定节点的值。这样每次更改服务器或者注册页面的地址后,用户只需更新一个xml即可[16]。图5.10客户端配文件结构采用配置文件的方式虽然可以极大的增加客户端的灵活性,但是如果配置文件采用明文方式存储,配置文件的结构和值是很容易被修改的,对于恶意用户来说,非法入侵者可以通过修改这些地址来破坏程序甚至攻击服务器。因此对配置文件进行加密是必要的。XML文件加密有两种方法,一种是使用序列化的方式另一种是使用.net提供的XML加密算法。序列化方式虽然在技术上较为简单的,但是因为反序列化技术也并不复杂,序列化的文件是很容易被恢复的,对于加密要求不是非常高的场合是比较合适的。.net提供的XML加密算法采用对称秘钥体制,可以对指定节点进行加解密,采用这种方法加密的XML文件有相对较高的保密性,本系统即采用的后者,因此系统单独为客户端开发了一个用于文件加密的小程序,图5.11为加密后的文件,图5.12为加密程序界面,加密程序仅仅只适用于设计好的XML文件结构,文件的节点名称已被固定无法修改,但是程序可以帮忙修改文件节点的值并进行加密,加密密钥为32位。图5.11加密后的配置文件图5.12配置文件加密程序界面在服务器端只需要使用相应的密钥和解密算法即可完成配置文件的解密工作,而且由于解密后的数据全部缓存在内存中,普通用户是无法知道这类数据的,对配置文件加密可以有效的保护系统和服务器不受非法攻击。5.5本章小结本章主要介绍了系统功能实现过程中遇到的问题、解决方案及最终成果,到此系统只是完成了建模和编码工作,此时的系统运行起来还不是一个流程的系统还需要进行下一步的优化和测试工作。6东秦VRS的性能优化6.1客户端优化技术在完成基本的编程开发工作之后,东秦VRS系统已经基本成型,但是由于3D程序的特点,客户端程序如果不经优化是很难流畅运行的。对于客户端程序的优化重点在于提高客户端程序的FPS值降低程序对硬件的依赖,让客户端程序可以在普通的机器上流程运行。良好的程序结构设计已经保证了客户端程序拥有良好的网络性能,接下来介绍一些可以有效降低客户端程序对内存、显卡、CPU的消耗的优化技巧。6.1.1LODLOD技术即LevelsofDetail的简称,意为多细节层次。LOD技术指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。简单来说,LOD技术可以根据目标物体距离摄像机的远近来动态选择是否显示模型或者模型的显示效果,如在很远的情况下模型是不需要渲染的,而在中远距离下只需要显示模型的大致轮廓即可,而近距离则需要显示一些细节边框。图6.1显示了采用LOD技术模型渲染效果。图6.1采用LOD技术的效果对比图想要根据摄像机距离动态调用模型显示效果传统的作为是采用基于碰撞检测的算法,即根据物体间距离远近设置足够多的碰撞盒,当摄像机进入碰撞区域则通过脚本动态加载模型。这种做法虽然也可以降低对显卡的消耗增加渲染效率,但是由于碰撞检测是一种计算量非常大的操作,采用这种算法动态加载模型,当碰撞检测量比较大时会极大的消耗宿主CPU,降低宿主计算机的工作效率[17]。Unity3D游戏引擎为开发者提供了良好的LOD功能,采用Unity3D内置的LOD功能,当程序在编译期间引擎会计算好相应的距离数据,这样程序不必在运行时进行碰撞检测,可以说采用Unity3D内置的LOD组件比使用基于碰撞检测的脚本形式要简单、方便、高效。LOD组件的使用非常简单,在建立好精模(模型面比较多,有很多细节的精细模型)和粗模(模型面较少,一般只有模型的大致轮廓)后,将精模和粗模放置到同一个位置,然后在模型上挂载LOD组件,如图6.2所示,图中LOD0、LOD1表示模型分组,百分比表示距离摄像机的远近,当物体距离摄像机的距离在该百分比内时该组的模型会被渲染,Culled表示距离剪裁组,当与摄像机的距离在该距离之外后模型将不被渲染。图6.2Unity3D内置LOD组件图使用LOD技术来优化客户端程序可以极大的降低程序对宿主计算机的显卡消耗,简单运行时模型显示面数,虽然它会带来模型制作上的工作量,但是却可以极大的提高程序运行的流畅性,因此LOD技术是一种客户端优化中十分实用且重要的技术。6.1.2遮罩剔除遮挡剔除是指当一个物体被其他物体遮挡住而不在摄像机的可视范围内时不对其进行渲染。遮挡剔除在3D图形计算中并不是自动进行的,因为在绝大多数情况下离摄像机最远的物体首先被渲染,靠近摄像机的物体后渲染并覆盖先前渲染的物体(这被称为重复渲染,英文称为overdraw)。遮挡剔除不同于视锥体剔除。视锥体剔除只是不渲染摄像机视角范围外的物体而对于被其他物体遮挡但依然在视角范围内的物体,则不会被剔除。简单来说遮罩剔除技术是指在程序运行时程序会根据目标物体是否被遮挡(或是否可见)来动态消隐模型的技术。采用遮罩剔除技术能有效的降低DrawCall数量,DrawCall是指显卡渲染的3D图像数量,DrawCall越低显卡工作效率越高。图6.3显示了采用遮罩剔除时在编辑器中见到的结果。图6.3遮罩剔除效果对比图从图6.3中可以看到,虽然物体在摄像机拍摄范围内,但是由于物体被它前面的物体遮挡,对于实际现实效果来说它是不可见的,一般来说该物体技术不可见但是由于它处在摄像机视角范围内,它是会被发送给摄像机来渲染的,而采用遮罩剔除技术后该物体是不会被发送给显卡来渲染计算的。遮罩剔除技术不用于LOD技术,LOD技术是基于目标物体和摄像机的远近来动态的加载模型,即使模型被遮挡但是只要模型距离摄像机距离满足条件并且模型处在摄像机视角范围内,模型仍会被加载并渲染,程序的DrawCall数不会降低。而遮罩剔除技术是为了弥补遮罩缺陷,在程序发布之前,通过算法来判断哪些情况下模型是被遮挡的从而剔除这些模型来降低DrawCall数量。6.2服务器端程序改进措施对于客户端的优化本论文仅介绍了以上两种实用优化技术,此外Unity3D引擎还为开发者提供了其他很多好用的优化组件如光照烘培等。应用这些组件虽然会给程序开发带来很多的工作量,但是却可以有效的提高程序的运行效率。客户端的优化重点在于增加3D图像的渲染效率,而服务器端优化的重点则在于平衡服务器的工作量,提高服务器程序的工作效率。服务器的功能即响应客户端程序的行为,如用户登陆、聊天、虚拟房间的建立。客户端功能增加服务器的功能也会随之增加,而且由于服务器和客户端是一对多的工作模式,这会使得当客户端并发量(即同时在线人数)过多的情况下,服务器工作效率会急剧降低,甚至服务器工作效率会呈指数形式降低。负载平衡算法可以极大的提高服务器新能。图6.4负载平衡算法时序图负载平衡即将服务器的功能拆分到多台服务器上,每台服务器只负责一部分功能,但是对于客户端来说它们就好像一台服务器一样。如图6.4为服务器端负载平衡算法时序图,由图可知,负载平衡算法要求建立一台管理服务器(即图中的MasterServer)和多台游戏服务器(Gameserver),客户端直接与管理服务器相连接,其他众多游戏服务器需要向管理服务器注册其所负责的功能并建立连接,当客户端向管理服务器提出请求后如登陆要求,管理服务器会将负责登陆功能的游戏服务器(该游戏服务器可以叫做登陆服务器)的IP地址返回给客户端,客户端与管理服务器断开连接并与指定的游戏服务(登陆服务器可能不只一台)建立连接从而完成登陆功能。在服务器端采用负载平衡算法要求有足够多的硬件支持,它可以有效的改善服务器程序的并发访问有效的提高系统的瞬时在线人数。目前很多大型的MMO游戏都在用了基于服务器集群的负载平衡算法来。6.3本章小结本章主要介绍了客户端及服务器的主要优化技术,在本论文中主要进行了客户端的优化工作。对于服务器的优化本论文只进行了小部分优化,由于硬件和系统需求有限,本系统并没有采用负载平衡算法来分割服务器功能,到此系统的开发工作完全结束。结论随着计算机软硬件技术的发展,尤其是计算机图形学和网络技术不断提升,将网络功能加入到虚拟现实系统中形成网络虚拟社区的技术早已经得到普遍的应用。网络虚拟校园将学校风光通过虚拟仿真实现,即可以提高学校的知名度,还能为广大师生创造一个良好的交流服务平台。本论文主要目标是在原有的单机版校园漫游系统上引入网络功能,建立一个网络校园虚拟漫游系统。论文主要完成了以下几点工作:(1)深入研究分析了网络游戏、虚拟漫游系统开发中的相关技术和理论及算法。(2)深入探讨了网络漫游系统的客户端及服务器端程序设计方案。(3)根据研究、分析和设计的结果,使用Unity3D游戏引擎和Photon网络引擎实现了网络漫游系统的开发工作。(4)根据现有的主流优化技术优化了客户端程序并探讨了服务器端程序优化方案。由于本人技术水平有限,系统只是完成了基本功能,而且由于系统未经抗压力测试,系统的并发量无法准确估计,因此系统功能有待进一步完善。接下来系统准备从如下几方面进行改进:(1)针对系统抗压力测试结果修正系统现存Bug。(2)完善系统功能,提供系统的用户粘性。(3)完善服务器端程序算法,提高服务器端程序工作效率,引入世界分割算法、内容管理算法。(4)继续优化客户端场景,采用大场景分割算法动态加载模型,为多平台发布创造条件。(5)加强系统的安全及维护。致谢值此论文完成之际,首先谨向所有曾给予我帮助和指导的老师、同学和朋友们致以衷
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年太原城市职业技术学院单招职业倾向性测试题库含答案详解(夺分金卷)
- 2026年宁夏葡萄酒与防沙治沙职业技术学院单招职业倾向性测试题库及参考答案详解一套
- 2026年宁夏工业职业学院单招职业适应性考试题库及参考答案详解
- 2026年安康职业技术学院单招职业适应性考试题库附参考答案详解ab卷
- 2026年宁德师范学院单招职业倾向性测试题库带答案详解(能力提升)
- 2026年大连装备制造职业技术学院单招职业适应性考试题库及答案详解(必刷)
- 2026年天津国土资源和房屋职业学院单招职业倾向性测试题库及答案详解(夺冠系列)
- 2026年天津商务职业学院单招职业适应性测试题库及一套参考答案详解
- 2026年宁波卫生职业技术学院单招职业适应性测试题库含答案详解(预热题)
- 2026年抗菌药物临床合理运用培训考核试题(附答案)
- (2021-2025)5年高考1年模拟化学真题分类汇编专题12 化学反应原理综合题(黑吉辽蒙专用)
- 水彩画教学课件
- 《老年服务礼仪与沟通技巧》全套教学课件
- 桥梁项目汇报内容
- 新工科大学英语 课件 Unit 1 Future by design;Unit 2 Living smarter,living better
- 拖欠农民工工资培训课件
- 乡风文明建设课件
- 毕业设计(论文)-水下4自由度抓取机械臂设计-scara机器人
- 金融风控模型建设及管理规范
- 《陶瓷工艺概览:课件中的釉料组成与特性》
- 任务一淘米(教学课件)一年级下册劳动技术(人美版)
评论
0/150
提交评论