「现代计算机图形学入门」光栅化
Raster:屏幕(德语)
Rasterize:把东西画在屏幕上
最简单的想法:光栅化 = 采样一个二维指示函数
![](\images\Rasterization.png)
图1 光栅化三角形
1 | for(int x = 0; x < xmax; ++x) |
Q:如何判断一个点是否在三角形内?
A:—— 叉积
Q:要检查屏幕上所有的像素吗?
A:—— 使用包围盒
1. 抗锯齿/反走样
由于采样带来的Artifact:
- 锯齿 —— 空间上采样;
- 摩尔纹 —— 欠采样图像;
- 车轮效应 —— 时间上采样;
其本质原因是:信号变化的速度太快了,但是采样的速度跟不上;
1.1 频域
傅里叶级数展开 :用正弦和余弦的组合来表示函数。
傅里叶变换: 时域和频域的转换。
采样失真的原因:高频率信号需要更快的采样
![](\images\periodic_sampling.png)
图2 以相同频率对不同三角函数采样
走样到底是什么?
![](\images\aliasing.png)
图3 走样到底是什么
对于蓝色和黑色这两种频率不同的信号,采样的结果完全相同。我们无法区分。
滤波 = 去掉部分特定的频率
滤波 = 卷积 (平均)
卷积定理:时域上的卷积 = 频域上的乘积, 或者时域上的乘积 = 频域上的卷积
从频域的角度来看采样的本质:重复原始信号的频谱
- 是时域上的原始信号,(b) 是频域上的信号,(c) 是采样函数(冲激函数),(d) 是频域上的采样函数。
根据卷积定理,(a) 和 (c) 做乘积,相当于 (b) 和 (d) 做卷积,即不断重复原始信号。
![](\images\convolution_theory.png)
图4 卷积定理
从频域角度看走样的本质,走样 = 频谱的混合
![](\images\view_sample_from_frequency.png)
图5 从频域角度看走样的本质
1.2 如何反走样 ?
- 增加采样率。采样频率增加了,频谱复制的距离变大,就不容易发生混合。
- 采样前把高频信息去掉。
![](\images\antiAliasing.png)
图6 从频域角度看反走样的本质
1.3 多重采样抗锯齿(MSAA)
通过对一个像素大小内进行平均来反走样,但是这样子很难实现,所以用到了MSAA。
MSAA通过对一个像素内多次采样来进行模糊操作。
2. 深度缓冲
画家算法:从后向前画
Z-Buffer:使用深度缓存来记录每个像素的深度,伪代码如下:
1 | // During rasterization |
时间复杂度:对于n个三角形,O(n)复杂度
算法的优点:与顺序无关