一种基于帧间抖动的平滑渲染方法与流程

文档序号:21444343发布日期:2020-07-10 17:33阅读:410来源:国知局
一种基于帧间抖动的平滑渲染方法与流程

本发明属于3d实时渲染领域,尤其涉及一种基于帧间抖动的平滑渲染方法。



背景技术:

现有的3d实时平滑渲染方法:

基于硬件提供的几何缓冲区像素多重采样方法,在渲染开始前创建法线、粗糙度、金属都、高光、基础颜色多张渲染目标纹理,在基于延时渲染策略的渲染管线里,由于几何缓冲区存储大量数据造成了严重的性能问题,同时采样只局限在一个像素内。

该类方法的主要缺陷:

渲染画面主要有两种不平滑问题,

一种是几何的突变,当视角变化时,物体边缘产生强烈的锯齿感;

一种是着色的突变,相邻区域的像素颜色值差别太大,当视角变化时,交界处出现强烈的锯齿感。



技术实现要素:

本发明所要解决的技术问题是针对背景技术的不足提供一种基于帧间抖动的平滑渲染方法,通过累加多帧相邻像素的子像素颜色值提升了网格物体渲染过程中画面的平滑感,在保持画面效果的同时避免创建太多几何缓冲区极大降低了性能开销,可作为室内渲染领域渲染的可行优化方案。

本发明为解决上述技术问题采用以下技术方案:

一种基于帧间抖动的平滑渲染方法,具体包含如下步骤:

步骤1,采用哈姆斯利hammersley低差异随机序列,用于把任意顺序的整数映射为[0,1]的均匀随机的低差异序列,通过函数hammersley和倒根函数radicalinverse实现;

步骤2,根据步骤1生成的低差异序列,对投影矩阵projectmatrix进行偏移抖动,进而生成偏移抖动的投影矩阵,新的投影矩阵可以偏移摄像机渲染的一帧;

步骤3,多帧生成像素的多个子像素,每一帧摄像机根据新的抖动偏移渲染像素的子像素;

步骤4,采样子像素当前帧的像素值,从当前帧的渲染目标纹理中取得;

步骤5,累加多帧实现平滑算法,每一帧对应像素的一个子像素,采样每一帧后进行加权累加;

步骤6,色调映射处理闪烁,由于累加多帧时相邻子像素的颜色值差异太大会导致闪烁,需做色调映射对颜色值的范围进行限制,降低闪烁;

步骤7,clamp截断处理模糊,在相机移动时,像素会累加上一帧的相同位置的像素导致模糊,需要进行截断处理,舍弃上一帧的像素值。

作为本发明一种基于帧间抖动的平滑渲染方法的进一步优选方案,在步骤1中,所述低差异序列是一种分布在[0,1]空间中的点集;

采用哈姆斯利hammersley低差异序列,此序列可把任意顺序的整数映射为[0,1]的均匀随机的低差异序列,通过函数hammersley和倒根函数radicalinverse实现。

作为本发明一种基于帧间抖动的平滑渲染方法的进一步优选方案,所述步骤2具体如下:根据步骤1生成的低差异序列,对投影矩阵projectmatrix进行偏移抖动,因为投影矩阵对观察坐标系的顶点变换归一化后为标准设备坐标系,对投影矩阵的抖动恰好使其对应于像素的子像素位置

projectionmatrix.m[2][0]+=jitter.x;

projectionmatrix.m[2][1]+=jitter.y;

projectionmatrix是四行四列的投影矩阵,通过对投影矩阵的第三行的前两个成员累加(+=)实现对摄像机的抖动

其中projectionmatrix.m[2][0]/.m[2][1]为矩阵第三行的前两个值,jitter.x为x方向上的抖动,jitter.y为y方向上的抖动。

作为本发明一种基于帧间抖动的平滑渲染方法的进一步优选方案,所述步骤3具体如下:

步骤3.1,计算像素点上一帧在什么位置,可用这一帧的归一设备坐标,乘上viewprojection矩阵的逆矩阵,再乘上一帧的viewprojection矩阵,变换到上一帧的裁剪空间里,且要保存摄像机上一帧的viewprojection矩阵;其中,view为观察,projection投影;

