写在前面:

本文章为个人学习笔记,方便以后自己复习,也希望能帮助到他人。

由于本人水平有限难免出现错误,还请评论区指出,多多指教。

部分图元和素材来源于网络,如有侵权请联系本人删除。

参考资料与链接会在文章末尾贴出。

=======================================================================

1.什么是走样(Aliasing)

简单粗暴地理解什么光栅化,即我们把一幅图像打散成一个个像素点呈现在屏幕上。比如我们想要渲染一个三角形,最终要如何将该图像呈现在屏幕上呢?我们计算该三角形覆盖了哪些像素点,并着色后便在屏幕上呈现了图像,但是这里会有个问题,就是我们想要渲染的图像和最终呈现的图像好像有所差别,如图:

 

很明显最终图像的边界并不平滑,出现了锯齿状的边界,这种现象又称之为“走样”。上图较大的像素格只是为了将走样问题更清晰地呈现,但即便换成更密集的像素格走样问题也依旧存在。实际上,走样问题是广泛存在的。

锯齿:

摩尔纹:

 

那么走样问题到底是什么造成的呢?用信号与系统的知识可以很好解释这一现象。

上图有五个函数,我们看成五段频率不同的信号,我们要做一个操作,对信号采样(这里是同样的采样频率)然后再大致还原出原信号(或原函数)。我们观察上图发现我们现在的采样频率对f1和f2这两个低频信号还是做出比较合理的还原,但是对于其余三段信号,还原的信号与原信号差别很大。总结就是高频信号需要高频采样。

在现实生活中,相信我们都遇到过汽车高速行驶,车轮却像在倒着转的情况,这就是我们人眼的采样频率跟不上车轮转动的频率导致的。

我们回到图像渲染中来,我们的场景相当于定义在三维空间中的连续函数,而最终显示的像素是二维的离散数组,因此以多大的采样频率(屏幕分辨率)去采样都不可能完美恢复原信号。

2.反走样

既然不可能完美恢复原信号,那我们有没有办法减轻走样问题呢?于是大神们就研究出了各种反走样(抗锯齿)技术,比如SSAA、MSAA、CSAA、DEAAA、MLAA、SRAA、FXAA、SMAA等。

反走样的方法一般可以分为

  • 空间反走样技术
  • 时域反走样技术

    空间反走样技术是指:仅依据当前帧的信息,对锯齿或走样现象进行缓解减少。

时域抗锯齿技术是指:不仅根据当前帧的信息,还使用了历史帧的信息,从而实现锯齿现象的减弱。

这里只简单介绍具有代表性的几种方法

2.1 SSAA(SuperSampling Anti-Aliasing)

SSAA的做法非常简单粗暴,我们回顾上面的结论提到“采样频率不足”,既然如此,我们就在原本的像素点内继续细分出更多的采样点,每个采样点单独计算结果后再求均值。

比如 4X SSAA,

假设最终屏幕输出的分辨率是800×600, 4xSSAA就会先渲染到一个分辨率1600×1200的buffer上,然后再直接把这个放大4倍的buffer下采样致800×600。

这种做法在数学上是最完美的抗锯齿(同时是几何反走样和着色反走样方法),因为它不但增加了当前几何覆盖函数(Coverage)的采样率,也对渲染方程进行了更高频率的采样(单独计算每个子像素的颜色)。

但是缺点也很明显,光栅化和着色的计算负荷都比原来多了4倍,RenderTarget的大小也涨了4倍,这导致其性能太差。

2.2 MSAA(Muti-Sampling Anti-Aliasing)

MSAA跟SSAA非常相似,不同的是它细分采样点后并不会每个点单独计算,而是只计算一次(比如中心采样点)。另外还要计算图像(如三角形)在此像素上的覆盖率,最终结果就是之前的结果乘上覆盖率。

2.3 FSAA(Fast Approximate Anti-Aliasing)

FXAA全称为快速近似抗锯齿,是在屏幕空间上进行抗锯齿的技术。它是一种图像后处理技术,仅需单个图像作为输入(此时图像已经出现锯齿),在一个单独的后处理Pass中就可以完成。

FXAA主要思路是认为每个锯齿都是由连续的水平或竖直的锯齿边缘组成的,可以通过着色片段在锯齿边缘中的位置,近似求出其落在原始边界内的比例。

2.4 TAA(Temporal Anti-Aliasing)

前面我们提到过过,MSAA 是通过添加次像素点,来实现抗锯齿效果,需要消耗额外的内存。

TAA的原理和 SSAA 大致相同,都是每个像素点有多个采样点。但是不同与 SSAA 的方式,TAA (Temporal Anti-Aliasing) 综合历史帧的数据来实现抗锯齿,这样会将每个像素点的多次采样均摊到多个帧中,相对的开销要小得多。但在某些场景中(如高速运动),TAA很容易出现一些闪烁,模糊甚至鬼影问题。

 

 

参考资料:

1.现代计算机图形学入门–闫令琪

2.

3.

原文地址:http://www.cnblogs.com/pisconoob/p/16846948.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性