基于云绘制技术的VR移动端全景展现研究

2017-12-14 03:38
福建质量管理 2017年22期
关键词:服务端全景队列

(1.国防科技大学信息系统与管理学院控制科学与工程学科 湖南 长沙 410073; 2.国防科技大学信息系统与管理学院军信系 湖南 长沙 410073)

基于云绘制技术的VR移动端全景展现研究

胡少雄1蒋杰2

(1.国防科技大学信息系统与管理学院控制科学与工程学科湖南长沙410073; 2.国防科技大学信息系统与管理学院军信系湖南长沙410073)

随着虚拟现实技术的发展,面向手机、头盔等用户移动终端设备的VR技术渐渐步入到人们的生活当中,广泛应用在教学、训练、医学以及工程设计等各个领域。目前广泛使用的Oculus、HTC ViVi等VR头盔都需要连接数据线,对于用户来说是一个累赘,降低了用户体验,而面向手机、无线头盔等终端的VR设备更加方便,是未来的发展趋势,然而移动端的设备性能限制着处理更加复杂的场景情况,因此,本文采用面向VR移动端的云绘制渲染框架,将全景图像传送给移动端进行展现,不仅能解决移动端性能不足问题,同时实时性和帧率较好,能满足用户的大部分需求。

三维虚拟场景;云绘制框架;VR移动端

引言

随着虚拟现实、增强现实和实时渲染技术的快速发展,面向移动终端的VR/AR头盔能够提供移动式、交互式的场景模型渲染,具有良好的发展前景。实时渲染较高的计算复杂度与较大的数据处理规模,影响了面向移动终端的三维展示渲染质量和实时性。为此本文建立面向服务端与移动终端的云绘制渲染模型,设计了面向移动终端的渲染任务分布方法,利用基于RabbitMQ消息队列的任务分布调度加速三维模型的实时渲染处理,并采集全息图像传送给移动端进行展现。本文主要研究以现有分布式渲染方法为基础,合理调度渲染节点的任务分布问题,提高渲染速度;将虚拟三维场景的全景图像捕捉,提高渲染速度,生成高质量的全景图;将全景图像还原成三维虚拟场景,减少了信息的丢失,提高场景的真实感。

一、云绘制框架相关研究

云绘制实质也是分布式并行绘制技术的一种实现形式,云计算绘制模式是在传统渲染农场的基础上,将复杂耗时的场景绘制问题放在云环境中来完成的图形处理方式。

Miao等[1]提出了一种针对移动端的基于自由视点视频的云绘制协同框架。在该框架中,在确定视点时使用云渲染方式,可以获得高质量的渲染效果,而在选择视点时使用本地渲染方式,以降低交互延迟。Wang等[2]提出了一种自适应渲染方式,其比特率随着动态渲染参数的变化而进行自适应调整。Chua等[3]提出了一种面向移动云游戏的分层编码方法。游戏图像帧被分为基础层和增强层,在客户端渲染基础层的图像,而云服务器上进行增强层图像和信息的编码和传输。Eisert等[4]提出了一种在局域网中进行远程游戏的图形流框架。Huang等[5]提出了一个开源的云游戏系统,提供云服务器渲染和发送流编码的游戏帧给客户端。Xiaoming Nan[6]等提出了一种新的协同渲染框架,该框架通过在远程渲染端内置一个客户端渲染模拟器,自适应调整远程渲染和本地渲染。YaoLu等[7]提出了一种联合非对称图像渲染和视频编码的方法(JAVRE),其左视图和右视图的渲染复杂度与编码质量都可能是非对称的。首先,通过主观和客观的测试,开发两个数学模型(用户体验模型和视频比特率模型)。然后,提出了一个优化算法,可以自动选择视频编码设置和图形渲染设置的左视图和右视图,在给定的网络条件下以确保最佳的用户体验。

二、基于云绘制的全景展现总体框架

在服务端的虚拟三维场景中,本文采用任务分布绘制的方法进行场景渲染,运用rabbitmq消息队列的方法实现任务的调度,提高渲染的速度。采用360度全景摄像机来采集(已经渲染好的虚景)全景图像视频,通过socket网络将采集的全景图像传送给客户端,从而移动端实现虚景的全景展现。当移动端场景用户移动到另一地点时,绑定移动端虚拟场景摄像机与服务端虚拟场景摄像机,使移动端场景与服务端场景同步,将变换的场景依然变成全景图像传送给移动端。同时,移动端VR在场景中设置一些标签,当某个带标签的物体需要改变或置换时,通过将控制标签的指令传给服务端,在服务端的虚拟场景中将其进行物体改变或置换,并生成全景图像传送给移动端。

图1 基于云绘制的全景展现总体框架

(一)虚拟场景的全景图像采集

对于全景展现,一般是采用全景相机拍摄制作成全景图像,再将全景图像进行全景展现。本文主要针对虚景的全景展现,这是采用全景相机无法拍摄的,只能通过在虚拟场景中进行全景图像捕捉,进而获取全景图像并进行全景展现。

