全景画面的获取方法、装置、存储介质及电子装置与流程

文档序号:15640915发布日期:2018-10-12 22:03阅读:221来源:国知局

本发明涉及计算机领域,具体而言,涉及一种全景画面的获取方法、装置、存储介质及电子装置。



背景技术:

随着计算机技术的飞速发展,人们对全景图像或者视频的需求和要求也越来越多。现有的全景画面的获取方案中由于在全景画面合成阶段进行了频繁的像素拷贝过程,会导致获取到的全景画面出现严重的掉帧现象,并且存在严重的耗时过长的现象。

针对上述的问题,目前尚未提出有效的解决方案。



技术实现要素:

本发明实施例提供了一种全景画面的获取方法、装置、存储介质及电子装置,以至少解决相关技术中获取全景画面的效率较低的技术问题。

根据本发明实施例的一个方面,提供了一种全景画面的获取方法,包括:通过图形处理器(graphicsprocessingunit,简称为gpu)在虚拟场景中的目标位置上以不同的视角获取所述虚拟场景中的画面;在所述gpu中将所述画面渲染到与所述画面对应的所述视角下的纹理对象上,得到第一画面,其中,每个所述第一画面对应一个所述视角;在所述gpu中将所述每个所述第一画面渲染到全景纹理对象上,得到所述虚拟场景的目标全景画面。

根据本发明实施例的另一方面,还提供了一种全景画面的获取装置,包括:获取模块,用于通过图形处理器gpu在虚拟场景中的目标位置上以不同的视角获取所述虚拟场景中的画面;第一渲染模块,用于在所述gpu中将所述画面渲染到与所述画面对应的所述视角下的纹理对象上,得到第一画面,其中,每个所述第一画面对应一个所述视角;第二渲染模块,用于在所述gpu中将所述每个所述第一画面渲染到全景纹理对象上,得到所述虚拟场景的目标全景画面。

根据本发明实施例的另一方面,还提供了一种存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项中所述的方法。

根据本发明实施例的另一方面,还提供了一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行上述任一项中所述的方法。

在本发明实施例中,采用通过gpu在虚拟场景中的目标位置上以不同的视角获取虚拟场景中的画面;在gpu中将画面渲染到与画面对应的视角下的纹理对象上,得到第一画面,其中,每个第一画面对应一个视角;在gpu中将每个第一画面渲染到全景纹理对象上,得到虚拟场景的目标全景画面的方式,通过gpu将虚拟场景中的目标位置上以不同的视角获取到的虚拟场景中的画面渲染到在gpu中创建的与该画面对应的视角下的纹理对象上,再将各个视角下的纹理对象上的画面渲染到gpu中创建的全景纹理对象上,从而得到虚拟场景的目标全景画面,全程通过gpu中创建的纹理对象上画面的渲染来获取目标位置上虚拟场景的全景画面,从而使得全景画面的获取过程均由gpu来完成,无需占用cpu资源的同时避免cpu与gpu之间进行帧拷贝过程导致的画面出现严重掉帧,并且节省了帧拷贝过程以及cpu处理过程浪费的时间,从而提高了获取全景画面的效率的技术效果,进而解决了相关技术中获取全景画面的效率较低的技术问题。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据本发明实施例的一种可选的全景画面的获取方法的示意图;

图2是根据本发明实施例的一种可选的全景画面的获取方法的应用环境示意图;

图3是根据本发明可选的实施方式的一种可选的全景画面的获取方法的示意图;

图4是根据本发明可选的实施方式的另一种可选的全景画面的获取方法的示意图;

图5是根据本发明实施例的一种可选的全景画面的获取装置的示意图;

图6是根据本发明实施例的一种可选的全景画面的获取方法的应用场景示意图一;

图7是根据本发明实施例的一种可选的全景画面的获取方法的应用场景示意图二;以及

图8是根据本发明实施例的一种可选的电子装置的示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

根据本发明实施例的一个方面,提供了一种全景画面的获取方法,如图1所示,该方法包括:

s102,通过图形处理器gpu在虚拟场景中的目标位置上以不同的视角获取虚拟场景中的画面;

s104,在gpu中将画面渲染到与画面对应的视角下的纹理对象上,得到第一画面,其中,每个第一画面对应一个视角;

s106,在gpu中将每个第一画面渲染到全景纹理对象上,得到虚拟场景的目标全景画面。

可选地,在本实施例中,上述全景画面的获取方法可以应用于如图2所示的终端202所构成的硬件环境中。如图2所示,终端202中设置有图形处理器gpu204,终端202通过gpu204在虚拟场景中的目标位置上以不同的视角获取虚拟场景中的画面;在gpu204中将画面渲染到与画面对应的视角下的纹理对象上,得到第一画面,其中,每个第一画面对应一个视角;在gpu204中将每个第一画面渲染到全景纹理对象上,得到虚拟场景的目标全景画面。

可选地,在本实施例中,上述全景画面的获取方法可以但不限于应用于获取全景画面的场景中。其中,上述全景画面的获取方法可以但不限于应用于各种类型的客户端中,例如,上述客户端可以但不限于包括:在线教育客户端、即时通讯客户端、社区空间客户端、游戏客户端、购物客户端、浏览器客户端、金融客户端、多媒体客户端、直播客户端等。具体的,可以但不限于应用于在上述游戏客户端中获取全景画面的场景中(比如:游戏赛事全景直播、游戏过程的全景录制等等),或还可以但不限于应用于在上述即时通讯客户端中获取全景画面的场景中,以提高获取全景画面的效率。上述仅是一种示例,本实施例中对此不做任何限定。

