这是本系列的第四篇笔记。由于第五课内容较少(课程视频、课件),因此我将第六课(课程视频、课件)也整合到了一起。
这两课的内容主要涉及光栅化、反走样。至于深度测试,实际上在第七课才完成讲解,我也整合到了本篇笔记当中。
采样 Sampling
最简单的采样方案
- 判断像素中心点是否落在三角形之内
- \(\textit{inside}(t, x, y) = \begin{cases}1, &\textit{Point(x, y) in Triangle(t)}\\0, &\textit{otherwise}\end{cases}\)
- 如何判断落在三角形内?用第二课讲过的叉乘
- 边界条件怎么处理?自行设定规则并从一而终
- 几个优化方法:
- 轴对齐包围盒 Axis Aligned Bounding Box (AABB) 可以大幅度减少计算量
- (增量三角形遍历?)Incremental Triangle Traversal
反走样 Antialiasing
- 采样理论
- 走样的典型表现
- 锯齿
- 摩尔纹
- Wagon Wheel Illusion (风扇反转等「假运动」)
- 为什么会产生走样?信号变化过快,采样速率过慢
- 怎么解决?
- 提高采样率(增加屏幕分辨率)——不现实
- 反走样
- 怎么解决?
- 走样的典型表现
- 反走样方案:采样前进行滤波(模糊化)
- 理论基础:信号与系统
- 模糊操作相当于用低通滤波将高频信息过滤掉
- 如何理解图像的频域图
- (大学期间没学过信号与系统,这部分就不继续整理了,不影响接下去的学习)
- 实践中采用的方案:
- 先应用一像素宽的滤波器进行卷积(算平均),然后再采样
- 三角形的光栅化过程中,模糊的过程可以用覆盖面积来表示
- 一种近似方案:超采样 (MSAA)
- 对单个像素再进行划分,并用在三角形内的点数占比作为近似值
- 一种近似方案:超采样 (MSAA)
- 三角形的光栅化过程中,模糊的过程可以用覆盖面积来表示
- 先应用一像素宽的滤波器进行卷积(算平均),然后再采样
- 其他反走样方案
- 理论基础:信号与系统
深度测试
- 画家算法:先画远的,近的再覆盖掉远的
- 需要对物体的深度进行排序 \(O(n\log n)\)
- 存在无法处理的深度顺序问题
- Z-Buffer
- 思路:对每个像素,存储当前最近的 Z 值 \(O(n)\)
- 与绘制顺序无关