在一些游戏引擎中(如UE4、unity 3D等),直接从游戏中截取视频帧不难办到。然而,在获取游戏视频帧时,往往占用很大的计算资源,对整个场景的绘制渲染将会有影响。对于开发VR内容并希望提供良好用户体验的人们来说,保持良好的性能是关键所在,也是在进行全景展现时帧率的保证。在场景中使用全息摄像机,捕捉360度的全息图像,并将其进行存储。

在场景中捕捉帧缓冲区需要获取整个当前场景的360°的全景信息,并将其转化为全景图像,之后复制像素很容易,但这种做法在VR体验中不可行,该过程运行慢的基本原因如下:

GetPixels()阻塞直到 ReadPixels()完成刷新GPU时,ReadPixels()阻塞每次调用GetPixels()都会分配一个新数组,垃圾回收器导致卡顿。在ReadPixels()和GetPixels()之间设置一帧的延迟就可以避免第一个问题,任何类型的传输都将在需要访问这些值之前完成。

当向GPU发出命令/绘制调用时,这些命令会被批处理到驱动程序中的批量命令缓冲区中。“刷新GPU”意味着等待当前命令缓冲区中的所有命令执行。CPU和GPU可以并行运行,但在GPU刷新时,CPU会保持空闲状态并等待GPU空闲,这就是它被称作“同步点”的原因,比较麻烦的是ReadPixels()会导致GPU刷新。

如果每帧执行垃圾回收会产生重大消耗(例如寻找根节点等),这不仅仅关乎于垃圾大小,还与分配的内存有关。实际上垃圾回收是线程安全的,但渲染线程分配任何内存,都会再次阻塞。Unity引擎是唯一需要分配内存的一方,目前不足的地方就是垃圾回收的消耗。

(二)全景图像合成三维场景及标签使用

在移动端的虚拟场景中设置一些对象的标签,当用户操作这些带标签的对象时,将会把操作指令传回服务端,在服务端的场景对该对象进行相应的操作,并同时生成全息图像传送回来。

在设置标签时,需要将标签添加到场景中相应的对象中,当移动端场景变化时,服务端的场景也进行了相应的变化。在生成全景图像时,添加了图像中一些对象的标签,且存储了标签对象在虚景中的坐标,当移动端对标签对象进行置换、移动或其他控制指令时,指令会传回服务端,该标签对象在服务端的虚景中将会做出置换、移动等相应的操作,完成这些操作后,服务端会再次渲染虚景场景,生成全景图像传给移动端进行全景展现。

(三)移动端与服务端的场景同步

为保证移动端和服务端的实时性,需要提高移动端全景展现的帧率,着重从两个方面进行了优化:(1)采用基于消息队列的绘制任务调度,加快了渲染速度,从而降低了反应时间。(2)对采集的全景图像进行了压缩解压,降低数据传输量。

三、基于RabbitMQ消息队列的绘制任务调度

(一)RabbitMQ消息队列

RabbitMQ是一款基于AMQP(消息队列协议),由Erlang开发的开源消息队列组件,由两部分组成:服务端和客户端,客户端支持多种语言的驱动,如:.Net、JAVA、Erlang等。

图2 RabbitMQ结构示意图

RabbitMQ中间件分为服务端(RabbitMQ Server)和客户端(RabbitMQ Client),服务端可以理解为是一个消息的代理消费者,客户端又分为消息生产者(Producer)和消息消费者(Consumer)[8]。消息生产者(Producer):主要生产消息并将消息基于TCP协议,通过建立Connection和Channel,将消息传输给RabbitMQ Server,对于Producer而言基本就完成了工作。服务端(RabbitMQ Server):主要负责处理消息路由、分发、入队列、缓存和出列,主要由三部分组成:Exchange、RoutingKey、Queue。消息消费者(Consumer):主要负责消费Queue的消息,同样基于TCP协议,通过建立Connection和Channel与Queue传输消息,一个消息可以发送给多个Consumer消费。

(二)基于RabbitMQ消息队列的绘制任务调度

绘制任务流水线分为几何处理和光栅化两部分[9],在几何处理阶段中,主要分为命令处理、几何变换、光照处理、投影变换、裁剪处理与视窗映射等处理过程。光栅化处理就是把顶点数据转换为片元的过程,片元中的每一个元素对应于帧缓冲区中的一个像素,光栅化处理将几何处理阶段产生的几何图元变为二维图像。

