【图形学笔记】Lecture02&03 光栅化、抗锯齿、Z-buffer
Lecture02-Digital Drawing 数码绘画
- Drawing Machine:示波器、阴极射线管上显示光栅、栅格扫描
- 帧缓冲:用于光栅显示的存储器。
- LCD (Liquid Crystal Display) :液晶、Electrophoretic Display:电子墨水
Triangles - Fundamental Area Primitive 三角形——基本区域
为什么是三角形?
- 最基本的多边形:其他多边形可以剖分成三角形、适合优化
- 三角形有的一些独特性质:保证在一个平面上、内部是良定义的、在顶点上插值(重心插值)是良定义的
Rasterization 光栅化
Sampling 采样
- 可以通过周期性采样,来离散化一个函数。
光栅化最简单的栗子,就是判断每个像素的中心在不在三角形内部。然后这里给了个直线 \(L(x,y)=Ax+By+C=0\) 的例子,和你说 \(L>0,=0,<0\) 的情况(但是没有说明系数就直接说的话,感觉挺扯的)
当然它后面定义了一个向量 \(P-P_0=(x,y)\) 的“一般垂直向量”(General Perpendicular Vector),这里直接定义成 \(N=(-y,x)\),相当于定了个逆时针的方向。
那么对于经过 \(P_0\) 的向量 \(V\) 所在的直线,对应的直线方程恰是 \(L(x,y)=(P-P_0)\cdot N=0\) 这个方程,所以就可以通过点积,用 \(>0/<0\) 定向了(感觉不如叉积),对于一个三角形来说,只要定了方向,就只需要判断三个半平面的交,进一步判断三次点击的符号是否有相反的(如果相反就不在内部了)。
Lecture03- Sampling, Aliasing, Antialiasing 采样、锯齿、抗锯齿
Artifacts due to sampling - “Aliasing” 采样产生的问题-混叠
- 锯齿、车轮效应(Wagon Wheel Effect)——实时采样、莫尔条纹(Moire)——欠采样
Antialiasing Idea: Filter Out High Frequencies Before Sampling 抗锯齿的方法:采样前过滤高频信号
先采样再模糊(x),先模糊再采样(√)
Frequency Space 频域
Fourier变换:把一个函数表示成 \(\sin (n\omega x),\cos(n\omega x)\) 的带权和,空间域(Spatial Space)→频域(Frequency Space);逆变换:频域→空间域。
高频信号自然需要更高频的采样,而欠采样就会导致频率的失真,甚至在一些低频的采样,可能会无法区分两种不同频率的不同信号——也就是我们说的走样/失真(aliases),这也算是从频率的视角去看失真吧。
(注记:Fourier变换明明应该是时域和频域的变换,为什么这里又来个“空间域”?好像是说你可以把空间也看成时域。以及图像上看的话,中心的原点代表低频,外侧代表高频)
Filtering-Getting rid of certain frequency contents 滤波-去处某些特定频率
- 过滤低频信号(Edges),即高通滤波——提取边界(这是直观的,因为”边界“处意味着有一些突变,信号突变,自然是高频信号)
- 过滤高频信号(Blur),即低通滤波——模糊(那就是把变化大的信息抹去了)
滤波=卷积=平均,卷积定理(Convolution Theorem):空间域(时域)上的卷积=频域上的乘法,反过来,空间域的乘法=频域上的卷积。
上面那个 \(3\times 3\) 带上 \(\frac{1}{9}\)的就叫做Box Filter(也就是低通滤波器),更大的卷积盒意味着更小的频域。
Sampling = Repeating Frequency Contents 采样=取重复频率的内容
所以从频域上看,采样(离散化)后的函数,相当于是把原来频域上的函数进行复制黏贴,而如果采样的频率太低(对应着\(P_{\delta}(f)\) 的频域太密),就会出出现混叠(Aliasing)的情况,即走样。
![
How Can We Reduce Aliasing Error?如何减少混叠误差?
- 1、提高采样率:更高的分辨率、帧缓冲区,但是会带来更高的花费
- 2、反走样(抗锯齿):移走/减少高频信号(即频域图上,距离原点较远的信号)。
- (注:课件上还具体说了,移走的是高于Nyquist频率的部分)
A Practical Pre-Filter 一个实用的预滤波器
一个 \(1\times 1\) 的卷积盒将衰减周期 \(\leq 1\) (即频率较大)的信息,所以就有了计算面积的考量:
Antialiasing By Supersampling(MSAA)超采样
对于任何一个像素,认为它被划分成很多小的像素,对每个小像素采样再平均。
一些实现细节:
1、超采样的位置。2、有多个三角形。3、内存开销
Painter's Algorithm 油画家算法
好像就是说油画家画画,从远到近画,近的可以把远的覆盖。
一定程度上可以 \(O(n\log n)\) 地对三角形排序,但是很多时候,三角形并不具有全序关系:
Z-Buffer 深度缓冲
(这一部分在学校的课件放到了Lec5里,但我感觉放这里更合适?)
存储两个信息:
- 1、frame buffer存RGB信息。
- 2、depth buffer(z-buffer)存当前最小的深度信息。
for (each triangle T)
for (each sample (x,y,z) in T)
if (z < zbuffer[x,y]){// closest sample so far
framebuffer[x,y] = rgb;// update color
zbuffer[x,y] = z;// update z
}else{
// do nothing, this sample is not closest
}