【GAMES101现代计算机图形学入门笔记】Lec06 光栅化(反走样)

Lec06 光栅化(反走样)

反走样(Antialiasing)

上节课我们提到了锯齿的概念,这节课我们就来解决这个问题。

首先,给出一个简单的反走样方案:

先模糊,再采样,对位于三角形边界的像素设置中间值的颜色。

上图中提到:把采样频率提升到奈奎斯特频率(Nyquist)以上。这是什么意思呢?要理解这句话以及反走样背后的原理,我们就要先从信号处理理论说起……

采样理论

采样既可以在空间中采样,也可以在时间中采样(30fps)。

Sampling Artifacts:瑕疵(如锯齿、摩尔纹、车轮效应)—— 信号变化的速度太快,导致采样的速度跟不上。

频域(Frequency Domain)

傅里叶级数展开:任何一个周期函数,都能写成一系列正弦和余弦函数以及常数项的线性组合。

傅里叶变换:把一个函数变为不同频率函数的线性组合(把信号变为频率,把时域变为频域),得到频域图(频谱图)。频域图显示了在一个频率范围内每个给定频段(即某一特定频率)内的信号量。

对于高频率的函数,如果还使用低频率的采样,就会产生走样(即,在某一采样频率下无法区分两个频率不同的函数,高频率函数采样得到低频率函数):

滤波(Filtering)

对图像进行傅里叶变换(从时域到频域,得到右侧的频谱图):

越往中心,代表的频率越低;亮度越高,代表有着该位置频率的信息越多。图像中的“频率”可以理解为信息变化的剧烈程度(频谱图上有两条线是因为将图片复制为周期函数时,边界的连接处会发生剧烈的信号变化。可暂时将其忽略)。

滤波就是去掉一些特定的频段。

  • 高通滤波(high-pass filter):去掉低频信息。能够得到图像的边界(左右/上下有突变)。
  • 低通滤波(low-pass filter):去掉高频信息。能够得到模糊的图像。

从另一个角度看,滤波 = 卷积(Convolution)= 滑动平均。卷积就是通过两个函数f和g生成第三个函数的一种数学算子:

定理:时域上的卷积等于频域上的乘积。频域上的卷积等于时域上的乘积。

对一张图像作卷积,可以把图像的频域和滤波器(在这里是box filter,相当于低通滤波器)的频域相乘,再作逆傅里叶变换变回时域图。

值得注意的是,卷积核(box大小)越大,其频率越低(作用到图像上越模糊)。这很好理解,如果你的box小到比一个像素还小,那不就相当于没做模糊处理嘛。

采样 = 频域内容的重复

由于暂时对于冲激函数不太了解,所以下面的内容我也并没有理解透彻(尤其是下面一张图)。

a、c、e分别是原函数、冲激函数(表示信号采样)和两函数的乘积,b、d、f分别是傅里叶变换后,原函数频域、冲激函数频域和两频域的卷积。可以看到,采样过后,原函数的频域图变成了周期重复的频域图。

所谓走样,其实就是采样频率不够,冲激函数的频谱图过于密集,导致采样后的函数进行周期性复制的时候发生了重叠,高频信息出现错误。

反走样方法

当然,我们可以通过提高分辨率、增加帧缓冲等方法来提高采样率。但这有很高的硬件要求,并不是一个聪明的解决方案。

在文章一开始,我们提出了一个低通滤波器反走样方法。这是可行的。其原理便是去掉高频信息,从而避免频域图上内容的重叠。

我们只需要对每个像素求一个平均颜色(通过卷积)。

不过,这个办法说起来简单,做起来可不容易。于是,人们研究出了近似的反走样方法MSAA。

MSAA(Multi-Sampling AntiAliasing)

多重采样抗锯齿,虽然并不能严格意义上解决走样,但效果还是不错的。它通过在一个像素内设置多个采样点来实现每个像素的颜色平均(很显然并不能计算出真正的平均值)。

例如,上图三角形经过的上方像素中,其内部有三个点在三角形内、一个点在三角形外,所以其平均下来的颜色就是75%红色。

注意:MSAA并没有真正提高分辨率!它只不过是在像素内部增加采样点,计算出每个像素的平均值,而屏幕上负责显示的像素还是原始的数量!!

MSAA能实现不错的反走样效果,但是其代价就是计算量的翻倍。不过,实际工业上应用时,增加的采样点并不是规则分布在每个像素内的,而是会按照特定的图案;同时某些采样点还可能被多个像素复用。这样,计算效率便会有所提升。

下面再简要介绍两种在工业界得到广泛应用的反走样方法。

FXAA(Fast AA)

快速近似抗锯齿本质上是一种图像后期处理。先得到有锯齿的图像,然后通过图像匹配找到有锯齿的边界,再将其替换为没有锯齿的边界。

TAA(Tem’poral AA)

时间性抗锯齿是最近兴起的方法。相当于把MSAA的采样点分布到时间上。

DLSS(Deep Learning Super Sampling)

深度学习超采样其实不是反走样,只不过概念比较相似。

举个例子:当你放大一张低分辨率的图时,你希望它能呈现出高分辨率的样子。这时候,通过深度学习,让机器来判断在某个像素应该显示什么颜色,从而达到清晰的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值