APP下载

基于时间与空间滤波的实时路径追踪去噪算法研究

2020-04-22贺卫东

现代计算机 2020年8期
关键词:方差滤波亮度

贺卫东

(四川大学计算机学院,成都610065)

0 引言

随着近年来图形渲染技术的发展及显卡硬件性能的提升,游戏、动画、电影等领域对渲染画面的真实感有了更高的追求。在动画、电影等领域,基于蒙特卡洛的路径追踪算法[1]被广泛应用于生成具有高真实感的渲染图像。然而,在游戏、VR 等实时渲染领域,渲染算法的效率是否满足实时性的要求是首要考虑的因素。为了得到具有高质量的渲染图像,基于蒙特卡洛的路径追踪算法需要为每个像素生成大量的样本,从而导致该算法的效率低下,无法满足实时性的要求。如果为每个像素生成较少的样本,则会导致生成的图像中存在大量的噪点。因此,在实时渲染领域,路径追踪算法很少被应用。

目前实时渲染领域中已经存在大量的全局光照算法,例如基于预计算的光照贴图与体积光照贴图[2]算法、即时辐射度算法[3]、基于体素的全局光照算法[4]等。然而这些算法都存在各种限制,例如无法实现光泽反射或者镜面反射、不支持动态场景等。相比较而言,路径追踪算法并不存在上述的限制,该算法能够在统一的框架下在实现多种渲染效果,如软阴影、光泽反射。因此,如何让路径追踪算法达到实时渲染的效率要求,从而使得该算法能够被应用在实时渲染领域是一个问题。通过减少路径追踪算法中每个像素所需要的样本是解决该问题的一个方向。然而,过少的样本将会导致图像中存在过多的噪点,因此在减少样本数的同时如何去除渲染图像中的噪声并保证图像的质量成为了一个重要的问题。

目前,国内外对路径追踪算法的去噪问题已经存在了一定的研究成果。基于路径采样的优化方法,如重要性采样[5]、双向路径追踪[6]、Metropolis 采样[7]等,能够选取对最终像素颜色具有更高贡献率的路径。然而,这些方法依然需要数百乃至上千的样本才能够达到较好的渲染效果,无法满足实时渲染的要求。适应性重建方法[8]能够在每个像素只含有较少样本(4~16个样本)时得到具有较高质量的渲染图像。然而,该类方法除了会引入少量的偏差外,也依然无法满足实时性的要求。在当前显卡的性能限制下,每个像素只生成一个样本才能够满足实时渲染的要求。本文研究了一种基于时间与空间滤波的路径追踪去噪算法。该算法能够在每个像素含有一个样本的情况下对渲染图像中的噪声进行过滤,并重建出具有较高质量的渲染图像。

1 算法

本文所实现的路径追踪算法需要借助能够支持DirectX Raytracing 功能[9]的NVIDIA 显卡。在当前的情况下,显卡的光线追踪性能为200×300 Mrays/sec[10]。在1920×1080 分辨率的情况下,为了满足每秒30 帧的实时要求,每个像素在每帧中只能够发射少数的几根光线。因此,为了满足实时性的要求,本文对离线渲染中所使用的路径追踪算法进行了一定的修改与限制,并结合了硬件的光栅化功能来加速渲染算法的效率。本节先简要描述在显卡(Graphics Processing Unit,GPU)中实现的路径追踪算法,然后再对时间与空间滤波进行详细地描述。

1.1 路径追踪渲染算法

本文所使用的路径追踪算法在每帧中只为每个像素中采样一个样本。由于采用随机生成的方式生成的采样路径能够击中光源的概率较小,为了采样得到对像素具有更高贡献值的路径,本文采用了下一次事件估计策略(next event estimation),在路径的每个顶点上直接采样光源来进行直接光照的方式来增加采样对像素具有更高贡献率的路径。另外,由于显卡性能的限制,本文渲染算法只进行一次光线反弹,并借助显卡硬件的光栅化功能来生成主光线。渲染算法的大致流程如下:

(1)通过光栅化生成几何缓存(G-Buffer)[11]来保存场景的世界坐标、法线以及深度以及材质信息。

(2)从几何缓存中获取世界坐标作为光线的起始点,从场景中的光源随机选择一个光源(或者基于重要性采样方法)发射阴影光线,计算光源入射到该点的亮度,并存储于DirectIllumination 缓存中,然后计算该点的BRDF 值并存储于DirectAlbedo 缓存中。

(3)根据该起始点的BRDF 信息进行重要性采样来生成光线反弹方向。在发射光线得到与场景的相交点后,使用相同的方法计算该点的直接光照亮度,并存储到IndirectIllumination 缓存中。同样的,将起始点的间接光BRDF 值存储到IndirectAlbedo 缓存中。