在云绘制环境下,将用户的绘制作业分割成若干个相应的绘制子任务,其中每个绘制子任务都保留了原本父绘制作业的参数信息,因此,用户所提交的绘制作业在实际处理时还有绘制子任务,对这批具有相同父作业的子任务进行分布式并行绘制,然后将绘制结果进行图像合成处理得到最终场景。云绘制正是通过一个分割与合成的处理达到大规模场景的快速绘制效果。由于存在这个分割—执行—合成的流程,则在某个作业最后的图像合成时,需要等到这批子任务全部执行完才能进行合成处理,即只有在这个批次的各个绘制子任务的全部完成才表示整个作业绘制的结束,而在这些子任务的执行过程中,用时最长、完成时间晚的子任务将对整个作业的绘制时间起到决定性作用[10]。因此,在一些实时绘制或者对时间要求比较高的情况下,任务的调度不仅要满足大多数任务的执行时间最短,而且要保证子任务中执行用时最长的任务尽可能快的被完成,将某批次作业中完成最晚,所需执行时间最多的任务称为本次作业的关键任务,如图2所示:

图3 基于rabbitmq消息队列的绘制任务调度

图3中,关键任务的完成时间就是t4。采用rabbitmq对绘制任务进行调度分配,可以实现在集群之间进行集群绘制,加快了渲染速度,分布利用了集群之间的资源,能实现对大规模场景的渲染。

四、结语及展望

本文针对VR移动端难以负载大规模场景的渲染问题,研究面向移动端的云绘制全景展现,采用服务端渲染场景,采集场景全景图像信息并进行全景展现,同时针对大规模场景中绘制任务的数据量大、计算复杂以及耗时等问题,研究了基于RabbitMQ消息队列的渲染任务的分布调度,并在集群分布式并行绘制中得到实现与应用。

目前的VR头盔通常需要与电脑连接数据线,限制了用户使用VR头盔的活动范围,而面向VR移动端的虚拟场景全景展现,能解决这一不足,摆脱数据线的困扰,同时面向VR移动端的全景展现可以在旅游业、房源观看、城市导航等许多方面能得到较好的应用。

根据目前研究工作的分析,下一步主要工作可以在以下几个方面进行深入的研究:

(1)场景绘制更深层次的研究。云绘制所面临的是图形绘制问题,为了实现更好的分布式并行绘制目的,需要对场景的分割算法作进一步的研究,对各个绘制任务之间的依赖关系进行合理的处理。且绘制任务调度算法需进一步实验,改进分布集群渲染算法,提高渲染速度。

(2)对场景的改变及时作出反应。当移动端控制场景变化时,服务端能快速得到这一指令并作出反应,在提高渲染算法速度时,能有效减少反应延迟,让用户感觉不到停顿感或切换,保证全景展现的帧率。

(3)添加一定范围的全景展现移动路径。

全景展现一般是定点的,可以生成一定范围内的移动路径的全景图像,从而可以在一定范围内进行全景展现,而不仅仅是定点展现。

[1]D.Miao,W.Zhu,C.Luo,and C.Chen,“Resource allocation for cloudbased free viewpoint video rendering for mobile phones,” in Proc.of ACM MM,2011,pp.1237-1240.

[2]S.Wang and S.Dey,“Adaptive mobile cloud computing to enable rich mobile multimedia applications,” IEEE TMM,vol.15,no.4,pp.870- 883,2013.

[3]S.-P.Chuah and N.-M.Cheung,“Layered coding for mobile cloud gaming,” in Proc.of ACM MMVE,2014,pp.1-6.

[4]P.Eisert and P.Fechteler,“Low delay streaming of computer graphics,” in Image Processing,2008.ICIP 2008.15th IEEE International Conference on.IEEE,2008,pp.2704-2707.

[5]C.-Y.Huang,C.-H.Hsu,Y.-C.Chang,and K.-T.Chen,“Gaminganywhere:an open cloud gaming system,” in Proc.of ACM MMSys,2013,pp.36-47.

[6]Xiaoming Nan,Yifeng He,Ling Guan,Delay-rate-distortion Optimization for Cloud-based Collaborative Rendering,Department of Electrical and Computer Engineering Ryerson University,Toronto,Ontario,Canada

[7]Yao Lu,Student Member,IEEE,and Sujit Dey,JAVRE:A Joint Asymmetric Video Rendering and Encoding Approach to Enable Optimized Cloud Mobile 3D Virtual Immersive User Experience,Fellow,IEEE

[8]彭浩宇.基于PC集群机的并行图形绘制系统研究[D].浙江大学,2006.

[9]李松.开源云计算平台管理支撑平台的研究与实现[D].山东大学,2013.

[10]常运启.云绘制环境下实时动态任务调度算法研究[D].浙江工商大学,2015

胡少雄(1993.1-),男,汉族,湖南常宁人,硕士研究生在读,本科,国防科技大学信息系统与管理学院,研究方向多媒体与虚拟现实。

猜你喜欢
服务端全景队列
戴上耳机,享受全景声 JVC EXOFIELD XP-EXT1
队列里的小秘密
基于多队列切换的SDN拥塞控制*
在队列里
全景敞视主义与侦探小说中的“看”
云存储中基于相似性的客户-服务端双端数据去重方法
新时期《移动Web服务端开发》课程教学改革的研究
在Windows Server 2008上创建应用
丰田加速驶入自动驾驶队列
从5.1到全景声就这么简单 FOCAL SIB EVO DOLBY ATMOS