Games101-03 Rasterization光栅化
光栅化
M 模型转换(放置对象)
V 视图转换(放置摄像头)
P 投影转换
- 正投影(长方体到标准立方体)
- 透视投影(截锥体到标准立方体)
之后标准立方体映射到屏幕,光栅化就是画在屏幕上的过程,
光栅化=样本的2D位置
规范立方体到屏幕:
与z值无关,原尺寸通过拉伸平移转换为
表示为:即(2,2)→(width,height)
光栅显示:三角形
只考虑(x,y)的话,多边形网格(Polygon Meshes)构成模型表面,每一个多边形可以拆分成不同像素的三角形网格(Triangle Meshes)
三角形:基本形状单元
- 最基础多边形,可以分解其他多边形,
- 特点:
- 保证是平面,三点都在内部
- 定义良好的内部,内外清晰
- 三角形顶点处差值有利于定于良好的方法
Input:输入一个三角形投影在屏幕上的位置(三个顶点可能都在像素点内部,像素格取舍问题)
Output’:一组近似三角形的像素值(边缘或顶点在像素格所占比例)
如何输出一组近似三角形的像素值?
Sampling 采样
采样:对一个函数在某一点求值就是抽样。我们可以通过抽样来离散一个函数。
- 对三角形所占最多像素点遍历,若像素点中心在三角形内就取该像素点
- 表示方法
1 | for (int x = 0; i < xmax; x++) |
- 计算像素点在三角形内外:通过向量叉积
- 包围盒:减少采样点,以三角形三个点画出的矩形就是包围盒(Bounding Box),不需要检查屏幕上所有像素点
然而,这种方法在实际光珊化后,会产生锯齿(Antialiasing):
Antialiasing 抗锯齿
采样问题分析
- 采样数量少:出现锯齿
- 间隔采样:摩尔纹情况
- 采样不及时:车轮错觉等
出现原因:
方法
由于锯齿是由于边缘不是红色就是白色,采取先模糊再采样的方法,即三角形边缘值取中间值
注:只有先滤波再采样才可以,反之也会出现错误
深度原因是因为频域发生重叠
频域和卷积
傅里叶变换:任何波都可以用正弦余弦表示,由空域转换为频域
- 低频信号:采样充分,重构合理
- 高频信号采样不足:重构错误地出现在低频信号上
滤波:删除某个特定频率端,去掉某个频率的信息平均下来也就是卷积
卷积:通过滤波器(卷积核)滑动处理每一个像素,平均后的结果。滤波器越小,频率留下的越多;滤波器越大,频率留下的越少,图像越模糊。
因此,采样是为了复原原信号的频率。若采样不够快,会出现频谱混叠
- 增大采样率:通过高采样率,增加频谱间的间隔;但高分辨率的情况下消耗也会变大
- 抗锯齿:即先模糊再采样,例如先通过低通滤波过滤掉高频信号再采样,计算每个像素内部平均值
其他采样方法:超采样(MASS),通过在一个像素内的多个位置采样并平均它们的值来近似1像素盒滤波器的效果
- 临近复制,MSAA找上一帧信息,分布在时域上
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 五里霧中!