(4)使用时间与空间滤波来对DirectIllumination 缓存和IndirectIllumination 缓存进行过滤,并得到过滤后的光照缓存。

(5)将过滤后的光照缓存与DirectAlbedo 缓存以及IndirectAlbedo 缓存结合生成最终的结果。

(6)对最终的结果使用色调映射算法来得到一个低动态范围的结果。

(7)使用时间反走样算法[12]来增强结果的时间稳定性以及对物体几何边缘进行过滤。

如上所述,在渲染算法中,为了满足实时性的要求,每个像素总共只发射了三条光线。一条光线用于反弹间接光,另外两条阴影光线用于判断光源的可见性。另外,为了能够更好地重构出直接光导致的阴影,算法将直接光与间接光分开进行重建,避免间接光对直接光中阴影的重建产生影响。其次,为了避免重建算法对双向分布反射函数(BRDF)产生的细节造成模糊,本文渲染算法将BRDF 从辐射亮度中分离,然后对只对分离得到的光照亮度(DirectIllumination 以及IndirectIllumination)进行过滤重建,最后再与BRDF 合成的方式来避免对细节的模糊。

1.2 时间与空间滤波

为了降低路径追踪算法中由于每个像素只有一个样本所引起的噪声,本文算法采用了一种基于时间与空间的滤波来进行过滤重构。在适应性重建技术领域,目前已经存在了较多的算法能够在数百个、乃至数十个样本的情况下重建出较好的全局光照效果。然而,这些算法都只适用于离线渲染领域,对于实时渲染领域而言,这些算法所要求的样本数目在性能的限制下都无法被满足。在前者研究的基础上,本文的时间与空间重构滤波实现了在一个样本的情况下能够重构出具有较高渲染质量图像的能力。本文的重构滤波算法大致分为以下三个步骤:

(1)通过时间滤波在时间上累积路径追踪算法所得到的的样本信息并存储到历史缓存中

(2)使用时间滤波累积得到的样本颜色信息来估计像素中样本的局部亮度方差

(3)通过估计的局部亮度方差以及几何信息指导edge-stopping À-Trous wavelet transform 滤波[13]进行空间过滤

如上所述,本文滤波算法使用了时间滤波来在在每一帧中累积样本信息。该时间滤波的基本思想是通过将属于同一个像素并分布在不同帧的样本信息在当前帧进行融合累积。为了达到该目的,算法通过存储上一帧的模型矩阵、观察矩阵以及投影矩阵来将当前帧几何缓存中的世界坐标重投影到上一帧累积的结果中,并进行历史信息有效性的判断。上一帧的累积结果与当前帧样本的累积方式如公式(1)所示,Si为当前帧累积的信息,Si-1为上一帧累积的信息,即历史累积信息,α 为累积系数(取值为0.05~0.1 左右),Ci为当前帧的样本信息。

对于时间滤波而言,历史有效性的判断是一个重要的问题。由于前后两帧中相机可能在运动、或者场景中的物体在运动,从而可能导致当前帧的像素在上一帧中由于被遮挡而在当前帧不可见,最终使得该像素无法获得历史累积信息。

图1 重投影操作

如图1 所示,在当前第N 帧中,第(x,y)个像素中某个样本所发射的光线与场景中红色的点相交,将该相交点重投影到前一帧(即第N-1 帧),在历史缓存中能够得到绿色的颜色信息。然而,从图中可以看出,该历史信息属于不合法的历史信息。因为实际上在前一帧中,该红色的点对于相机而言不可见,因此无法从历史缓存中获得。因此,为了避免混合错误的历史信息。历史信息的有效性判断是一个重要的问题。本文算法采用了基于几何属性(深度)的方式来进行判断历史信息的有效性,如公式(2)所示。

当历史信息无效时,本文算法直接设置累积系数α为0,即直接使用当前帧的样本。

在通过时间滤波来进行样本累积的同时,滤波算法也需要估计被累积的样本的颜色亮度方差。通过对被累积的样本颜色亮度进行方差估计,算法可以推测出该像素中的噪声大小,并以此依据来指导空间重构滤波。在估计方差时,算法通过公式来累积像素中样本颜色亮度的第一阶原点矩μ1i与第二阶原点矩μ2i,然后通过公式来计算方差σ2i,如公式(3)所示。当历史累积结果失效或者其他原因导致累积的样本数目较少时(少于4 个样本),由于无法通过累积的样本信息来估计方差,本文算法采用在空间上估计方差的方式作为一种替代策略。通过在一个7×7 大小的像素窗口上使用联合双边滤波来估计像素的方差,并使用邻域像素的法线以及深度来作为权重。

