天天动画片 > 八卦谈 > 渲染中常用抗锯齿方法总结

渲染中常用抗锯齿方法总结

八卦谈 佚名 2024-01-18 10:33:14

空间抗锯齿

空间抗锯齿是一种在以较低分辨率表示高分辨率图像时最小化称为混叠的失真伪影的技术。

SSAA(Super Sample Anti-Aliasing)超级采样抗锯齿

4X SSMA:使用4倍的屏幕分辨率大小的后台缓冲区和深度缓冲区,当数据要从后台缓冲区调往屏幕显示时,会将后台缓冲区按照4个子像素一组进行平均值计算作为屏幕像素的颜色值。(需要计算4倍屏幕分辨率的像素颜色,极其耗时)

MSAA(Multi-Sample Anti-Aliasing)多重采样抗锯齿

4X MSAA:使用4倍的屏幕分辨率大小的后台缓冲区和深度缓冲区,但只需要计算1倍屏幕分辨率的像素颜色,然后降采样将每个像素分成4个子像素,根据子像素的覆盖性确定子像素的颜色,当数据要从后台缓冲区调往屏幕显示时,会将后台缓冲区按照4个像素一组进行平均值计算作为屏幕像素的颜色值。(只需要计算1倍屏幕分辨率的像素颜色)。


后处理抗锯齿

FXAA(Fast Approximate Anti-Aliasing)快速近似抗锯齿

1.      输入数据是渲染图像和可选的亮度数据。

2.      获取亮度数据。该数据可以从渲染步骤作为 alpha 通道从渲染步骤传递到 FXAA 算法中,作为嵌入到图像中的 alpha 通道进行抗锯齿处理,从渲染的图像中计算,或者通过使用绿色通道作为亮度数据进行近似。

3.      通过使用亮度数据的高通滤波器查找高对比度像素。发现的低对比度像素不会被 FXAA 进一步更改。可以调整排除低对比度像素的高通滤波器以平衡速度和灵敏度。

4.      使用相邻像素之间的对比度来启发式查找边缘,并确定边缘是在水平方向还是垂直方向。像素的混合方向将垂直于该像素上检测到的边缘方向。

5.      通过分析 3x3 像素网格中的亮度数据,以相关像素为中心像素,计算高对比度像素的一个混合因子。

6.      沿着检测到的边缘搜索以确定该边缘持续多长时间以及当检测到的水平或垂直边缘结束时实际边缘走向的方向,以便考虑实际边缘的方向,以便计算第二个混合因子。可以通过增加搜索分辨率和搜索在搜索边缘结束之前进行多远来调整此步骤以获得更高质量,或者通过减少两者来提高速度。

7.      使用选定的混合方向和计算出的两个混合因子的最大值来混合像素。

MLAA(Morphological Anti-Aliasing)形态学抗锯齿

MLAA 使用后期处理过滤器,分析场景物体的几何结构,进行边缘检测和重建(识别出 U形、Z形、L形 的边缘),然后将边缘像素颜色于背景色进行混合,达到消除锯齿的效果。

时间抗锯齿

时间抗锯齿是一种用于计算机生成视频的空间抗锯齿技术,它结合来自过去帧和当前帧的信息以去除当前帧中的锯齿。

TAA(Temporal Anti-Aliasing)时间抗锯齿

在 TAA 中,每个像素每帧采样一次,但在每一帧中,样本位于像素内的不同位置。在过去帧中采样的像素与在当前帧中采样的像素混合以产生抗锯齿图像。

(1)     TAA算法设计:

时间抗锯齿的核心思想就是将运算量分摊至多帧,任意一帧只计算一个像素点,随着t帧的累积,就有t个采样像素,再混合结果,就相当于做了t个子像素的超采样。当然,每帧中像素需要做一定的抖动(Jitter),不然不同帧相同位置的像素值就完全一样,也就没有了分摊多帧的意义。通过对像素分摊至多帧的超采样,来提高采样效率,达到缓解锯齿的目的。

大致的设计流程图如下:

1、抖动样本:人为对相机的投影矩阵添加抖动信息,让同一像素在不同帧上计算得到不同的颜色值,然后我们通过混合不同帧上同一位置像素的颜色。示意图如下图:

样本的分布模式是我们可以自定义的,目前广泛使用的是均匀分布,有如下图5示例:分层分布和低差异序列。低差异序列还有包含许多其他的序列,Halton目前用的较多。

分层分布(左)和Halton (2,3)序列(右)

 这里简单介绍一下Halton序列。在统计学中,Halton 序列是用于为数值方法(如蒙特卡罗模拟)生成空间点的序列。Halton序列是由某质数a定义的(0, 1)之间的一组数。这些数是按照如下规则确定的:

2、帧间数据重投影:利用运动向量获取上一帧同一像素的位置坐标,从而在上一帧中采样与当前帧同一像素的颜色。运动向量其实就是前一帧的像素位置与当前帧同一像素的位置差。

在《GPU Gems3》中介绍了一种运动向量的计算方法:利用深度纹理和当前帧的视角*投影矩阵的逆矩阵来求得该像素在世界空间下的坐标。然后将前一帧的视角*投影矩阵*该坐标就可得到前一帧NDC坐标化后顶点的位置,最后将NDC坐标变换到屏幕空间坐标即为该像素在前一帧的屏幕位置。最终两坐标差即为运动向量。

3、色调映射:在大多数渲染引擎中,后处理效果一般是在线性 HDR色彩空间中实现的。为了防止高能量颜色样本被高光或镜头光晕等效果夸大,我们需要首先需要在线性 HDR 空间中获取输入帧样本。另一方面,由于色调映射通常是非线性的,因此最好在色调映射后的空间中应用诸如抗锯齿之类的滤波操作,以在图像上产生正确的边缘梯度。解决此冲突的一种变通方法是在应用 TAA 之前对样本进行色调映射,并将输出的色调映射反转回线性 HDR 空间以提供给后处理链的其余部分。

        本质上来讲,色调映射是要解决的问题是进行大幅度的对比度衰减将场景亮度变换到可以显示的范围,同时要保持图像细节与颜色等对于表现原始场景非常重要的信息。同时一定程度上可以改善高光噪声闪烁的问题,如下图所示:

4、历史验证:实际上,从前一帧重新投影的历史像素数据不应该未经检查就随意使用。它们可能由于场景遮挡变化而无效,或者由于照明和阴影变化而陈旧。未能正确处理此类情况可能会导致强烈的时间伪影,例如重影,如下图所示。

为了缓解这个问题,可以检测历史帧像素与当前帧像素的差异,若差异过大,将差值拉回当前帧像素范围内。可以选择邻近的5个像素或者9个像素算出最小值和最大值,构成像素的AABB包围盒。将重投影得到的历史像素值截断Clamp或是裁剪Clip到AABB中,如下图所示。

同时有实验表明,上述截断/裁剪的颜色,在YCoCg颜色空间进行会有更好的表现效果,如下图所示。

在上面两图的上图中我们可以明显的看到红色边缘的时间伪影,而下图则表现的比较正常。


本文标题:渲染中常用抗锯齿方法总结 - 八卦谈
本文地址:www.ttdhp.com/article/46110.html

天天动画片声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
扫码关注我们