基于Unity3D引擎的协同虚拟现实系统研究

2020-01-06 10:21张彦鹏
网络安全技术与应用 2020年1期
关键词:服务器端虚拟环境客户端

◆张彦鹏

基于Unity3D引擎的协同虚拟现实系统研究

◆张彦鹏

(华北理工大学电气工程学院 河北 063210)

协同虚拟现实系统通过网络将计算机连接成一个整体,协同虚拟现实系统在情景创设、协同操作、人机交互等方面具有独特的优势。本文研究了协同虚拟现实系统的结构、协同通讯环境搭建和协同并发控制技术。结合连铸协同虚拟现实培训系统实例,阐述了协同虚拟现实的设计流程和关键技术,测试表明,基于Unity3d引擎和Photonserver的协同虚拟现实系统能拓展单机系统的应用场景,并且满足低带宽、实时性的培训需求。

虚拟现实;分布式系统;协同工作;协同并行控制

利用虚拟现实技术进行仿真教学一直是国内外学者关注和研究的热点,其中以Unity3D游戏引擎为工具制作的培训教学系统[1]也应用到各个领域。随着培训系统的不断完善,整合现有的资源实现虚拟现实仿真教学的有效开放与资源共享,充分发挥培训系统的作用已成为高校教育的有待解决的问题。

为了解决以上问题,通过分布式技术将计算机连接成一个整体形成协同虚拟现实系统[2],在保证系统稳定性、准确性的前提下,增加原有Unity3D培训教学系统的实用性与扩展性[3],满足教学培训中情景创设、协同操作、人机交互等方面[4]的需求。

本文探讨了协同虚拟现实系统的搭建过程和关键技术,基于 Unity3D 引擎设计一套协同虚拟现实系统的实现方案。

1 系统概述

协同虚拟现实系统的搭建的总体思路如图1:客户端使用Unity3D搭建视景仿真的虚拟环境,服务器端使用c#语言通过Visual Studio编写处理逻辑,两者之间通过Photonserver提供的SDK开发通讯连接,并通过动态链接库建立C/S的实体映射关系,并按照此关系控制数据的发送与接收,进行数据的交换。

在服务器端创建MySQL数据库保存用户培训信息,实现对协同用户的管理,使得不同用户可以在同一客户端进行操作,实现计算机资源共享的效果。

系统启动后,用户通过用户名和密码进行登录,系统会在服务器端的数据库匹配用户之前的信息,如果是新用户可以进行注册,服务器按照用户的用户名进行标识。当用户进行协同任务的操作时,客户端开启相应的线程向服务器端传输数据,服务器端根据客户端传来的数据进行处理,然后将运行结果的信息进行封装处理。通过遍历算法将处理结果发送到各个已登录用户,实现在协同的目标。

图1 系统示意图

2 系统设计与优化

协同虚拟现实系统的开发,客户端负责虚拟环境的运行、人机交互以及客户端逻辑处理部分;服务器端负责服务器端逻辑处理部分、消息转发以及和数据库的交互;而“协同”的实现主要是信息在客户端和服务器端的传递[5],一个客户端的协同信息经服务器的接收,处理,分装,最后发送给各个客户端进行同步,实现实时数据共享。

2.1 传输信息的筛选

系统结构的开发是实现虚拟环境中的多用户的协同感知[6]并完成操作任务的基础,在协同虚拟现实系统中需要获取每个用户的虚拟环境信息,并通知其他成员同步当前的状态[7],进而完成协同任务。

在协同虚拟现实系统的中,各用户的操作信息的感知的条件是操作信息的同步,操作信息的同步过程:首先采集客户端相关协同信息;然后将信息进行过滤并发送至其他客户端;最后通过各个客户端对信息的接受与处理,经以上三步后才完成各个客户端状态的同步[8]。对于大场景的协同虚拟现实系统来说,对于同步信息的种类、数量、大小等控制和过滤是很有必要的,如果把大量信息同时收发和处理,可能造成信息风暴,造成系统卡顿甚至崩溃。因此整体系统架构如图2所示。

