光栅化

  • M 模型转换(放置对象)

  • V 视图转换(放置摄像头)

  • P 投影转换

  • 正投影(长方体到标准立方体
  • 透视投影(截锥体到标准立方体)

之后标准立方体映射到屏幕,光栅化就是画在屏幕上的过程,光栅化=样本的2D位置

QQ截图20220828160849

  • 规范立方体到屏幕

    与z值无关,原尺寸通过拉伸平移转换为

    表示为:即(2,2)→(width,height)


光栅显示:三角形

只考虑(x,y)的话,多边形网格(Polygon Meshes)构成模型表面,每一个多边形可以拆分成不同像素的三角形网格(Triangle Meshes)

三角形:基本形状单元

  • 最基础多边形,可以分解其他多边形,
  • 特点
    • 保证是平面,三点都在内部
    • 定义良好的内部,内外清晰
    • 三角形顶点处差值有利于定于良好的方法

Input:输入一个三角形投影在屏幕上的位置(三个顶点可能都在像素点内部,像素格取舍问题)

Output’:一组近似三角形的像素值(边缘或顶点在像素格所占比例)

如何输出一组近似三角形的像素值?


Sampling 采样

采样:对一个函数在某一点求值就是抽样。我们可以通过抽样来离散一个函数。

  • 对三角形所占最多像素点遍历,若像素点中心在三角形内就取该像素点

QQ截图20220828163942

  • 表示方法
1
2
3
for (int x = 0; i < xmax; x++)
for (int y = 0; y < ymax; y++)
image[x][y] = inside(tri,x+0.5,y+0.5); //(x+0.5,y+0.5)为中心位置
  • 计算像素点在三角形内外:通过向量叉积

QQ截图20220828164838

  • 包围盒:减少采样点,以三角形三个点画出的矩形就是包围盒(Bounding Box),不需要检查屏幕上所有像素点

然而,这种方法在实际光珊化后,会产生锯齿(Antialiasing):

QQ截图20220828165315


Antialiasing 抗锯齿

采样问题分析

  • 采样数量少:出现锯齿
  • 间隔采样:摩尔纹情况
  • 采样不及时:车轮错觉等

出现原因

方法

  • 由于锯齿是由于边缘不是红色就是白色,采取先模糊再采样的方法,即三角形边缘值取中间值

    :只有先滤波再采样才可以,反之也会出现错误

QQ截图20220828172514

深度原因是因为频域发生重叠

频域和卷积

  • 傅里叶变换:任何波都可以用正弦余弦表示,由空域转换为频域

    • 低频信号:采样充分,重构合理
    • 高频信号采样不足:重构错误地出现在低频信号上

    QQ截图20220828181239

  • 滤波:删除某个特定频率端,去掉某个频率的信息平均下来也就是卷积

  • 卷积:通过滤波器(卷积核)滑动处理每一个像素,平均后的结果。滤波器越小,频率留下的越多;滤波器越大,频率留下的越少,图像越模糊。

QQ截图20220829000317

  • 因此,采样是为了复原原信号的频率。若采样不够快,会出现频谱混叠

    • 增大采样率:通过高采样率,增加频谱间的间隔;但高分辨率的情况下消耗也会变大
    • 抗锯齿:即先模糊再采样,例如先通过低通滤波过滤掉高频信号再采样,计算每个像素内部平均值

    QQ截图20220829004038

  • 其他采样方法:超采样(MASS),通过在一个像素内的多个位置采样并平均它们的值来近似1像素盒滤波器的效果

    • 临近复制,MSAA找上一帧信息,分布在时域上