可选地,在本实施例中,上述虚拟场景可以但不限于为由客户端模拟出的场景,虚拟场景可以运行在客户端上。例如:虚拟场景可以但不限于包括:游戏场景、虚拟展厅等等。

可选地,在本实施例中,上述目标位置为采集虚拟场景中的画面时当前所处的虚拟场景中的位置,该目标位置在全景画面的获取过程中可以在虚拟场景中移动,移动过程可以由用户进行控制,也可以由客户端通过计算用户的感兴趣画面自动控制目标位置移动到用户感兴趣画面所在的位置上。

可选地,在本实施例中,目标位置上的不同的视角可以由用户预先设置,或者可以由客户端根据虚拟场景的信息进行自动配置。例如:可以但不限于设置6个不同的视角,分别为:目标位置的前视角、后视角、左视角、右视角、上视角、下视角,其中的前视角可以为当前显示在屏幕上的画面对应的视角,6个不同的视角的画面组成一个包围目标位置的六边形,可以将6个视角的视场角设置为相同的角度,那么该六边形则为一个立方体。通过这种方式,用户可以在观看全景视频时随意调节视频画面,用户可以看到目标位置周围360度的场景画面。

可选地,在本实施例中,纹理对象可以但不限于为在gpu中创建的用于存储画面的存储介质,gpu从虚拟场景中采集的不同视角下的画面首先被渲染到各个视角下的纹理对象上,在gpu采集到全部视角下的画面后,再将各个视角下的画面渲染到一个全景纹理对象上,得到的该全景纹理对象上的画面即为虚拟场景的目标全景画面。例如:纹理对象可以但不限于为gpu中创建的rendertexture,6个不同视角分别对应一个rendertexture,前视角对应frontrendertexture,后视角对应backrendertexture,左视角对应leftrendertexture,右视角对应rightrendertexture,上视角对应toprendertexture,下视角对应bottomrendertexture,全景纹理对象可以为gpu中创建的framerendertexture。

在一个可选的实施方式中,以游戏比赛的直播为例,用户可以通过客户端观看游戏比赛过程,在游戏运行过程中,游戏场景即为上述虚拟场景,目标位置为当前显示在客户端上的直播画面对应的虚拟场景中的位置,在直播过程中,通过6个视角(前视角(当前显示在客户端上的直播画面对应的视角)、后视角、左视角、右视角、上视角、下视角)获取游戏场景的全景画面。该场游戏比赛通过客户端a进行直播,客户端a通过gpu在游戏场景中的目标位置上以上述6个不同的视角获取虚拟场景中的画面,并在gpu中将得到的6个画面渲染到与该6个画面对应的视角下的纹理对象上,前视角的画面渲染到frontrendertexture上,后视角的画面渲染到backrendertexture上,左视角的画面渲染到leftrendertexture上,右视角的画面渲染到rightrendertexture上,上视角的画面渲染到toprendertexture上,下视角的画面渲染到bottomrendertexture上,得到6个第一画面,再在gpu中将每个第一画面渲染到全景纹理对象framerendertexture上,得到该游戏场景的目标全景画面。游戏直播的导播人员可以根据游戏过程的需要对直播画面的位置进行切换,观看该游戏比赛直播的用户可以通过滑动屏幕调整屏幕上显示的画面,从而观看到当前目标位置上360度视角下的画面,从而使得观看游戏比赛直播的用户能够产生身临其境的感觉,增加用户的沉浸感和参与度,使用户感觉自己身处在比赛中。

可见,通过上述步骤,通过gpu将虚拟场景中的目标位置上以不同的视角获取到的虚拟场景中的画面渲染到在gpu中创建的与该画面对应的视角下的纹理对象上,再将各个视角下的纹理对象上的画面渲染到gpu中创建的全景纹理对象上,从而得到虚拟场景的目标全景画面,全程通过gpu中创建的纹理对象上画面的渲染来获取目标位置上虚拟场景的全景画面,从而使得全景画面的获取过程均由gpu来完成,无需占用cpu资源的同时避免cpu与gpu之间进行帧拷贝过程导致的画面出现严重掉帧,并且节省了帧拷贝过程以及cpu处理过程浪费的时间,从而提高了获取全景画面的效率的技术效果,进而解决了相关技术中获取全景画面的效率较低的技术问题。

作为一种可选的方案,在gpu中将每个第一画面渲染到全景纹理对象上,得到虚拟场景的目标全景画面之后,还包括:

s1,将目标全景画面投影到球面展开纹理对象中,得到第二画面;

s2,对第二画面进行视频编码,得到虚拟场景的全景视频信息。

可选地,在本实施例中,上述球面展开纹理对象可以但不限于为gpu中创建的panoramatexture。

可选地,在本实施例中,上述对第二画面进行视频编码的编码方式可以但不限于为硬编码方式。

可选地,在本实施例中,上述目标全景画面可以为虚拟场景中一帧画面对应的全景画面,在虚拟场景的运行过程中,对每一帧画面获取其对应的全景画面,再对每一帧画面的全景画面进行视频编码,得到每一帧画面的全景视频信息。

可选地,在本实施例中,在获取到全景画面之后,将全景画面转换成2d的全景画面,再对2d的全景画面进行硬编码,从而得到视频文件或者视频流作为该虚拟场景的全景视频信息,从而避免对画面进行软编码导致的画面掉帧现象的发生,使得全景视频信息的画面清晰度更高,视频播放的流畅度更佳。