2.2 数据的封装与解析

对于协同虚拟现实系统的数据的同步主要指的是通过服务器的协调使各个客户端操作信息的同步。因为操作信息的多样性,根据开闭原则(OCP),在服务器端新建一个BaseHandler类作为消息处理节点用来处理全局的请求信息。根据处理请求的三个参数(类型,相关参数,客户端类别)把请求信息分配给对应处理程序进行处理。同样,在客户端一侧我们利用Request类作为消息处理节点用来向服务器发送请求以及接收服务器处理请求后的回调结果。

为了保证各个客户端通讯数据的一致性,在操作信息时采用了回调函数和Event()事件类结合的方式实现了各个客户端操作信息的同步,流程大致如下,用户通过Unity3D客户端的UI和硬件设备输入操作信息,客户端对应的操作管理请求模块通过Peer.OpCustom((byte)OpCode,data,true)把相关的操作类型以及数据通过系统提供的可靠UDP协议,传输到服务器端,服务器端通过Peer接收到客户端的请求信息以及标记不同的客户端,经服务器的处理封装,通过Peer同步到各个客户端。

2.3 数据的传输格式的转换

传输数据时主要有两种格式:一种为boolean、string、short等简单数据类型,不需要序列化的数据,这类数据可以直接传输到服务器端应用程序中进行处理。另一种为需要序列化的数据比如Vector3()以类的形式存在的数据,这类数据需要客户端可以通过设置带有符合操作约定的键和值的哈希表来进行传输,客户端和服务器框架负责序列化,传输和反序列化数据。过程如下:将在服务器和客户端传递信息的float、int数据类型转换为 byte 类型,将字节数组封装为数据包。通过把字节数组封装为字节流数据包后发送,实现结构化的数据传输。

图2 系统体系架构

图3 信息处理节点

2.4 协同并发控制技术

协同并发控制技术是在协同虚拟现实系统[9]中为了防止多客户端对虚拟环境中同一任务同时操作造成操作冲突而引入的协调机制[10]。在同步交互的协同虚拟现实系统中,一致性、响应性以及并发性是实现有效协同的重要指标,但三者的关系是冲突的,协同系统中往往需要在保证一致性的前提下提升系统快速响应能力和支持并发能力。

常用的协同并发控制技术有权限加锁法和优先级控制法。其中权限加锁法是指当客户端需要对虚拟物体进行操作时,客户端先向服务器确认该物体的控制权限是否被锁,服务器检测到权限未被加锁时,将操作权限分配给该用户的同时,这个物体加锁保证不被其他用户操作;优先级控制法则首先对客户端设置不同的权限,权限高则优先享有对虚拟物体的控制权,当权限高的用户主动放弃控制权时,低权限的客户端才能对该物体进行操作。

但是两者在实际应用的过程都对用户进行了等级划分,且需要优先级的设定。考虑到虚拟现实系统中角色的带入性本系统通过在虚拟场景中的虚拟人物(Avatar)与场景中操作设备的碰撞检测的方式给予虚拟人物操作权限,简化了并发控制过程。

3 协同虚拟现实的应用实例

实例通过3dsMax、Unity3D和Photoshop建立和优化连铸车间的虚拟训练环境,使用 Unity3D引擎开发客户端,使用PhotonServer建立服务器端及客户端服务器端的连接;Visual Studio 2017开发服务器端运行逻辑,MySQL搭建数据库并使用NHibernate进行对象/数据库映射;通过log4net创建系统日志,方便开发过程的调试。

3.1 实例开发过程

在Unity3D开发的客户端中引入Photon提供的适配Unity3DSDK:Photon3Unity3D.dll导入Unity3D的Plugins文件夹中。并在客户端建立一个工具类PhotonEngine继承IPhoton PeerListener并用代码设置其为单例模式,客户端通过PhotonEngine中的PhotonPeer来实现与服务器端的连接,所以在客户端跳转场景时也要保障客户端运行时有且仅有一个PhotonEngine在运行。