步骤3.2,根据物体的移动,可以保存物体上一帧的位置,然后同一个局部坐标的点,分别乘这一帧和上一帧的world世界矩阵,再分别乘这一帧和上一帧的viewprojection矩阵,就得到裁剪空间里的位置,保存这一帧减上一帧作为这一帧的速度,可得到多帧的多个子像素的位置。

作为本发明一种基于帧间抖动的平滑渲染方法的进一步优选方案,所述步骤4具体如下:根据步骤3产生当前帧的子像素位置subpixeluv,计算出子像素的像素值pixelcolor:

pixelcolor=sum(lights,subpixeluv,normal);sum为累加,lights为场景里的所有光照,normal为子像素的法线。

作为本发明一种基于帧间抖动的平滑渲染方法的进一步优选方案,所述步骤5具体如下:根据步骤4得到当前帧的子像素像素值pixelcolor,需要应用平滑算法将其累加到之前累计多帧的结果上:

pixelresult=alpha*pixelcolor+(1-alpha)*pixelresult

其中,pixelresult为累加多帧子像素像素值的结果,也就是最红显示在屏幕上的值,alpha是平滑系数,可通过调节alpha值改善平滑算法的平滑速度和效果。

作为本发明一种基于帧间抖动的平滑渲染方法的进一步优选方案,在步骤6中,通过色调映射进行处理,色调映射是一种把像素颜色值范围从一个范围变换到另一个范围的映射方法,由于闪烁问题是因为少数像素颜色值过大,可采取色调映射将整体像素值映射到一个较高的范围从而减少差异,具体实现方法:

步骤6.1,将颜色的表示方式从rgb模式变换为ycocg模式;

步骤6.2,色调映射把颜色值做范围映射。

作为本发明一种基于帧间抖动的平滑渲染方法的进一步优选方案,在步骤7中,在相机或者物体移动过程中,由于当前像素累加了之前多帧的结果,会变得模糊,通过clamp截断可把像素的颜色值强行变化为当前像素的颜色值,具体方法如下:

步骤7.1,根据相邻多个像素的颜色值建立颜色值的边界范围;

步骤7.2,判断当前像素的颜色值是否在边界范围内,若不在进行clamp截。

本发明采用以上技术方案与现有技术相比,具有以下技术效果:

本发明提供一种基于帧间抖动的平滑渲染方法,通过累加多帧相邻像素的子像素颜色值提升了网格物体渲染过程中画面的平滑感,在保持画面效果的同时避免创建太多几何缓冲区极大降低了性能开销,可作为室内渲染领域渲染的可行优化方案。

附图说明

图1是本发明的方法流程图;

图2是多帧的多个子像素的位置示意图;

图3是从0-120帧像素值累加变化过程;

图4是相邻像素颜色值差别太大累加造成闪烁问题;

图5是像素颜色值的clamp截断过程。

具体实施方式

下面结合附图对本发明的技术方案做进一步的详细说明:

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

如图1所示,一种基于帧间抖动的平滑渲染方法,具体包含如下步骤:

步骤1,采用哈姆斯利hammersley低差异随机序列,此序列可以把任意顺序的整数映射为[0,1]的均匀随机的低差异序列,通过函数hammersley和倒根函数radicalinverse实现;

步骤2,根据步骤1生成的低差异序列,对投影矩阵projectmatrix进行偏移抖动,进而生成偏移抖动的投影矩阵,新的投影矩阵可以偏移摄像机渲染的一帧;

步骤3,多帧生成像素的多个子像素,每一帧摄像机根据新的抖动偏移渲染像素的子像素;

步骤4,采样子像素当前帧的像素值,从当前帧的渲染目标纹理中取得;

步骤5,累加多帧实现平滑算法,每一帧对应像素的一个子像素,采样每一帧后进行加权累加;

步骤6,色调映射处理闪烁,由于累加多帧时相邻子像素的颜色值差异太大会导致闪烁,需要做色调映射对颜色值的范围进行限制,降低闪烁;

步骤7,clamp截断处理模糊,在相机移动时,像素会累加上一帧的相同位置的像素导致模糊,需要进行截断处理,舍弃上一帧的像素值。

