本发明涉及计算机领域,具体而言,涉及一种图像处理方法及装置。
背景技术:
虚拟现实(Virtual Reality,简称为VR)是由美国VPL公司创建人拉尼尔(Jaron Lanier)在20世纪80年代初提出的,其具体内涵在于:综合利用计算机图形系统和多种现实及控制等接口设备,在计算机上生成的、可交互的三维环境中提供沉浸感觉的技术,其中,由计算机生成的、可交互的三维环境称为虚拟环境(Virtual Environment,简称为VE)。虚拟现实技术是一种可以创建和体验虚拟世界的计算机仿真系统的技术,其利用计算机生成一种模拟环境,以及利用多源信息融合的交互式三维动态视景和实体行为的系统仿真使用户沉浸到该环境中。
为了确保VR的舒适体验,VR对于性能的要求极高。高性能的VR体验可以避免因为延时而带来的对于VR体验的不适感。对此,AMD的首席游戏科学家Richard Huddy认为,11毫秒或是更低的延迟对于互动性游戏来说是必需的,而在极个别情况下,20毫秒的延迟在一个360度的虚拟现实电影中移动也是可以接受。需要说明的是,延迟并非是作为一个硬件在性能方面的指标,而仅仅是硬件能否实现虚拟现实这种效果的一条基准线。如果希望延迟度小于20ms,则必须要确保帧率至少达到60帧/秒,甚至90帧/秒以上。而这种性能要求,即便是对于目前的主流智能移动终端而言,都是极为苛刻的。
VR游戏的渲染流水线与普通三维(3D)游戏相比,增加了两个方面的性能开销,其分别为:分屏与畸变校正。
分屏是指通过两个摄像机分别采集游戏场景信息并渲染至屏幕上的过程,该过程相比于普通游戏的单一相机渲染,存在更多的渲染调用(Draw Call,即中央处理器(CPU)向图形处理器(GPU)发送渲染特定物体的指令数目,其可以简单理解为GPU每渲染一个物体,CPU便会发送一条渲染指令),由此增加了渲染开销。同时,分屏操作还使得游戏玩家单眼看到的屏幕分辨率降低至整屏的一半,当屏幕贴近眼睛时很容易产生纱窗效应(即眼睛能够看到屏幕中的格点),进而产生眼部不适。
畸变校正是指为了弥补游戏玩家直接观看VR屏幕产生的图像畸变,对图像进行预先校正的过程。人眼在真实世界中的水平视角在220-230度左右,目前的VR头戴设备为了利用较小的平面显示器模拟出人眼取景宽度,其采用的解决方案是在显示器与人眼之间放置一块凸透镜,人眼通过透镜能够观察到的虚拟世界会比实际显示器屏幕大了很多。然而,透镜的存在会造成图像的色差与桶形失真,因此,为了抵消桶形失真,需要将图像经过畸变校正之后再渲染在显示器屏幕上。
对人眼视觉系统特性的研究表明,人眼对所观察到场景的不同区域的视觉灵敏度是有所差异的。在视觉系统中,视网膜中心凹区域是视觉最敏锐的区域,因此,人眼对投射到该区域的场景光线最为敏感,而对于其他场景区域的关注度则相对较低。简而言之,位于人眼视线中心凹视区域的物体具有最高的关注度,并且关注度随着物体偏离视线方向的程度呈下降趋势。
相关技术中,英伟达提供了一种基于多分辨率着色的技术,其将屏幕划分为九个部分,除了中间位置的主要部分采用原精度渲染以外,其余部分均降低渲染的分辨率。然后,在降低周围部分的精度之后,再将周围部分拉伸到原来的大小。这样即可完成多分辨率着色(即中心部分与周围部分渲染的分辨率不同)。
然而,由于英伟达是在硬件层面提出的上述解决方案,因此,该技术只支持英伟达自身推出的显卡,由此便会限制智能移动终端VR无法使用这项技术。
针对上述的问题,目前尚未提出有效的解决方案。
技术实现要素:
本发明实施例提供了一种图像处理方法及装置,以至少解决相关技术中需要依赖增加特定类型硬件来优化VR渲染效率,成本较高,使用局限性较强的技术问题。
根据本发明实施例的一个方面,提供了一种图像处理方法,包括:
根据单眼敏感度的视觉差异特性将待显示图像划分为显示区域与遮挡区域;剔除遮挡区域内与预先配置的遮挡部件对应的像素;对遮挡区域进行模糊化处理并对显示区域与处理后的遮挡区域进行桶形畸变处理;将经过处理的待显示图像输出至屏幕上。
可选地,剔除遮挡区域内与遮挡部件对应的像素包括:将遮挡部件放置于应用场景下全部待渲染物体之前最靠近相机的位置处;采用遮挡部件的初始深度值剔除待遮挡的片元;按照遮挡部件的初始颜色值设置待遮挡的片元的颜色。
可选地,对遮挡区域进行模糊化处理包括:选取步骤,从遮挡区域选取待插值像素,其中,待插值像素的颜色是根据初始颜色值确定的;第一处理步骤,获取与待插值像素相邻的上方、下方、左方、右方、左上方、右上方、左下方和右下方的八个像素,对八个像素的颜色值执行求取平均值运算得到插值结果,以及将初始颜色值调整至插值结果;判断步骤,判断是否还存在尚未处理的待插值像素,如果存在,则返回选取步骤。
可选地,在第一处理步骤之后,还包括:第二处理步骤,对八个像素的颜色值和插值结果执行卷积运算,得到卷积结果,以及根据卷积结果对八个像素的颜色值和初始颜色值进行调整。
可选地,对显示区域与处理后的遮挡区域进行桶形畸变处理包括:根据齐次裁剪空间坐标对应的第一取值范围将待显示图像所采用的空间坐标变换至齐次裁剪空间坐标;利用变换后的齐次裁剪空间坐标执行桶形畸变运算,得到运算结果;根据待显示图像所采用的空间坐标对应的第二取值范围将运算结果变换回待显示图像所采用的空间坐标。
根据本发明实施例的另一方面,还提供了一种图像处理装置,包括:
划分模块,用于根据单眼敏感度的视觉差异特性将待显示图像划分为显示区域与遮挡区域;剔除模块,用于剔除遮挡区域内与预先配置的遮挡部件对应的像素;处理模块,用于对遮挡区域进行模糊化处理并对显示区域与处理后的遮挡区域进行桶形畸变处理;显示模块,用于将经过处理的待显示图像输出至屏幕上。
可选地,剔除模块包括:配置单元,用于将遮挡部件放置于应用场景下全部待渲染物体之前最靠近相机的位置处;剔除单元,用于采用遮挡部件的初始深度值剔除遮挡区域内对应的待遮挡的片元;设置单元,用于按照遮挡部件的初始颜色值设置待遮挡的片元的颜色。
可选地,处理模块包括:选取单元,用于从遮挡区域选取待插值像素,其中,待插值像素的颜色是根据初始颜色值确定的;第一处理单元,用于获取与待插值像素相邻的上方、下方、左方、右方、左上方、右上方、左下方和右下方的八个像素,对八个像素的颜色值执行求取平均值运算得到插值结果,以及将初始颜色值调整至插值结果;判断单元,用于判断是否还存在尚未处理的待插值像素,如果存在,则返回选取单元。
可选地,处理模块还包括:第二处理单元,用于对八个像素的颜色值和插值结果执行卷积运算,得到卷积结果,以及根据卷积结果对八个像素的颜色值和初始颜色值进行调整。
可选地,处理模块包括:第一变换单元,用于根据齐次裁剪空间坐标对应的第一取值范围将待显示图像所采用的空间坐标变换至齐次裁剪空间坐标;计算单元,用于利用变换后的齐次裁剪空间坐标执行桶形畸变运算,得到运算结果;第二变换单元,用于根据待显示图像所采用的空间坐标对应的第二取值范围将运算结果变换回待显示图像所采用的空间坐标。
在本发明实施例中,采用根据单眼敏感度的视觉差异特性将待显示图像划分为显示区域与遮挡区域的方式,通过剔除遮挡区域内与预先配置的遮挡部件对应的像素,对遮挡区域进行模糊化处理并对显示区域与处理后的遮挡区域进行桶形畸变处理,以及将经过处理的待显示图像输出至屏幕上,达到了利用非中心凹视区像素剔除结合模糊化处理与畸变运算技术,在不明显降低视觉效果的基础上提升了VR游戏的渲染性能的目的,从而实现了减少渲染片元的数量,缓解片元着色器的渲染压力,优化VR渲染性能的技术效果,进而解决了相关技术中需要依赖增加特定类型硬件来优化VR渲染效率,成本较高,使用局限性较强的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的图像处理方法的流程图;
图2是根据本发明优选实施例的渲染管线示意图;
图3是根据本发明优选实施例的剔除待遮挡的片元得到的效果示意图;
图4是根据本发明优选实施例的对待显示图像进行模糊化处理前后的对比效果示意图;
图5是根据本发明优选实施例的桶形畸变坐标变换过程示意图;
图6是根据本发明优选实施例的在完成桶形畸变处理后得到的最终效果示意图;
图7是根据本发明实施例的图像处理装置的结构框图;
图8是根据本发明优选实施例的图像处理装置的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本发明实施例,提供了一种图像处理方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本发明实施例的图像处理方法的流程图,如图1所示,该方法包括如下步骤:
步骤S12,根据单眼敏感度的视觉差异特性将待显示图像划分为显示区域与遮挡区域;
步骤S14,剔除遮挡区域内与预先配置的遮挡部件对应的像素;
步骤S16,对遮挡区域进行模糊化处理并对显示区域与处理后的遮挡区域进行桶形畸变处理;
步骤S18,将经过处理的待显示图像输出至屏幕上。
通过上述步骤,采用根据单眼敏感度的视觉差异特性将待显示图像划分为显示区域与遮挡区域的方式,通过剔除遮挡区域内与预先配置的遮挡部件对应的像素,对遮挡区域进行模糊化处理并对显示区域与处理后的遮挡区域进行桶形畸变处理,以及将经过处理的待显示图像输出至屏幕上,达到了利用非中心凹视区像素剔除结合模糊化处理与畸变运算技术,在不明显降低视觉效果的基础上提升了VR游戏的渲染性能的目的,从而实现了减少渲染片元的数量,缓解片元着色器的渲染压力,优化VR渲染性能的技术效果,进而解决了相关技术中需要依赖增加特定类型硬件来优化VR渲染效率,成本较高,使用局限性较强的技术问题。
由于VR游戏对性能有较高的要求,为了在保证视觉效果的基础上实现高效的渲染,本发明基于人眼视觉系统的特性,通过缓解片元着色器的渲染压力,本发明优选实施例在软件级别提供了一种针对VR游戏渲染的优化方案,使得VR的渲染流程更加优化,从而在确保画质不会过分损失的情况下,使得性能得到最大地优化。
为此,在本发明实施例所提供的技术方案中,渲染管线需要支持Early-Z技术。图2是根据本发明优选实施例的渲染管线示意图,如图2所示,Early-Z技术的渲染管线位于片元着色器之前,可以执行一次深度检测操作,从而剔除部分片元,使其无法进行片元着色器的计算。由于目前智能移动终端(例如:智能手机)的渲染瓶颈主要集中在片元着色器上(其原因在于手机的分辨率极高,通常为2k-2.5k,而片元着色器是逐像素进行运算的,因此,片元着色器是手机应用的渲染瓶颈点),通过Early-Z提前进行深度检测使得一部分片元无法通过片元着色器而被丢弃,而伴随着片元的数量的减少,那么需要片元着色器处理的像素也随之减少,从而能够有效地优化渲染的性能。
深度检测是指对所有片元的深度值依次与深度缓存中的深度值进行比较,当片元的深度大于(既离相机更远)深度缓存中的深度值时,该片元则被舍弃(当然,具体的舍弃条件可以自行设置,在通常情况下默认是大于深度缓存中的深度值则被舍弃。考虑到近处物体遮挡远处物体,故在优选实施例中采用大于深度缓存中的深度值则被舍弃)。通过在片元着色器之前执行深度检测对片元进行筛选,可以有效地减少片元着色器着色的片元数量。
需要说明的是,根据GPU流水管线处理的阶段不同,其处理的基本单位也存在差异,例如:顶点着色器负责处理顶点和向量,而片元着色器负责处理的基本单位便是片元。片元可以理解为一个三角形(之前存在关联的顶点作为三角形的三个顶点,该关联关系是在3D建模的时候通过建模工具确定的,并且其形状均为三角形,换言之,模型是由多个三角形面组成的)及其所包围的所有像素以及每个像素的各项参数(三角形设置阶段会确定三角形三条边的函数,三角形遍历阶段会通过这三个函数确定其包含哪些像素。这两个阶段结束后真正需要使用的是包含的像素以及像素的参数,即为片元着色器所处理的片元)。片元着色器处理的单位是片元,但是运算过程中的最小单位则是像素。换言之,进入片元着色器的虽然是片元,但是每个片元在被片元着色器处理时,则真正处理的是像素,因此,片元着色器有时又被称为像素着色器(Pixel Shader)。
在VR当中,由于屏幕与人眼之间的距离非常近,同时人眼的移动范围又是有限的,这便使得在VR渲染的单眼图像中,只有中心的部分才会被人眼时刻注意,而边缘部分并不会被过分注意。因此,对于边缘部分,降低渲染的像素精度,并不会造成视觉上的影响。
可选地,在步骤S14中,剔除遮挡区域内包含的像素可以包括以下执行步骤:
步骤S141,将遮挡部件放置于应用场景下全部待渲染物体之前最靠近相机的位置处;
步骤S142,采用遮挡部件的初始深度值剔除待遮挡的片元;
步骤S143,按照遮挡部件的初始颜色值设置待遮挡的片元的颜色。
为了实现上述目的,通过程序或者美术生成一个遮挡部件(例如:遮挡板),其中间区域被挖空,这个遮挡板用于剔除上述不被人眼充分注意到的部分区域像素。遮挡板是指在3D相机前摆放一块模型板,其目的在于:使得一部分被该遮挡板挡住的片元在Early-Z执行深度检测时,由于条件不成立而无法通过。具体地,若希望使得条件不成立,则在与深度缓存比较深度值时,需要确保片元的深度值大于深度缓存的深度值才会被舍弃。那么,只需将遮挡板调整至与相机之间的距离足够近,并且在所有正常渲染的片元之前被渲染,即为了第一个写入深度缓存,由此便能够实现被挡板挡住的片元被舍弃。遮挡版实际上只是剔除中心外面的一圈像素,即外圈像素。
Z-Test通常会配合Z-Write加以使用,Z-Test即为前述在默认情况下大于深度缓存中的深度值则被舍弃,而小于深度缓存中的深度值则会通过,进入下一阶段。在通过的片元中通过设置Z-Write(On或者Off),来确定这些通过的片元是否需要将这个片元的深度值覆盖写入深度缓存中。在默认情况下,需要写入深度缓存中,即深度缓存中存储的深度值会逐渐变小,由此为后面的遮挡板剔除奠定基础。
另外,深度缓存是基于像素而言的,但是片元可以包含多个像素(其包含的像素还可能会发生重复,即片元可以发生重叠,并且每个像素的深度值可能不同),故而在执行深度检测时,片元的深度值通常采用中心像素的深度值。
以Unity引擎为例,其剔除原理如下:
1)需要确保遮挡板部分在渲染队列的第一个,需要设置如下标签:
Tags{"RenderType"=”Transparent""Queue"="Background-1"}
渲染队列是指全部渲染的物体都需要排队,依次被GPU渲染,那么便可以对这些物体进行编号,其规则为编号越小则优先被渲染。上述RenderType表示类型,设置为透明是为了使得存在遮挡板的部分显示为特定颜色(例如:黑色,其透明度值为零),而其他部分均被正常渲染。Queue表示队列的编号,Background的初始值设置为1000。在正常情况下是不会设置小于999的。由此便能够确保该遮挡板用来实现遮挡的部分最先写入深度缓存,并且因为距离相机很近(通过人为设置),所以,该遮挡板所遮挡的片元均无法通过深度检测。
2)确保遮挡板可以下入深度缓存,需要进行如下设置:
ZWrite On
即遮挡板未遮挡的部分片元可以写入深度值,该遮挡板用来实现遮挡的部分片元,将遮挡板的深度值写入深度缓存。
3)遮挡板部分向颜色缓存写入颜色值(0,0,0,0),其代码示例如下:这段代码表示一个完整的片元着色器;
fixed4 frag(v2f i):SV_Target
{
return fixed4(0.0,0.0,0.0,0.0);
}
颜色缓存与深度缓存类似,即每个像素对应一个颜色缓存的值,该颜色缓存负责存放当前像素的颜色,在一帧完成后,颜色缓存会直接渲染到屏幕上。
目前,GPU均包括两个颜色缓存,被称为前缓存与后缓存,其中,前缓存用于在屏幕上进行显示,而后缓存则用于参与GPU的各种渲染运算。当运算完成后,会交换前缓存与后缓存的值,因为在运算过程中会改变后缓存的值,但是后缓存并未直接显示在屏幕上,所以用户看不到。
图3是根据本发明优选实施例的剔除待遮挡的片元得到的效果示意图,如图3所示,图像中的圆形空白区域为上述显示区域,其用于展示应用场景下实际待渲染的物体;圆形空白区域外的网格区域为上述遮挡区域(包括:交替规则排列的显示为黑色的片元与未显示为黑色的片元),其中,全部显示为黑色的片元构成上述遮挡板。
需要说明的是,图3中所示的显示区域的形状与遮挡板的配置方式仅为优选示例,其并不构成对本发明的不当限制,该显示区域还可以为其他形状(例如:正方形),该遮挡板还可以采用其他排列方式。
通过深度检测阶段的片元的RGBA值会变成(0,0,0,0)来表示无颜色像素,之所以称为无色是因为其RGBA四个值都是0(通常色彩是通过三原色红(Red)绿(Green)蓝(Blue)的量来描述的,而阿尔法(Alpha)则表示透明度),即透明度为0的黑色可以称为无色,遮挡板的遮挡部分全部会变成无颜色,其原因在于:设置成无颜色是为了与黑色加以区分,考虑到游戏环境下很可能存在黑色的物件,但基本上不可能存在透明的黑色)。当其他的物体被渲染时,由于遮挡板已经写入深度缓存,其他物体被遮挡板挡住的部分便不会被渲染,将显示颜色值为(0,0,0,0)。最终,左眼与右眼分别输出一张贴图,被用于渲染双眼的图像。
可选地,在步骤S16中,对遮挡区域进行模糊化处理可以包括以下执行步骤:
步骤S161,从遮挡区域选取待插值像素,其中,待插值像素的颜色是根据初始颜色值确定的;
步骤S162,获取与待插值像素相邻的上方、下方、左方、右方、左上方、右上方、左下方和右下方的八个像素,对八个像素的颜色值执行求取平均值运算得到插值结果,以及将初始颜色值调整至插值结果;
步骤S163,判断是否还存在尚未处理的待插值像素,如果存在,则返回选取步骤S161。
图4是根据本发明优选实施例的对待显示图像进行模糊化处理前后的对比效果示意图,如图4所示,对于输出的贴图在进行桶形畸变之前,对每个图像分别将颜色为(0,0,0,0)的部分进行插值运算,即可使得周围的像素模糊化。
插值运算即表示选取与透明的黑色(0,0,0,0)的像素相邻的上、下、左、右、左上、右上、左下、右下的像素的颜色(不为透明的黑色,可以通过手动调整参数保证),然后对这8个染色取平均值,并将这个值赋予这个无颜色的像素,此过程被称为线性插值。
这里需要指出的是,图4所示的效果对比示意图仅是为了描述在渲染阶段中图像在经过模糊处理后得到的模糊结果。在优选实施例中,为了优化VR渲染性能,需要将模糊处理与畸变处理加以合并,换言之,对先前输入的图像先进行模糊运算,其结果并不直接输出(即图4所示的模糊结果并不会实际出现),而需要再进一步进行畸变运算,由此确保只有存在一个后处理过程,对图像的采样次数为1次。
可选地,在步骤S162之后,还可以包括以下执行步骤:
步骤S164,对八个像素的颜色值和插值结果执行卷积运算,得到卷积结果,以及根据卷积结果对八个像素的颜色值和初始颜色值进行调整。
当然,为了使得颜色更柔和,还可以进行卷积运算,卷积即为对线性插值后的这9个颜色(原来八个颜色加上插值后得到的颜色)进行卷积运算。
卷积运算通常是针对矩阵来使用的。上述八个像素的颜色值加上初始颜色值共九个颜色可以组成3*3的矩阵,其中,初始颜色值位于中间位置,而其余八个像素的颜色值按照选取时的位置进行排列。在对这个矩阵进行卷积计算后会得到一个新的3*3的矩阵(上述九个值均会发生变化),然后再利用计算得到的新矩阵覆盖原来的矩阵,由此得到模糊效果。
可选地,在步骤S16中,对显示区域与处理后的遮挡区域进行桶形畸变处理可以包括以下执行步骤:
步骤S165,根据齐次裁剪空间坐标对应的第一取值范围将待显示图像所采用的空间坐标变换至齐次裁剪空间坐标;
步骤S166,利用变换后的齐次裁剪空间坐标执行桶形畸变运算,得到运算结果;
步骤S167,根据待显示图像所采用的空间坐标对应的第二取值范围将运算结果变换回待显示图像所采用的空间坐标。
在优选实施例中,将经过插值运算的与左眼与右眼分别对应的两张贴图进行桶形畸变处理,其桶形畸变的原理如下(以Unity引擎为例):
图5是根据本发明优选实施例的桶形畸变坐标变换过程示意图。图6是根据本发明优选实施例的在完成桶形畸变处理后得到的最终效果示意图,如图5和图6所示,首先,将图像的uv坐标(通常标准的uv值在[0,1]这个取值范围内)左边变换到NDC,即齐次裁剪空间,其取值范围为[-1,1],其公式如下(以Unity引擎为例):
xn=(2x-w)/w
yn=(2y-h)/h
其中,x和y表示图像的横坐标与纵坐标,即上述uv坐标;w,h表示屏幕的宽与高(即分辨率,也是像素数目,例如:1920*1080),通过该公式可以将任意的xy坐标变换到齐次裁剪空间(即NDC,其坐标范围在[-1,1]之间)。
对应于上述公式的代码示例如下:
i.texcoord=(2.0*i.texcoord-1.0)/1.0;
其中,i表示输入,i.texcoord表示输入的图像坐标(即uv坐标,也是xy坐标)。这个代码可以一次性处理xy,所以两个公式实际上是相同的运算,就只用一条代码。
其次,将uv结果导入桶形畸变公式,其公式如下(以Unity引擎为例):
其中,ru为发生畸变前的半径值,rd为发生畸变后的半径值,α表示畸变度,其取值越大,表示畸变程度越大。
对应于上述公式的代码示例如下:
floatr=i.texcoord.x*i.texcoord.x+i.texcoord.y*i.texcoord.y;//计算出rd,即xy的平方和开根号计算半径
uv=i.texcoord/(1.0-_Distortion*r);//将计算出的rd带入右边公式进行一次畸变,_Distortion代表畸变度α
uv=uv/(1.0-_Distortion*(uv.x*uv.x+uv.y*uv.y));//对结果再进行一次畸形,其目的在于:使得畸变的图形更加饱满,效果更好。
再次,将畸变后的uv变换回原来的坐标空间[0,1],其代码示例如下(以Unity引擎为例):
i.texcoord=(uv+1.0)*1.0/2.0;
然后,再将uv坐标范围超过uv的部分显示为黑色,其代码示例如下(以Unity引擎为例):
如上所述,通常标准的uv值在[0,1]这个取值范围内,因此,在该取值范围的部分便可以正常图像内容,而在该取值范围外的部分便需要显示为黑色。
在桶形畸变完成后,将结果输出至相机上便可完成整个流程。
需要说明的是,桶形畸变是将一个矩形的四条边向外拉伸的一种变形,虽然其数学模型存在多种形式,但是基本思想均是对四边形的四条边进行曲线化处理,从而使得曲线向外突出,其中,较为精确的计算方式是采用泰勒公式进行曲线拟合。在上述优选实施例中,采用的是经过简化的泰勒公式,其目的在于:降低运算量。
运用桶形畸变实际上是为了抵抗透镜对屏幕的变形,VR的透镜属于凸透镜,如同鱼眼相机。这样的透镜可以使得用户看到的角度增大(正常人眼最多能够观察到前方220度范围内的成像,而如果不使用凸透镜,即便屏幕无限接近于人眼也仅能够观察到前方180度范围内的成像,所以必须使用凸透镜)。然而,使用这种凸透镜会使得通过透镜看到的屏幕变形,通常凸透镜对屏幕的变形会使得屏幕向内凹陷,而桶形畸变则可以使得图像向外突出,其正好可以抵消凸透镜所带来的变形。
此外,还需要说明的是,上述剔除操作是针对3D模型进行的,即,在GPU渲染阶段的Early-Z进行的。而在执行上述模糊时,GPU的渲染流程已经完成,换言之,GPU已经输出了整个图像。VR渲染实际上是需要区分左眼与右眼的,左眼与右眼分别对应一个图像,然后再将两个图像一起被渲染到屏幕上,即,存在三个完整的GPU渲染阶段。而模糊是对左眼与右眼的渲染流程完成之后,针对输出的左眼与右眼对应的图像分别执行模糊处理。进一步地,上述畸变处理与模糊处理相类似,需要在对左眼与右眼分别进行模糊处理之后,再分别对这两个图像进行畸变处理。最终,再将两张经过畸变处理的分别与左眼与右眼对应的图像拼接成双眼图像显示到屏幕上。
另外,上述提到的渲染流程与渲染阶段是存在区别的,渲染流程结束代表输出一个图像,但这个渲染阶段还并未结束,之后进行的模糊处理和畸变处理均被成为后处理(后处理都是输入一个图像,在运算结束后再输出一个图像),直至全部后处理执行完毕再输出一个图像,此时一个完整的渲染阶段才执行完毕。
综上所述,本发明实施例所提供的技术方案基于人眼敏感度视觉区域差异这一视觉特性,利用非中心凹视区域的像素剔除再结合插值运算与畸变运算技术,在未明显降低视觉效果的前提下提升VR应用的渲染性能。具体地,非中心凹视区域的像素剔除与插值可以划分为以下两个阶段:
第一阶段,像素剔除,在渲染流水线Early-Z阶段利用深度检测剔除非中心凹视区域的像素,其结果用于优化VR应用的渲染性能。
第二阶段,像素插值,在图像后处理阶段中,对被剔除像素的邻域像素颜色进行采样并插值,将插值结果作为被剔除像素的颜色,再经过桶形畸变处理,最终显示在屏幕中,其结果用于确保对人眼视觉不会产生不良影响。
为了缓解片元着色器的渲染压力,通过执行像素剔除操作能够有效地减少GPU在片元着色器阶段需要处理的片元数量,并且将颜色插值与桶形畸变统一整合到一次后处理过程中,从而有效地减少了渲染片元的数量以及后处理的采样次数,优化了VR渲染的性能,大约可以提升3-6%的运算效率(伴随着片元着色器的性能压力增大而增大)。
根据本发明实施例,提供了一种图像处理装置的实施例,图7是根据本发明实施例的图像处理装置的结构框图,如图7所示,该装置可以包括:划分模块10,用于根据单眼敏感度的视觉差异特性将待显示图像划分为显示区域与遮挡区域;剔除模块20,用于剔除遮挡区域内与预先配置的遮挡部件对应的像素;处理模块30,用于对遮挡区域进行模糊化处理并对显示区域与处理后的遮挡区域进行桶形畸变处理;显示模块40,用于将经过处理的待显示图像输出至屏幕上。
可选地,如图8所示,剔除模块20可以包括:配置单元200,用于将遮挡部件放置于应用场景下全部待渲染物体之前最靠近相机的位置处;剔除单元202,用于采用遮挡部件的初始深度值剔除遮挡区域内对应的待遮挡的片元;设置单元204,用于按照遮挡部件的初始颜色值设置待遮挡的片元的颜色。
可选地,如图8所示,处理模块30可以包括:选取单元300,用于从遮挡区域选取待插值像素,其中,待插值像素的颜色是根据初始颜色值确定的;第一处理单元302,用于获取与待插值像素相邻的上方、下方、左方、右方、左上方、右上方、左下方和右下方的八个像素,对八个像素的颜色值执行求取平均值运算得到插值结果,以及将初始颜色值调整至插值结果;判断单元304,用于判断是否还存在尚未处理的待插值像素,如果存在,则返回选取单元。
可选地,如图8所示,处理模块30还可以包括:第二处理单元306,用于对八个像素的颜色值和插值结果执行卷积运算,得到卷积结果,以及根据卷积结果对八个像素的颜色值和初始颜色值进行调整。
可选地,如图8所示,处理模块30可以包括:第一变换单元308,用于根据齐次裁剪空间坐标对应的第一取值范围将待显示图像所采用的空间坐标变换至齐次裁剪空间坐标;计算单元310,用于利用变换后的齐次裁剪空间坐标执行桶形畸变运算,得到运算结果;第二变换单元312,用于根据待显示图像所采用的空间坐标对应的第二取值范围将运算结果变换回待显示图像所采用的空间坐标。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。