Lecture 6: Rasterization 2(Anti-Aliasing and Z-Buffering)¶
采样率低会造成锯齿、摩尔纹等问题,出现走样现象。
抗锯齿 (Anti-Aliasing)¶
抗锯齿是指在图形渲染中减少锯齿状边缘的技术。锯齿状边缘通常出现在低分辨率或不平滑的曲线和斜线中。
先模糊(滤波)再采样是常用的抗锯齿方法。模糊可以通过卷积核实现,常用的卷积核有高斯核等(有点图像处理的味道)。
均值滤波、高斯滤波等都是常见的模糊方法,使用的卷积核如下:
\[
\frac{1}{9}\begin{bmatrix}1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1\end{bmatrix}\qquad
\frac{1}{16}\begin{bmatrix}1 & 2 & 1 \\ 2 & 4 & 2 \\ 1 & 2 & 1\end{bmatrix}
\]
傅里叶变换是将信号从时域转换到频域的工具。通过傅里叶变换,可以将信号分解为不同频率的正弦波。高频部分通常对应于图像中的细节和噪声,而低频部分对应于图像的整体形状和轮廓。使用低通滤波器可以去除高频噪声,从而平滑图像。
冲激函数(Dirac Delta Function)是一个理想化的数学函数,用于描述无限小的脉冲。它在某一点处取无穷大,而在其他地方为零,其积分为1。
减少走样的方法¶
- 提高采样率:增加采样点的数量,可以减少锯齿现象。
- 反走样滤波:在采样之前对图像进行模糊处理,减少高频噪声。
- 多重采样:对每个像素进行多次采样,如:MSAA(Multi-Sample Anti-Aliasing)。
MSAA (Multi-Sample Anti-Aliasing)¶
MSAA是一种常用的抗锯齿技术。它通过对每个像素进行多次采样来减少锯齿现象。具体步骤如下:
- 多次采样:对于每个像素,选择多个采样点(如4个、8个等)。
- 判断覆盖:对于每个采样点,判断其是否在图形内。
- 颜色混合:根据采样点的覆盖情况,计算像素的最终颜色。
但MSAA会增大计算量,需要一些优化手段,比如只对边缘像素进行多重采样。
一些新的抗锯齿技术如FXAA(Fast Approximate Anti-Aliasing)和TAA(Temporal Anti-Aliasing)也被广泛使用,前者原理是基于图像的后处理,后者利用时间上的信息来减少锯齿。
要区分抗锯齿和超分辨率,后者是将低分辨率图像转换为高分辨率图像的技术,通常使用深度学习方法,如DLSS(Deep Learning Super Sampling)。
Z-Buffering(深度缓存)¶
Painter's Algorithm(画家算法)是一种处理遮挡关系的方法,它通过从远到近绘制图形来解决遮挡问题,但Z-Buffering更为通用和高效。
Z-Buffering通过为每个像素存储一个深度值(Z值)来确定哪些图形在前面,哪些在后面。它的原理如下:
- 初始化Z-Buffer:为每个像素初始化一个Z值,通常为无穷大。
- 绘制图形:对于每个图形的像素,计算其Z值。
- 更新Z-Buffer:如果当前像素的Z值小于Z-Buffer中的值,则更新Z-Buffer,并绘制该像素。
- 输出图像:最终输出Z-Buffer中存储的颜色值。