作为一种可选的方案,在gpu中将每个第一画面渲染到全景纹理对象上,得到虚拟场景的目标全景画面包括:

s1,创建全景纹理对象,其中,全景纹理对象用于存储虚拟场景的全景画面,全景纹理对象为立方体纹理对象;

s2,将每个第一画面渲染到每个视角在立方体纹理对象中对应的面上,其中,不同的视角包括六个视角,六个视角分别与立方体纹理对象的六个面一一对应;

s3,将立方体纹理对象上的画面确定为目标全景画面。

可选地,在本实施例中,上述立方体纹理对象可以但不限于为gpu中创建的cubemap,cubemap的每个面对应一个视角。例如:如图3所示,在gpu中创建cubemap作为全景纹理对象,图3为cubemap的展开形式的示意图,cubemap相当于一个由六幅图像拼合组成的立方体盒子,如果观察者位于立方体中心的话,那么每幅图像都会对应立方体的一个表面,并且在物理空间中相当于水平和垂直都是90度的视域范围。而观察者被这样的六幅画面包围在中心,最终的视域范围可以达到水平360度,垂直180度,并且画面是不存在任何扭曲变形的。将每个视角下的纹理对象上的画面渲染到对应的cubemap的面上,从而得到cubemap上的画面即为虚拟场景的目标全景画面。

作为一种可选的方案,将目标全景画面投影到球面展开纹理对象中,得到第二画面包括:

s1,将目标全景画面投影到包围立方体纹理对象的球面纹理对象上;

s2,对球面纹理对象上的画面进行坐标转换,得到球面纹理对象对应的球面展开纹理对象上的画面。

