0%

【Games 101】Lec 06:光栅化2(抗锯齿 和 深度缓冲)

Lecture 06 : Rasterization 2 (Antialiasing and Z-Buffering)

光栅化:深度测试抗锯齿(反走样)

问题描述

会有锯齿状…

Aliasing:走样

采样会有一些问题/瑕疵(Artifacts):

  • 锯齿

  • 摩尔纹

  • 车轮效应

本质原因:

信号函数变换的速度太快了,导致采样的速度跟不上信号变换的速度。

解决方法

方法:

反走样(抗锯齿):

  • 先对信号进行模糊;
  • 再采样;

注意:这两个步骤的顺序不能反着来!!!

思考问题:

那么问题来了:

  • 为什么这么做可以反走样呢?

  • 为什么不能反着来呢?

具体分析:

首先总结一下走样原因

采样的频率跟不上信号变化的频率;

从而导致,同样一个采样频率,采样两个信号函数,会导致相同的采样结果;

从而出现 “走样”。

走样原因分析:

首先解释为什么信号变换很快的时候,采样速度跟不上会导致走样的情况?

看上面这幅图,当信号变换越来越快的时候,说明信号函数的频率很快也就是比较密,图中虚线表示采样时刻,那么我们可以发现,当变换越来越快的时候,采样出来的点组成的函数越无法表现真实的函数!

接着我们看下面这张图:

可以发现,对于相同的采样方式,对蓝色的函数和黑色的函数进行采样,得到的是相同的结果!

因此这就是走样

傅里叶变换的作用:

滤波:过滤掉一些特定的频率

傅里叶变换可以把一个函数从时域变成频域

也就是说:傅里叶变换能够让我们看到任何信号在各个频率下长什么样。(频谱)

上面这张图是原始图像

(左边是时域下的,右边是频域下的,表示的是同一张图哦!

在频域的表示形式下,我们用亮度来表示信息的图像多少(在这个频率亮度越亮,表示这个频率的信息越多)

其实我们可以发现,很多图像的信息都集中在低频处。

接着,我们看下面这几个例子:

  • 当图像通过高通滤波后变成下面这样:

边界的地方是高频的(因为突然发生了变化),通过高通滤波(只让高频的通过),就保留了边界

  • 低通滤波

模糊了边界

  • 某一段特定频率

滤波

滤波 = 卷积(= 平均)

首先理解一下卷积

图像处理中的卷积我们可以简单理解为下面的情况:

首先我们有一个滤波模板(滤波器),模板里面有对应的值(概率);
然后对于每个像素值,我们都通过这个模板去计算一下,生成的值填到中心位置上。(和 数学上的卷积有所不同)

定理:

时域的卷积 = 频域的乘积

时域的乘积 = 频域的卷积

看一个例子解释

上面这张图,通过时域范围内的卷积可以得到一张模糊的图像;等价于,我们首先将原图像和卷积模板(滤波器)通过傅里叶变换从时域转换为频域,然后将这两图像相乘,最后通过傅里叶逆变换把结果从频域转换为时域;

逻辑分析:可以看到,通过滤波器的乘积过后,原图像只保留的低频信息,也就是高频(边界)被丢弃了,导致了模糊。

同时我们也可以知道,当(滤波器)越大,一个像素将受到越多其他像素的影响,导致图像越模糊,高频信息越加被丢失!

从频谱角度理解 采样:

首先,采样就是在重复原始信号的频谱

采样越少,对于这频谱就越密,就可能发生混叠现象,也就是走样

反走样

怎么做?

  1. 先做模糊(把高频信息去除,就叫做模糊)
  2. 再采样

为什么?

看下面这张图就知道了!

把高频的去除后发现不会混叠了!

如何做?

那么怎么把图像模糊呢???

很简单啊,前面不是分析嘛,用一个 低通滤波器原图像 做个卷积就行了!!!

但是但是,这一步很难…

所以我们搞了一个近似的做法:MSAA

就是说,对于每个像素,我们把它分成更小的像素点,通过更多样本来近似了模糊的过程;看下面的例子(它把每个像素点分成了2x2的小像素,然后计算概率):

然后采样就行!

总结:MSAA 不是通过提高采样率,而是通过模糊操作来 实现反走样;

思考

缺点:

  • 这么规则的分割像素,极大增加了计算量(实际生活中我们用的不是那么规则的分割,可以说是一种优化)

扩展,除了MSAA,还有其他的抗锯齿的做法:

欢迎关注我的其它发布渠道