具体实施例如下:

1.生成低差异随机序列:

低差异序列是一种分布在[0,1]空间中的点集,任意选取空间中的子区域,此子区域内点的数量和点集个数总量的比值均匀分布;

本算法采用哈姆斯利hammersley低差异序列,此序列可以把任意顺序的整数映射为[0,1]的均匀随机的低差异序列,通过函数hammersley和倒根函数radicalinverse实现。

2.生成偏移抖动的投影矩阵:

根据步骤1生成的低差异序列,对投影矩阵projectmatrix进行偏移抖动,因为投影矩阵对观察坐标系的顶点变换归一化后为标准设备坐标系,对投影矩阵的抖动恰好使其对应于像素的子像素位置:

projectionmatrix.m[2][0]+=jitter.x;

projectionmatrix.m[2][1]+=jitter.y;

其中projectionmatrix.m[2][0]/.m[2][1]为矩阵第三行的前两个值,

jitter.x为x方向上的抖动,jitter.y为y方向上的抖动;

3.多帧生成像素的多个子像素:

要计算像素点上一帧在什么位置,可以用这一帧的归一设备坐标,乘上viewprojection观察投影矩阵的逆矩阵,再乘上一帧的viewprojection观察投影矩阵,变换到上一帧的裁剪空间里,要保存摄像机上一帧的viewprojection矩阵;

接下来看物体的移动,可以保存物体上一帧的位置,然后同一个局部坐标的点,分别乘这一帧和上一帧的world世界矩阵,再分别乘这一帧和上一帧的viewprojection矩阵,就得到裁剪空间里的位置,保存这一帧减上一帧作为这一帧的速度,这样就可以得到多帧的多个子像素的位置如图2所示。

4.采样子像素当前帧的像素值:

根据步骤3产生当前帧的子像素位置subpixeluv,计算出子像素的像素值pixelcolor:

pixelcolor=sum(lights,subpixeluv,normal);

sum为累加,lights为场景里的所有光照,normal为子像素的法线。

5.累加多帧实现平滑算法:

根据步骤4得到当前帧的子像素像素值pixelcolor,需要应用平滑算法将其累加到之前累计多帧的结果上:

pixelresult=alpha*pixelcolor+(1-alpha)*pixelresult

其中,pixelresult为累加多帧子像素像素值的结果,也就是最红显示在屏幕上的值,alpha是平滑系数,可以通过调节alpha值改善平滑算法的平滑速度和效果,从0-120帧像素值累加变化过程如图3所示。

6.色调映射处理闪烁:

在相邻像素的颜色值差别太大时,会出现闪烁问题;相邻像素颜色值差别太大累加造成闪烁问题如图4所示。

可以通过色调映射进行处理,色调映射是一种把像素颜色值范围从一个范围变换到另一个范围的映射方法,由于闪烁问题是因为少数像素颜色值过大,可以采取色调映射将整体像素值映射到一个较高的范围从而减少差异,具体实现方法:

将颜色的表示方式从rgb模式变换为ycocg模式,映射方法如下dot为向量点成

2>色调映射把颜色值做范围映射,公式如下

其中,color为像素颜色值,luma为像素的亮度,a为范围边界值;t(color)为范围正向映射,tinverse(color)为范围反向映射。

7.clamp截断处理模糊:

在相机或者物体移动过程中,由于当前像素累加了之前多帧的结果,会变得模糊,通过clamp截断可以把像素的颜色值强行变化为当前像素的颜色值,具体方法如下:

根据相邻多个像素的颜色值建立颜色值的边界范围边界最小值aabbmin,最大值aabbmax前一帧颜色值prevsample,前一帧累加平均值ave;

判断当前像素的颜色值是否在边界范围内,如果不在进行clamp截断。

ret为截断后的像素颜色值ret=prevsample-ave

rmax=aabbmax–ave;

rmin=aabbmin–ave;

如果ret大于rmax,ret=rmax;

如果ret小于rmin,ret=rmin;

像素颜色值的clamp截断过程如图5所示。

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

本技术领域技术人员可以理解的是,除非另外定义,这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。

以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。上面对本发明的实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下做出各种变化。

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