可选地,在本实施例中,球面纹理对象为一个包围在立方体纹理对象外部的纹理对象。例如:如图4所示,该球面纹理对象的几何模型可以为立方体纹理对象的外接球面,或者是以立方体纹理的中心(点o)为中心的包围立方体纹理的球面纹理,将目标全景画面投影到该球面纹理对象上的过程可以但不限于为将立方体纹理上的像素点渲染到立方体纹理的中心与该像素点的连线构成的射线与球面纹理对象的交点上,以这种方式将立方体纹理上的画面投影到球面纹理对象上,得到一个球面纹理对象上的画面。以立方体的外接球体为例,立方体纹理的顶点(abcda1b1c1d1)同时也是球面纹理上的点(abcda1b1c1d1),即立方体纹理上的点a投影到球面纹理上的点a,立方体纹理上的点b投影到球面纹理上的点b,以此类推。对于立方体纹理上的其他点p,将点p投影到射线op与abcda1b1c1d1所在球面上的点p`上。

可选地,在本实施例中,对球面纹理对象上的画面进行坐标转换的过程可以但不限于为对球面纹理对象上的画面进行极坐标转换,从而将球面纹理对象上的3d画面转换为球面展开纹理对象上的2d画面。

作为一种可选的方案,对第二画面进行视频编码,得到虚拟场景的全景视频信息包括:

s1,对第二画面进行视频文件编码得到全景视频文件,和/或,对第二画面进行视频流编码得到全景视频流;

s2,将全景视频文件和/或全景视频流确定为全景视频信息。

可选地,在本实施例中,全景视频信息可以但不限于包括全景视频文件,全景视频流等等形式的视频信息,全景视频文件可以用于视频文件的制作、视频的录制等等,全景视频流可以用于全景视频直播中。

作为一种可选的方案,对第二画面进行视频文件编码得到全景视频文件,和/或,对第二画面进行视频流编码得到全景视频流包括:

s1,建立第二画面与帧缓冲对象之间的绑定关系,并将第二画面渲染到帧缓冲对象中的图像原始数据缓存器中,其中,图像原始数据缓存器用于存储第二画面的图像原始数据;

s2,将图像原始数据缓存器中存储的第二画面的图像原始数据输入第一硬编码器得到第一硬编码器输出的全景视频文件,和/或,将图像原始数据缓存器中存储的第二画面的图像原始数据输入第二硬编码器,得到第二硬编码器输出的全景视频流;

s3,解除第二画面与帧缓冲对象之间的绑定关系。

可选地,在本实施例中,上述帧缓冲对象可以但不限于为gpu中创建的fbo(全称为framebufferobject,是opengl的一种扩展特性,该对象允许把一个离屏缓冲区作为渲染运算的目标)。

可选地,在本实施例中,上述第一硬编码器可以为用于输出视频文件的硬编码器,例如:avassetwriter编码器。上述第二硬编码器可以为用于输出视频流的硬编码器,例如:videotoolbox编码器。上述avassetwriter可以用于视频文件录制,videotoolbox可以用于视频直播推流。

可选地,在本实施例中,全景纹理的分辨率较大,一般都是1080p以上,可以借助移动平台的硬编码器进行视频编码,从而在不占cpu的情况下录制出1080p/4k的全景视频。上述视频编码的过程可以在native层完成,unity是一套跨平台的游戏引擎,可用于开发windows、macos、linux等平台的游戏,或是ios、android等移动设备的游戏,上述目标全景画面的获取过程可以在unity上进行。unity在完成全景纹理的采集合成后调用getnativetextureptr接口向native层传递目标全景画面,再由native层对目标全景画面进行视频编码。

作为一种可选的方案,建立第二画面与帧缓冲对象之间的绑定关系包括:

s1,检测帧缓冲对象;

s2,在检测到帧缓冲对象的情况下,建立第二画面与帧缓冲对象之间的绑定关系;

s3,在未检测到帧缓冲对象的情况下,创建帧缓冲对象,并在帧缓冲对象中创建与第二画面的分辨率相同的图像原始数据缓存器;建立第二画面与帧缓冲对象之间的绑定关系。

可选地,在本实施例中,在建立第二画面与帧缓冲对象之间的绑定关系之前可以首先对帧缓冲对象进行检测,如果gpu中已经建立的帧缓冲对象,则将第二画面绑定在已经建立的帧缓冲对象上,如果gpu中尚未建立帧缓冲对象,则首先在gpu中建立帧缓冲对象,再将第二画面绑定在建立的帧缓冲对象上。

可选地,在本实施例中,在一帧目标全景画面编码完成后,可以将画面与帧缓冲对象的绑定关系解除,再将下一帧的目标全景环面绑定到该帧缓冲对象上进行视频编码,编码后将绑定关系解除,以此类推。

作为一种可选的方案,在通过gpu在虚拟场景中的目标位置上以不同的视角获取虚拟场景中的画面之前,还包括:

s1,通过gpu在虚拟场景中创建虚拟相机,其中,虚拟相机用于采集虚拟场景中的全景画面;

s2,在gpu中创建每个视角下的纹理对象,其中,每个视角下的纹理对象用于存储每个视角对应的第一画面。

可选地,在本实施例中,在gpu中创建虚拟相机时,还可以对虚拟相机的参数进行配置,例如:将背景设置为天空盒,将投影模式设置为透视投影模式,将视场角设置为90度,将拍摄区域设置为正方形等等。

作为一种可选的方案,通过gpu在虚拟场景中的目标位置上以不同的视角获取虚拟场景中的画面;在gpu中将画面渲染到与画面对应的视角下的纹理对象上,得到第一画面,其中,每个第一画面对应一个视角包括:

s1,将虚拟相机移动到目标位置,并将虚拟相机的朝向第一视角;

s2,将第一视角作为初始的当前视角,重复执行以下步骤,直至通过虚拟相机采集到全部视角下的画面;

s21,通过虚拟相机从虚拟场景中获取当前视角下的画面;

s22,将获取到的当前视角下的画面渲染到当前视角下的纹理对象上;

s23,将虚拟相机从当前视角转向下一个视角,将下一个视角作为新的当前视角。

可选地,在本实施例中,视角下的画面的采集和渲染过程可以是按照视角顺序完成的,即一个视角下的画面采集和纹理渲染过程结束后,再进行下一个视角下的画面采集和纹理渲染过程,直至将全部视角下的画面采集并渲染完成。

例如:以上述6个视角(前视角、后视角、左视角、右视角、上视角、下视角)为例,首先将虚拟相机的朝向前视角,获取前视角下的画面,并将前视角下的画面渲染到前视角下的纹理对象上,再将虚拟相机的朝向右视角,获取右视角下的画面,并将右视角下的画面渲染到右视角下的纹理对象上,再将虚拟相机的朝向后视角,获取后视角下的画面,并将后视角下的画面渲染到后视角下的纹理对象上,再将虚拟相机的朝向左视角,获取左视角下的画面,并将左视角下的画面渲染到左视角下的纹理对象上,再将虚拟相机的朝向上视角,获取上视角下的画面,并将上视角下的画面渲染到上视角下的纹理对象上,最后将虚拟相机的朝向下视角,获取下视角下的画面,并将下视角下的画面渲染到下视角下的纹理对象上。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

根据本发明实施例的另一个方面,还提供了一种用于实施上述全景画面的获取方法的全景画面的获取装置,如图5所示,该装置包括:

1)获取模块52,用于通过gpu在虚拟场景中的目标位置上以不同的视角获取虚拟场景中的画面;

2)第一渲染模块54,用于在gpu中将画面渲染到与画面对应的视角下的纹理对象上,得到第一画面,其中,每个第一画面对应一个视角;

3)第二渲染模块56,用于在gpu中将每个第一画面渲染到全景纹理对象上,得到虚拟场景的目标全景画面。

可选地,在本实施例中,上述全景画面的获取装置可以应用于如图2所示的终端202所构成的硬件环境中。如图2所示,终端202中设置有图形处理器gpu204,终端202通过gpu204在虚拟场景中的目标位置上以不同的视角获取虚拟场景中的画面;在gpu204中将画面渲染到与画面对应的视角下的纹理对象上,得到第一画面,其中,每个第一画面对应一个视角;在gpu204中将每个第一画面渲染到全景纹理对象上,得到虚拟场景的目标全景画面。

可选地,在本实施例中,上述全景画面的获取装置可以但不限于应用于获取全景画面的场景中。其中,上述全景画面的获取方法可以但不限于应用于各种类型的客户端中,例如,上述客户端可以但不限于包括:在线教育客户端、即时通讯客户端、社区空间客户端、游戏客户端、购物客户端、浏览器客户端、金融客户端、多媒体客户端、直播客户端等。具体的,可以但不限于应用于在上述游戏客户端中获取全景画面的场景中(比如:游戏赛事全景直播、游戏过程的全景录制等等),或还可以但不限于应用于在上述即时通讯客户端中获取全景画面的场景中,以提高获取全景画面的效率。上述仅是一种示例,本实施例中对此不做任何限定。

可选地,在本实施例中,上述虚拟场景可以但不限于为由客户端模拟出的场景,虚拟场景可以运行在客户端上。例如:虚拟场景可以但不限于包括:游戏场景、虚拟展厅等等。

可选地,在本实施例中,上述目标位置为采集虚拟场景中的画面时当前所处的虚拟场景中的位置,该目标位置在全景画面的获取过程中可以在虚拟场景中移动,移动过程可以由用户进行控制,也可以由客户端通过计算用户的感兴趣画面自动控制目标位置移动到用户感兴趣画面所在的位置上。

可选地,在本实施例中,目标位置上的不同的视角可以由用户预先设置,或者可以由客户端根据虚拟场景的信息进行自动配置。例如:可以但不限于设置6个不同的视角,分别为:目标位置的前视角、后视角、左视角、右视角、上视角、下视角,其中的前视角可以为当前显示在屏幕上的画面对应的视角,6个不同的视角的画面组成一个包围目标位置的六边形,可以将6个视角的视场角设置为相同的角度,那么该六边形则为一个立方体。通过这种方式,用户可以在观看全景视频时随意调节视频画面,用户可以看到目标位置周围360度的场景画面。

可选地,在本实施例中,纹理对象可以但不限于为在gpu中创建的用于存储画面的存储介质,gpu从虚拟场景中采集的不同视角下的画面首先被渲染到各个视角下的纹理对象上,在gpu采集到全部视角下的画面后,再将各个视角下的画面渲染到一个全景纹理对象上,得到的该全景纹理对象上的画面即为虚拟场景的目标全景画面。例如:纹理对象可以但不限于为gpu中创建的rendertexture,6个不同视角分别对应一个rendertexture,前视角对应frontrendertexture,后视角对应backrendertexture,左视角对应leftrendertexture,右视角对应rightrendertexture,上视角对应toprendertexture,下视角对应bottomrendertexture,全景纹理对象可以为gpu中创建的framerendertexture。

在一个可选的实施方式中,以游戏比赛的直播为例,用户可以通过客户端观看游戏比赛过程,在游戏运行过程中,游戏场景即为上述虚拟场景,目标位置为当前显示在客户端上的直播画面对应的虚拟场景中的位置,在直播过程中,通过6个视角(前视角(当前显示在客户端上的直播画面对应的视角)、后视角、左视角、右视角、上视角、下视角)获取游戏场景的全景画面。该场游戏比赛通过客户端a进行直播,客户端a通过gpu在游戏场景中的目标位置上以上述6个不同的视角获取虚拟场景中的画面,并在gpu中将得到的6个画面渲染到与该6个画面对应的视角下的纹理对象上,前视角的画面渲染到frontrendertexture上,后视角的画面渲染到backrendertexture上,左视角的画面渲染到leftrendertexture上,右视角的画面渲染到rightrendertexture上,上视角的画面渲染到toprendertexture上,下视角的画面渲染到bottomrendertexture上,得到6个第一画面,再在gpu中将每个第一画面渲染到全景纹理对象framerendertexture上,得到该游戏场景的目标全景画面。游戏直播的导播人员可以根据游戏过程的需要对直播画面的位置进行切换,观看该游戏比赛直播的用户可以通过滑动屏幕调整屏幕上显示的画面,从而观看到当前目标位置上360度视角下的画面,从而使得观看游戏比赛直播的用户能够产生身临其境的感觉,增加用户的沉浸感和参与度,使用户感觉自己身处在比赛中。

可见,通过上述装置,通过gpu将虚拟场景中的目标位置上以不同的视角获取到的虚拟场景中的画面渲染到在gpu中创建的与该画面对应的视角下的纹理对象上,再将各个视角下的纹理对象上的画面渲染到gpu中创建的全景纹理对象上,从而得到虚拟场景的目标全景画面,全程通过gpu中创建的纹理对象上画面的渲染来获取目标位置上虚拟场景的全景画面,从而使得全景画面的获取过程均由gpu来完成,无需占用cpu资源的同时避免cpu与gpu之间进行帧拷贝过程导致的画面出现严重掉帧,并且节省了帧拷贝过程以及cpu处理过程浪费的时间,从而提高了获取全景画面的效率的技术效果,进而解决了相关技术中获取全景画面的效率较低的技术问题。

作为一种可选的方案,上述装置还包括:

1)投影模块,用于将目标全景画面投影到球面展开纹理对象中,得到第二画面;

2)编码模块,用于对第二画面进行视频编码,得到虚拟场景的全景视频信息。

可选地,在本实施例中,上述球面展开纹理对象可以但不限于为gpu中创建的panoramatexture。

可选地,在本实施例中,上述对第二画面进行视频编码的编码方式可以但不限于为硬编码方式。

可选地,在本实施例中,上述目标全景画面可以为虚拟场景中一帧画面对应的全景画面,在虚拟场景的运行过程中,对每一帧画面获取其对应的全景画面,再对每一帧画面的全景画面进行视频编码,得到每一帧画面的全景视频信息。

可选地,在本实施例中,在获取到全景画面之后,将全景画面转换成2d的全景画面,再对2d的全景画面进行硬编码,从而得到视频文件或者视频流作为该虚拟场景的全景视频信息,从而避免对画面进行软编码导致的画面掉帧现象的发生,使得全景视频信息的画面清晰度更高,视频播放的流畅度更佳。

作为一种可选的方案,第二渲染模块包括:

1)创建单元,用于创建全景纹理对象,其中,全景纹理对象用于存储虚拟场景的全景画面,全景纹理对象为立方体纹理对象;

2)渲染单元,用于将每个第一画面渲染到每个视角在立方体纹理对象中对应的面上,其中,不同的视角包括六个视角,六个视角分别与立方体纹理对象的六个面一一对应;

3)第一确定单元,用于将立方体纹理对象上的画面确定为目标全景画面。

可选地,在本实施例中,上述立方体纹理对象可以但不限于为gpu中创建的cubemap,cubemap的每个面对应一个视角。例如:如图3所示,在gpu中创建cubemap作为全景纹理对象,图3为cubemap的展开形式的示意图,cubemap相当于一个由六幅图像拼合组成的立方体盒子,如果观察者位于立方体中心的话,那么每幅图像都会对应立方体的一个表面,并且在物理空间中相当于水平和垂直都是90度的视域范围。而观察者被这样的六幅画面包围在中心,最终的视域范围可以达到水平360度,垂直180度,并且画面是不存在任何扭曲变形的。将每个视角下的纹理对象上的画面渲染到对应的cubemap的面上,从而得到cubemap上的画面即为虚拟场景的目标全景画面。

作为一种可选的方案,投影模块包括:

1)投影单元,用于将目标全景画面投影到包围立方体纹理对象的球面纹理对象上;

2)转换单元,用于对球面纹理对象上的画面进行坐标转换,得到球面纹理对象对应的球面展开纹理对象上的画面。

可选地,在本实施例中,球面纹理对象为一个包围在立方体纹理对象外部的纹理对象。例如:如图4所示,该球面纹理对象的几何模型可以为立方体纹理对象的外接球面,或者是以立方体纹理的中心为中心的包围立方体纹理的球面纹理,将目标全景画面投影到该球面纹理对象上的过程可以但不限于为将立方体纹理上的像素点渲染到立方体纹理的中心与该像素点的连线构成的射线与球面纹理对象的交点上,以这种方式将立方体纹理上的画面投影到球面纹理对象上,得到一个球面纹理对象上的画面。以立方体的外接球体为例,立方体纹理的顶点(abcda1b1c1d1)同时也是球面纹理上的点(abcda1b1c1d1),即立方体纹理上的点a投影到球面纹理上的点a,立方体纹理上的点b投影到球面纹理上的点b,以此类推。对于立方体纹理上的其他点p,将点p投影到射线op与abcda1b1c1d1所在球面上的点p`上。