在估计完累积的样本颜色亮度方差后,算法使用了一种称为edge-stopping À-Trous wavelet transform 滤波[13]的空间滤波来对累积的光照缓存进行空间过滤。该空间滤波是一种层次性的滤波,通过多次迭代,该滤波能够以较小的性能消耗达到过滤一个较大的像素窗口的目的。另外,为了避免对几何边缘以及其他的细节的模糊,该空间滤波使用基于几何属性的权重计算函数来保存几何边缘和其他一些细节。

本文算法所使用的空间滤波可以视为一种多次迭代的双边联合滤波。每次迭代的滤波公式如公式(4)所示,p 与q 为像素的坐标,Ω 为滤波的像素窗口范围,本文所使用的像素窗口大小为5×5 个像素大小,ci+1(p) 为重建后的结果,ci(q) 为滤波的输入,是滤波的过滤核,w(p,q)是滤波的权重。

为了保持几何物体的边缘以及其他细节不被模糊,滤波的权重w(p,q)与像素的深度、法线以及颜色亮度有关。如公式(5)所示,其中wi(p,q)为像素点p 与q之间的过滤权重,wz为基于像素深度的权重,wn为基于法线的权重,wl为基于颜色亮度和亮度方差的权重。

公式(6)描述了基于深度的权重wz的计算方法,其中∇z(p)是像素点p 的深度微分,z(p)与z(q)分别是像素点p 与q 上的深度,其中δz可以根据场景的不同选取不同的值,大部分情况下的取值为1。公式(7)描述了基于法线的权重wn的计算方法,其中n(p)与n(q)是像素点p 与q 处的法线,且δn的经验取值为128。公式(8)描述基于颜色亮度的权重wl的计算方法,li(p)和li(q) 是像素点p 与q 处累积的样本颜色的亮度,var(li(p))为像素点p 处所估计得到的样本颜色亮度方差,g3×3是窗口大小为3×3 的高斯滤波。

2 实验结果

本实验设备的配置CPU 为Intel Core i5-7400 3.00 GHz,显卡为NVIDIA GeForce RTX 2060,并以Visual Studio 2017 为开发平台,通过使用DirectX 12 图形API 开发完成。

图2 法线图

图3 世界坐标图

图2 与图3 为渲染得到的几何缓存纹理,分布包含了法线以及世界坐标信息。图4 与图5 分别为每帧的DirectIllumination 缓存与IndirectIllumination 缓存。在没有使用时间与空间滤波的情况下,在每帧中每个像素使用一个样本的情况下得到的具有大量噪声的渲染图像如图6 所示。图7 为在相同的渲染设置下使用时间与空间滤波重构后得到的渲染图像。从图6 与图7 两幅图像的对比中可以看出,本文的渲染算法能够对只含有一个样本的渲染结果进行高质量的降噪与重建。同时,本文所使用的渲染算法与滤波能够达到40fps 的渲染效率,能够很好地满足实时性的要求。

图4 Direct Illumination缓存

图5 Indirect Illumination缓存

图6 一个样本的噪点图

图7 过滤重建后的图像

3 结语

本文给出了简要概述了在显卡中实现路径追踪算法的基本框架,并提供了一种基于时间与空间的滤波方法。该滤波能够在每个像素含有一个样本点的情况下,对渲染得到的具有大量噪声的图像进行有效地去噪与重建处理,从而得到具有高质量的渲染图像。通过本文所提供的算法,实时路径追踪算法逐渐成为可能。

虽然本文所提供的算法能够使得实时路径追踪算法成为可能,然而相比较于离线渲染算法而言,本文算法依然存在一些限制。例如,基于实时性的要求,本文算法限制了路径的最大长度,从而使得渲染结果相比较于离线渲染而言具有一定的差异。另外,对于某些样本方差较高的像素而言,例如像素中只有较少的样本才对最终的像素颜色有贡献,本文算法可能会无法完美地重构最终生成高质量的结果,并会产生少量帧间变化的噪声。在后续的研究中,我们希望能够对这些问题进行进一步的研究并能够较好地解决它们。

猜你喜欢

方差滤波亮度
用于遥感影像亮度均衡的亮度补偿方法
基于HP滤波与ARIMA-GARCH模型的柱塞泵泄漏量预测
基于改进自适应中值滤波的图像降噪方法*
远不止DCI色域,轻量级机身中更蕴含强悍的亮度表现 光峰(Appptronics)C800
本本亮度巧调节,工作护眼两不误
方差生活秀
亮度一样吗?
基于非下采样剪切波变换与引导滤波结合的遥感图像增强
揭秘平均数和方差的变化规律
方差越小越好?