系统服务器端开发采用Photon服务器端的SDK。使用C#代码在 Visual Studio 2017环境中编写好服务器端的运行逻辑后,Photon会其加载生成的程序集。通过Photon Core配置文件来设置应用程序和定义启动参数。

在系统中PhotonControl程序控制服务器端的开启与关闭。服务器端通过主类函数中的三个主要函数对服务器端进行配置。(1)PeerBase CreatePeer(InitRequest initRequest)用来对客户端的连接请求以及信息的发送进行处理;(2)SetUp()进行服务器初始化的配置;(3)TearDown()负责服务器端关闭后各种事件的处理。

同样的,系统通过ClientPeer类对于连接到服务器的客户端进行处理,ClientPeer继承 Photon.SocketServer.ClientPeer,在ClientPeer类中主要包含了两个方法:(1)OnDisconnect()客户端断开后处理;(2)OnOperationRequest()处理客户端请求。

3.2 实例测试

使用PhotonServer创建的局域网络环境中,两位同学分别使用不同客户端登录系统,系统默认分配用户替身(使用颜色标记法区分本机用户),两个学生依次控制虚拟操作台,替身到达操作台位置时系统自动切换视角进行虚拟操作,如图4所示。

经测试,当虚拟人物在场景移动超过0.04米的时候向服务器端发送位置信息,系统通过监听程序在系统运行后以60次/秒的速率同步位置信息。

4 结束语

本文介绍了基于分布式技术构建Unity3D协同虚拟现实系统,解决了基于Unity3D游戏引擎制作的培训教学系统的单机局限性问题,增加虚拟现实仿真教学的开放性与资源共享功能,并满足低带宽、实时性的需求,为协同虚拟现实系统的构建提供了一套具有参考价值的实现方案。

图4 实例运行实景

[1]杜承烈,陈进朝,尤涛.虚拟实验软件平台技术的研究与展望[J].计算机测量与控制,2011,19(3):490-492.

[2]许爱军.VRML协同虚拟现实系统的研究与应用[J].计算机技术与发展,2016,26(6):115-118.

[3]朱安庆,胡安超.基于Unity3D的船舶制造虚拟仿真教学系统构建[J].实验室研究与探索,2018,37(6):117-120.

[4]Claudio Passos,Márcio H.da Silva,Antonio C.A.Mol,et al.Design of a collaborative virtual environment for training security agents in big events[J]. Cognition Technology & Work,2017,19(2):315-328.

[5]范俊君,田丰,杜一,刘正捷,戴国忠.智能时代人机交互的一些思考[J].中国科学(信息科学),2018,48(4):361-375.

[6]高江林,吴晓燕.基于UML的任务空间概念模型动态行为验证研究[J].航天控制,2012,30(1):54-58.

[7]蔡启航,王洁,史通,韩要昌.导弹装备分布式虚拟协同操作训练系统设计[J].传感器与微系统,2018,37(8): 104-106.

[8]陈昭喜,许爱军.具有协同交流功能的虚拟物理实验室[J].计算机系统应用,2019,28(2):107–112.

[9]杨欢,刘小玲.虚拟现实系统综述[J].软件导刊,2016,15(4):35-37.

[10]符云清,全文君.协同虚拟环境中的并发控制机制[J]. 计算机工程,2009,35(4):51-55.

猜你喜欢
服务器端虚拟环境客户端
你的手机安装了多少个客户端
“人民网+客户端”推出数据新闻
——稳就业、惠民生,“数”读十年成绩单
前庭刺激对虚拟环境三维空间定向的影响及与空间能力的相关关系
如何通过虚拟环境有效管理Python第三方库
Linux环境下基于Socket的数据传输软件设计
基于Qt的安全即时通讯软件服务器端设计
动画广告设计中虚拟环境的构建方法与运用
基于Qt的网络聊天软件服务器端设计
基于C/S架构的嵌入式监控组态外设扩展机制研究与应用
新华社推出新版客户端 打造移动互联新闻旗舰