可选地,在本实施例中,对球面纹理对象上的画面进行坐标转换的过程可以但不限于为对球面纹理对象上的画面进行极坐标转换,从而将球面纹理对象上的3d画面转换为球面展开纹理对象上的2d画面。

作为一种可选的方案,编码模块包括:

1)编码单元,用于对第二画面进行视频文件编码得到全景视频文件,和/或,对第二画面进行视频流编码得到全景视频流;

2)第二确定单元,用于将全景视频文件和/或全景视频流确定为全景视频信息。

可选地,在本实施例中,全景视频信息可以但不限于包括全景视频文件,全景视频流等等形式的视频信息,全景视频文件可以用于视频文件的制作、视频的录制等等,全景视频流可以用于全景视频直播中。

作为一种可选的方案,编码单元包括:

1)第一处理子单元,用于建立第二画面与帧缓冲对象之间的绑定关系,并将第二画面渲染到帧缓冲对象中的图像原始数据缓存器中,其中,图像原始数据缓存器用于存储第二画面的图像原始数据;

2)第二处理子单元,用于将图像原始数据缓存器中存储的第二画面的图像原始数据输入第一硬编码器得到第一硬编码器输出的全景视频文件,和/或,将图像原始数据缓存器中存储的第二画面的图像原始数据输入第二硬编码器,得到第二硬编码器输出的全景视频流;

