Lecture 06 Rasterization(Antialiasing and Z-Buffering)
1. 图形学中的采样
1.1 问题
- 上节课已经说到,当进行观测变换(viewing transformation)之后,我们通过光栅化将三维对象显示到屏幕上,也即通过采样技术在屏幕上为相应的像素“涂上颜色”。
但是实际我们想要的形状是
如此可见,采样出来的结果与我们想要的结果差别很大,主要在边界区域不是光滑的边缘,而我们想要减轻这种“锯齿”(走样)的影响,所以我们要做的就是抗锯齿,也叫做反走样。下图就是一个走样很严重的图像的例子
1.2 Sampling Artifacts
1.2.1 Jaggies(Staircase Pattern)锯齿
- 采样出现的一种问题,也即上边那个类似于太阳图边缘出现的锯齿问题
1.2.2 Moiré Patterns in Imaging(摩尔纹)
- 产生原因:例如下左图,对其删除像素的奇数行和奇数列,虽然图像尺寸会缩小,但是还将其缩放至原来大小,就会出现下右图的情况,即出现摩尔纹的现象(讲课大神身后窗帘就有摩尔纹,hhh)。
1.2.3 Wagon Wheel Illusion (False Motion)
- 在平常生活中,看汽车轮子转的时候会产生轮子倒转的错觉
- 产生原因:人眼的采样速度低于运动的速度的时候就会出现这种情况。
1.2.4 总结
- 产生走样的原因:信号变化太快(高频)但是采样太慢的时候就会出现走样。
2. 通过模糊(blurring)进行反走样
2.1 效果展示
- 在采样之前对要采样的对象进行模糊处理之后在对模糊的结果进行采样,以此来降低锯齿的影响
可以看出,采样的结果中像素的颜色不在是只有红和白两种颜色,在边缘区域会有红色向白色过渡的淡红色,可以看作颜色插值的结果。通过这种先模糊后采样的方法可以很好地降低抗锯齿的影响,效果如下图所示
2.2 走样原理分析
2.2.1 频域(Frequency Domin)
2.2.1.1 正弦和余弦
- 正弦波和余弦波图像可如下所示
对于余弦波 cos 2 π f x \cos 2\pi fx cos2πfx来说,通过定义 x x x之前的系数 f f f我们可以调整余弦波的频率,或者说周期(T),其中频率为 1 T \frac{1}{T} T1
2.2.1.2 傅里叶级数展开
- 一个函数可以通过三角函数的展开来收敛表示,比如对于这么一个方波函数来说,我们可以通过一系列的三角函数运算进行展开,最后函数收敛到方波函数
展开函数变化为(按图像从上到下,公式每一项的颜色变化),可以看出通过一系列三角函数的线性组合来近似方波函数,因此可以通过傅里叶级数展开来表达一个函数。
f ( x ) = A 2 + 2 A cos ( t ω ) π − 2 A cos ( 3 t ω ) 3 π + 2 A cos ( 5 t ω ) 5 π − 2 A cos ( 7 t ω ) 7 π + ⋯ (1) f(x)=\frac{A}{2}+\frac{2 A \cos (t \omega)}{\pi}{\color{Orange} -\frac{2 A \cos (3 t \omega)}{3 \pi}} {\color{Red} +\frac{2 A \cos (5 t \omega)}{5 \pi}} {\color{Violet} -\frac{2 A \cos (7 t \omega)}{7 \pi}} +\cdots \tag{1} f(x)=2A+π2Acos(tω)−3π2Acos(3tω)+5π2Acos(5tω)−7π2Acos(7tω)+⋯(1)
2.2.1.3 傅里叶变换
- 给定一个函数
f
(
x
)
f \left(x \right)
f(x)可以通过一系列变换(傅里叶变换)将其变换为另外一个函数
F
(
ω
)
F \left(\omega \right)
F(ω),同时,也可以通过另外一个变换(傅里叶逆变换)将其变回
f
(
x
)
f \left(x \right)
f(x),如下图所示
从公式 ( 1 ) (1) (1)中可以看出,余弦函数的 ω \omega ω的系数在不断的变化,频率在不断的变高,因此可以看出,傅里叶变换其实就是把函数变为一系列不同频率的段,并将这些频率段显示出来。
从上图可以看出,对于不同频率的函数使用相同的采样频率来进行采样时,可能无法还原出原本的函数,因此,对于不同频率的函数需要使用相对应匹配的采样频率来进行采样才能进行还原原始的信号。
2.2.1.4 频率分析采样的定义
- 对于两个频率不同的函数(下图中蓝色和黑色线条的两个函数)通过使用相同的采样频率进行采样,采样的结果却是一样的,因此对于走样就是使用相同采样频率对频率不同的函数采样的结果没有办法区分的这种情况。
2.3 滤波(Filtering,去掉一些特定频率的波段)
- 傅里叶变换:将时域的信息转换到频域上,对于一张图片而言,应用了傅里叶变换之后就会产生如下效果
对于上图而言,通过对左图应用傅里叶变换,将图片的信息转换到了频域(右图),在右图中,中心为频率最低点,往外扩的过程中频率逐渐增高,因此可以看作低频在中间,高频在周围,而亮度表达了包含信息的多少,可以看出低频包含了更多的信息。 - 高通滤波:如果将中心的低频给过滤掉(如下图)就会只剩下高频信息,只让高频信息通过,就叫做高通滤波。如果将右图的频域通过傅里叶变换转换回图片,就会发现图片只剩下边缘信息了,图片中人物的边缘是高频的波段,因为在这些区域像素的变化比较大
- 低通滤波:与高通滤波相反,如果将高频信息过滤掉,只让低频信息通过,再将频域信息转换回图片,会发现整张图片变模糊了,如下图
- 如果同时滤掉低频和高频信号,信号范围的不同对于图片留下信息也就不同,如果频率越高,留下的信息越近似于人物的边缘信息
2.4 滤波(Filtering)= 卷积(Convolution)= 平均(Averaging)
2.4.1 示例解释
- 对于一串信号和一个滤波器,这个滤波器就相当于一个滑动窗口,它在信号上不断滑动,对它所覆盖的信号求加权平均然后再将其放回到滤波器中间的那个位置上,这个过程就叫做卷积,卷积过程其实就是求加权平均的过程。如下图所示
2.4.2 卷积
- 卷积就是将信号和滤波器同时从时域转化到频域上对二者进行相乘的结果操作,然后可以在转换回时域上。
- 对于一张图片,可以在时域上与滤波器(
3
×
3
3\times 3
3×3卷积核)进行点乘,也即每一个像素及其周围的八个像素与卷积核进行加权平均得到一张卷积后的图像,但同时,也可以将图像和滤波器先转化到频域,然后将频域的信息相乘,将其结果通过逆傅里叶变换转化为图像,也可以得到相同的结果,两个过程如下图
在下边频域的路径我们可以看出,相当于对原图像进行了低通滤波,留下了低频的信息,因此图像才显得模糊。
2.3 采样
2.3.1 采样 = 频域上的重复
- 基于一定的采样频率对函数进行采样,其实结果就是函数在频域上的重复
- 定义一个函数及其频域上的表示如下
定义一个过滤器(冲激函数)及其频域上的表示为
将函数在时域上进行点乘之后,也即频域上进行相乘卷积之后的结果如下
其实可以看出,两个函数在时域上的乘积,也就是对函数进行了采样,而采样的结果就是原函数在频域上的重复。
2.3.2 走样产生原因
- 对于正常频率的采样,也即原函数频域上的重复的时间间隔比较合适的时候,在采样之后就不会出现频谱重叠的现象,也就不会出现走样现象(下图上),如果采样频率不足的时候,也即周期比较长,频率比较低的时候,对应的频域上重复的间隔就比较小(稀疏采样),就会出现采样结果混叠的情况(下图下)这时候就会出现走样现象。
2.3.3 反走样
- 增加采样率的方法来进行反走样
- 使用高分辨率显示器来进行显示,像素之间间隔小
- 但是这种方法限制于设备
- 先模糊再采样(先拿掉高频信号然后再进行采样)
如上图,我们先将高频信号给过滤掉,再以相同稀疏的采样率进行采样时就不会出现混叠现象,也就是不会出现走样,使用低通滤波器对图像进行卷积。 - 方法:对于三角形覆盖的像素每一个对其用一个像素的滤波器进行卷积,进行平均。也即有颜色和没颜色的区域面积所占的比例来对填充的颜色进行平均,如下图
3. 近似反走样
3.1 MultiSampling Anti-Aliasing(MSAA)
- 上一节提到通过面积比例来对一个像素的颜色进行平均,但现实中比较难达到这一点,因此,MSAA通过增加采样点的数量来近似得到所占的比例,对于一个像素来说,MSAA将其再次细分为比如
4
×
4
4\times4
4×4个采样点,如下图
然后在采样的时候根据这些细分的点在三角形内的数量占所有点的比例来近似,如下图,假设超采样为 2 × 2 2\times2 2×2(每个像素又被细分为四个采样点)
对于最上边的一个像素来说,一共四个点,其中三个在三角形内,因此所占比例就是 3 4 \frac{3}{4} 43,因此,可以将这个比例作为平均的权重,以此类推,最后得到这么个结果
这就是MSAA的原理
3.2 其他的一些反走样方法
- FXAA (Fast Approximate AA)
- 思路:先得到有锯齿的图像,通过一些方法得到图像有锯齿的边界,将其替换为没有锯齿的边界。
- TAA (Temporal AA)
- 思路:通过复用上一帧的一些像素的值来进行抗锯齿。
3.3 Super Resolution / Super Sampling
- 对于一张图像,将其拉大之后分辨率就会下降,会有锯齿现象,但我们要还要保证高分辨率,也即拉大之后我们会缺失一些细节信息,而我们想要恢复这些细节信息,恢复或者说预测一些图像信息,我们就可以使用深度学习的一些方法。
- DLSS(Deep Learning Super Sampling):采用深度学习的方法预测图像的一些细节信息,将低分辨率图像恢复到高分辨率。
至此本节课结束(这节课挺难的,可以去看看视频)