6.1 Antialiasing - 抗锯齿与反走样
(1)采样存在artifact-瑕疵:锯齿、隔行采样(摩尔纹)、人眼在时间上的采样跟不上速度;
走样产生的原因:信号变化得太快了,但是采样速度太慢了。
(2)如何抗锯齿?即反走样
先做模糊处理-或者说滤波处理,可以抗锯齿。先采样再模糊,达不到效果。
(3)傅立叶变换
实际上是将一种曲线分解成不同的频率的曲线(函数)
假设分解成以下五种曲线,在同一个x处进行采样,在频率低处比较能还原原来的曲线,频率高处几乎不能还原。高频率的曲线采样频率也应该高。
所以,采样与函数的频率是很有关系的。
采样走样:想要的是蓝色曲线,根据这样的采样频率,但采样还原的是黑色曲线。
走样定义:通过同一个采样方法(频率相同),对两个频率不同的线段蓝线与黑线采样,得到的结果(采样点)居然是无法区分的(相同的)。
(4)滤波
定义:将特定频率去掉
傅立叶变换可以将图片从时域变换到频域,即从图片空间变换到频率空间。
右图:中心定义为频率最低处,周围为高频区。
在不同频率的地方究竟包含了多少信息?用亮度表示信息。该图亮度集中在低频区域。
高通滤波:做高频滤波(只有高频pass)
高频区实际上就是图像的边界,边界的梯度大,即频率大。
低通滤波:边界部分去掉,得到模糊效果
还有这种
(5)滤波 = 平均 + 卷积
卷积:做一个平均
拿左边的图片的每一个像素都做平均(取9个像素的平均值,结果自然是模糊了)
下半图片:时域上的卷积 = 频域上的乘积
3*3的卷积核
小方块变成大方块的时候,频域图变暗了。原因是边界多了,低频区少了所以变暗了。
滤波 == 卷积
采样 == 重复 频域 内容
(6)解决反走样、抗锯齿AA
增加采样频率、
先模糊(卷积即可模糊)再采样、
MSAA(Supersampling)--用更多的点判断该像素是否在三角形内、
FXAA(Fast Approximate AA)--先得到有锯齿的边界,再识别锯齿换成无锯齿边界
TAA(Temporal AA)--与时间相关,复用上一帧可能没锯齿的边界
25%表示rgb三个通道都*25%
为什么先采样再模糊不行?
因为采样之后,信号已经产生了堆叠,模糊(卷积取均值)后仍然是堆叠的。
6.2 遮挡与可见性 - 使用深度缓冲z-buffering解决
在许多三角形做光栅化时,需要考虑遮挡关系。
(1)画家算法
先画远处的,在画近处的,得到正确的遮挡关系。
在计算深度关系的时候,需要nlog(n)时间复杂度
(2)Z-Buffer--有互相遮挡关系的时候画家算法不能使用
完整的三角形不方便排深度,但是可以对每个像素进行排序。
· 可以记录当前每个像素z-index最小的值
· 需要额外的buffer记录深度信息
- frame buffer记录颜色值--存储最后的结果--frame buffer store color values
-z-buffer记录每个像素的深度 -- store depth
算法流程:
初始化全部的像素的depth-buffer为∞
对于每一个三角形
对于三角形内的每一个像素
如果当前像素 < z-buffer[x,y]处像素
更新深度缓存
时间复杂度O(n),实现与绘制顺序无关。