3)解除子单元,用于解除第二画面与帧缓冲对象之间的绑定关系。

可选地,在本实施例中,上述帧缓冲对象可以但不限于为gpu中创建的fbo(全称为framebufferobject,是opengl的一种扩展特性,该对象允许把一个离屏缓冲区作为渲染运算的目标)。

可选地,在本实施例中,上述第一硬编码器可以为用于输出视频文件的硬编码器,例如:avassetwriter编码器。上述第二硬编码器可以为用于输出视频流的硬编码器,例如:videotoolbox编码器。上述avassetwriter可以用于视频文件录制,videotoolbox可以用于视频直播推流。

可选地,在本实施例中,全景纹理的分辨率较大,一般都是1080p以上,可以借助移动平台的硬编码器进行视频编码,从而在不占cpu的情况下录制出1080p/4k的全景视频。上述视频编码的过程可以在native层完成,unity是一套跨平台的游戏引擎,可用于开发windows、macos、linux等平台的游戏,或是ios、android等移动设备的游戏,上述目标全景画面的获取过程可以在unity上进行。unity在完成全景纹理的采集合成后调用getnativetextureptr接口向native层传递目标全景画面,再由native层对目标全景画面进行视频编码。

作为一种可选的方案,第一处理子单元用于:检测帧缓冲对象;在检测到帧缓冲对象的情况下,建立第二画面与帧缓冲对象之间的绑定关系;在未检测到帧缓冲对象的情况下,创建帧缓冲对象,并在帧缓冲对象中创建与第二画面的分辨率相同的图像原始数据缓存器;建立第二画面与帧缓冲对象之间的绑定关系。

可选地,在本实施例中,在建立第二画面与帧缓冲对象之间的绑定关系之前可以首先对帧缓冲对象进行检测,如果gpu中已经建立的帧缓冲对象,则将第二画面绑定在已经建立的帧缓冲对象上,如果gpu中尚未建立帧缓冲对象,则首先在gpu中建立帧缓冲对象,再将第二画面绑定在建立的帧缓冲对象上。

可选地,在本实施例中,在一帧目标全景画面编码完成后,可以将画面与帧缓冲对象的绑定关系解除,再将下一帧的目标全景环面绑定到该帧缓冲对象上进行视频编码,编码后将绑定关系解除,以此类推。

作为一种可选的方案,上述装置还包括:

1)第一创建模块,用于通过gpu在虚拟场景中创建虚拟相机,其中,虚拟相机用于采集虚拟场景中的全景画面;

2)第二创建模块,用于在gpu中创建每个视角下的纹理对象,其中,每个视角下的纹理对象用于存储每个视角对应的第一画面。

可选地,在本实施例中,在gpu中创建虚拟相机时,还可以对虚拟相机的参数进行配置,例如:将背景设置为天空盒,将投影模式设置为透视投影模式,将视场角设置为90度,将拍摄区域设置为正方形等等。

可选地,在本实施例中,获取模块和渲染模块可以但不限于通过以下方式获取虚拟场景中的画面并将虚拟场景中的画面渲染到各个视角下的纹理对象上:

将虚拟相机移动到目标位置,并将虚拟相机的朝向第一视角;

将第一视角作为初始的当前视角,重复执行以下步骤,直至通过虚拟相机采集到全部视角下的画面;

通过虚拟相机从虚拟场景中获取当前视角下的画面;

将获取到的当前视角下的画面渲染到当前视角下的纹理对象上;

将虚拟相机从当前视角转向下一个视角,将下一个视角作为新的当前视角。

可选地,在本实施例中,视角下的画面的采集和渲染过程可以是按照视角顺序完成的,即一个视角下的画面采集和纹理渲染过程结束后,再进行下一个视角下的画面采集和纹理渲染过程,直至将全部视角下的画面采集并渲染完成。

例如:以上述6个视角(前视角、后视角、左视角、右视角、上视角、下视角)为例,首先将虚拟相机的朝向前视角,获取前视角下的画面,并将前视角下的画面渲染到前视角下的纹理对象上,再将虚拟相机的朝向右视角,获取右视角下的画面,并将右视角下的画面渲染到右视角下的纹理对象上,再将虚拟相机的朝向后视角,获取后视角下的画面,并将后视角下的画面渲染到后视角下的纹理对象上,再将虚拟相机的朝向左视角,获取左视角下的画面,并将左视角下的画面渲染到左视角下的纹理对象上,再将虚拟相机的朝向上视角,获取上视角下的画面,并将上视角下的画面渲染到上视角下的纹理对象上,最后将虚拟相机的朝向下视角,获取下视角下的画面,并将下视角下的画面渲染到下视角下的纹理对象上。

本发明实施例的应用环境可以但不限于参照上述实施例中的应用环境,本实施例中对此不再赘述。本发明实施例提供了用于实施上述实时通信的连接方法的一种可选的具体应用示例。

作为一种可选的实施例,上述全景画面的获取方法可以但不限于应用于如图6所示的游戏赛事直播中获取游戏场景中的全景画面的场景中。在本场景中,提出了一种在移动端实时输出游戏全景画面的方法,实现了在玩游戏的同时录制或者直播游戏场景中的全景画面。该方法的整个游戏画面的采集过程,全景画面的合成过程均在gpu中完成,编码环节借助移动端的硬编码器可以高效的从gpu纹理中读取图像数据。

在全景画面的合成过程中,采用cubemap投影方式来采集unity中游戏场景中的全景画面。cubemap相当于一个由六幅图像拼合组成的立方体盒子,如果观察者位于立方体中心的话,那么每幅图像都会对应立方体的一个表面,并且在物理空间中相当于水平和垂直都是90度的视域范围。而观察者被这样的六幅画面包围在中心,最终的视域范围同样可以达到水平360度,垂直180度,并且画面是不存在扭曲变形的。

在本场景中,如图6所示,全景画面的合成过程包括如下步骤:

步骤1,创建用于拍摄全景视频的虚拟相机camera,camera的位置可以根据需要任意调整,可以实现跟拍,环绕,拉近,拉远,航拍等多种镜头语言。camera的关键参数可以进行如下设置:

videocamera=cameraobj.addcomponent<camera>();

//默认背景为天空盒

videocamera.clearflags=cameraclearflags.skybox;

//设置为透视投影模式

videocamera.orthographic=false;

//视场角fov必须为90

videocamera.fieldofview=90;

//拍摄区域设置为正方形

videocamera.rect=newrect(0,0,1.0f,1.0f);

步骤2,创建用于渲染全景画面的全景纹理对象:framerendertexure,代码如下:

framerendertexture=newrendertexture(framewidth,frameheight,24);

framerendertexture.wrapmode=texturewrapmode.clamp;

framerendertexture.filtermode=filtermode.trilinear;

framerendertexture.hideflags=hideflags.hideanddontsave;

framerendertexture.create();

步骤3,在游戏的每一帧画面渲染完成后(lateupdate回调函数中),开始进行全景画面的采集,一次全景画面的采集需要camera分别采集前后左右上下6个方向的画面,由此得到6张纹理(前视角的画面渲染到frontrendertexture上,后视角的画面渲染到backrendertexture上,左视角的画面渲染到leftrendertexture上,右视角的画面渲染到rightrendertexture上,上视角的画面渲染到toprendertexture上,下视角的画面渲染到bottomrendertexture),这6张纹理正好组成一个cubemap。每个方向的画面采集操作代码如下:

//创建每个方向的渲染纹理

facetexture=newrendertexture(width,height,24);

//设置camera的朝向faceangle

videocamera.transform.eulerangles=faceangle;

//设置camera的目标渲染纹理

videocamera.targettexture=facetexture;

//启动渲染

videocamera.render();

步骤4,将cubemap中的6张纹理投影到一张球面展开纹理对象中。投影变换由自定义shader完成,自此从6个方向的纹理画面采集渲染到全景纹理对象的投影变换均在gpu中完成。

可选地,在本实施例中,cubemap中的6张纹理可以投影到一张球面展开纹理对象上,该球面展开纹理对象的几何模型可以描述为一个立方体外球,从立方体中心射出的光线将立方体6个面的纹理画面投影到球面上,再将球面纹理通过坐标系转换展开就得到了最终的2d全景纹理(panoramatexture)。

在本场景中,全景画面的编码过程如下:由于全景纹理的分辨率较大,一般都是1080p以上,可以借助移动平台的硬编码器进行视频编码,从而在不占cpu的情况下录制出1080p/4k的全景视频信息。编码流程可以均在native层完成,unity在完成全景画面的采集合成后调用getnativetextureptr接口向native层传递全景画面。

下面以ios平台为例,介绍对全景画面进行编码的具体过程:

ios平台有2套api可以实现视频编码,分别是用于输出视频文件的avassetwriter和用于输出视频流的videotoolbox,它们的输入图像对象均为cvpixelbufferref。avassetwriter可以用于视频文件录制,videotoolbox可以用于视频直播推流。如图7所示,视频编码过程包括如下步骤:

步骤1,通过getnativetextureptr接口接收全景画面,更新updatetexture中的画面。

步骤2,判断fbo是否已经存在,如果不存在,则创建用于渲染纹理的fbo,在fbo中创建与全景纹理画面相同分辨率的纹理图像cvpixelbuffer,将纹理图像cvpixelbuffer关联到fbo的颜色关联点,继续执行步骤3;如果fbo已经存在,则直接执行步骤3。

步骤3,判断program是否存在,如果存在则加载shader,如果不存在则在创建program(glcreateprogram)后加载shader。

步骤4,将全景画面绑定到fbo(glbindframebuffer)

步骤5,将存储在nativepanoramatexture中的全景画面渲染到fbo,代码如下:

glviewport(x,y,width,height);

glbindtexture(gl_texture_2d,nativepanoramatexture);

gldrawarrays(gl_triangle_strip,0,4);

步骤6,此时与fbo关联的纹理图像cvpixelbuffer已经渲染上本次更新的全景画面,将纹理图像cvpixelbuffer传递给avassetwriter用于视频录制,或者传递给videotoolbox用于视频直播推流。

步骤7,解绑fbo,保证游戏画面能够正常渲染到屏幕上。

通过上述方法,可以在玩游戏或者游戏比赛的同时,输出全景视频,让观众可以从一个全新的视角来观看游戏中华丽的地图,炫酷的技能。同时也丰富了vr视频的资源。

根据本发明实施例的又一个方面,还提供了一种用于实施上述全景画面的获取方法的电子装置,如图8所示,该电子装置包括:一个或多个(图中仅示出一个)处理器802、存储器804、传感器806、编码器808以及传输装置810,该存储器中存储有计算机程序,该处理器被设置为通过计算机程序执行上述任一项方法实施例中的步骤。

可选地,在本实施例中,上述电子装置可以位于计算机网络的多个网络设备中的至少一个网络设备。

可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:

s1,通过gpu在虚拟场景中的目标位置上以不同的视角获取虚拟场景中的画面;

s2,在gpu中将画面渲染到与画面对应的视角下的纹理对象上,得到第一画面,其中,每个第一画面对应一个视角;

s3,在gpu中将每个第一画面渲染到全景纹理对象上,得到虚拟场景的目标全景画面。

可选地,本领域普通技术人员可以理解,图8所示的结构仅为示意,电子装置也可以是智能手机(如android手机、ios手机等)、平板电脑、掌上电脑以及移动互联网设备(mobileinternetdevices,mid)、pad等终端设备。图8其并不对上述电子装置的结构造成限定。例如,电子装置还可包括比图8中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图8所示不同的配置。

其中,存储器802可用于存储软件程序以及模块,如本发明实施例中的全景画面的获取方法和装置对应的程序指令/模块,处理器804通过运行存储在存储器802内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的目标组件的控制方法。存储器802可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器802可进一步包括相对于处理器804远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

上述的传输装置810用于经由一个网络接收或者发送数据。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置810包括一个网络适配器(networkinterfacecontroller,nic),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置810为射频(radiofrequency,rf)模块,其用于通过无线方式与互联网进行通讯。

其中,具体地,存储器802用于存储应用程序。

本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:

s1,通过gpu在虚拟场景中的目标位置上以不同的视角获取虚拟场景中的画面;

s2,在gpu中将画面渲染到与画面对应的视角下的纹理对象上,得到第一画面,其中,每个第一画面对应一个视角;

s3,在gpu中将每个第一画面渲染到全景纹理对象上,得到虚拟场景的目标全景画面。

可选地,存储介质还被设置为存储用于执行上述实施例中的方法中所包括的步骤的计算机程序,本实施例中对此不再赘述。

可选地,在本实施例中,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(read-onlymemory,rom)、随机存取器(randomaccessmemory,ram)、磁盘或光盘等。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1