这里写目录标题
- Rasterization光栅化
- 屏幕空间
- 隔行扫描
- 三角形
- 采样
- 采样产生的问题
- 反走样处理方法:采样前模糊
- 频率,时域
- 傅里叶级数展开
- 傅里叶变换
- 滤波
- 高通滤波
- 低通滤波
- 卷积
- 卷积的一些定理
- 反走样
- MSAA(Multisample Anti-Aliasing)多重采样抗锯齿
Rasterization光栅化
把三维空间的几何形体显示在屏幕上
在进行了上节课的操作之后,所有物体都处在了[-1,1]³的立方体中,接下来就要把他画在屏幕上,这一步就叫做光栅化
在做透视投影时候需要将一个四棱梯挤压成正方体,就需要先定义一个视锥(四棱锥)
如何定义视锥?
从摄像机看向一个地方,我们把它当作近平面,宽和高是可以定义的,所以宽高比就是可以定义的
- 宽高比 Aspect ratio
- 可视角度 FOV (垂直角度和水平角度可以互相转换)
通过以上两点即可定义一个视锥
要把图像投影到屏幕上就需要先定义屏幕,在图形学中,屏幕就认为是一个装了像素的二维数组。如数组大小1920*1080
像素是最小单位,每个像素由RBG构成
屏幕空间
屏幕坐标系如下图
像素的坐标以左下角为准,如图中蓝色像素坐标为(2,1)
像素的中心为(x+0.5,y+0.5)
继续上节课的话题
如何将[-1,1]³中的东西显示到屏幕上呢?
- 暂时忽略z
- 如果只将[-1,1]²中的东西显示到[0,width] x [0,height],那么就很简单了
做个缩放并平移就可以,这个变换就被称为视口变换
隔行扫描
以前的显示设备要成像,都是在屏幕上画很多线,画满整个屏幕就形成了一帧画面
隔行扫描就是说
在第一帧只画1、3、5等奇数线
在第二帧只画2、4、6等偶数线
利用人眼的视觉残留特性,这样人们即发现不了画面的异常,还能使机器工作量减半
如今还有某些视频压缩技术采用了这个思想
(但是隔行扫描会造成严重的画面撕裂,特别是对高速运动的画面来说)
三角形
- 为什么光栅化选择了三角形?
- 三角形是最基本的多边形,没有比三角形边更少的多边形 其他多边形都可以拆分为三角形 三角形必定在一个平面内
- 容易定义三角形的里外 三角形的三个点定义好后,三角形内任意一点可以通过线性的插值来计算得到(重心坐标的插值方法)
如:定义好三个点的颜色,三角形内任意一点的颜色可以通过三个点的颜色来进行插值计算得到
如何将三角形转化为一个一个的像素?
简单近似采样
给定一个连续的函数f(x),当x等于1时得到的f(1)就是1的采样
所以采样就是把一个函数离散化的过程
只要有一个定义在屏幕空间的函数,那么我们就能算出来不同像素中心的值是多少
我们要采样的东西就是
给定一个三角形,在像素的中心进行采样,来判断中心是否落在三角形内
逐像素遍历,判断该像素中心是否在三角形内部,输出到屏幕显示
但是遍历所有像素开销太大,如下图中白色那一列的像素根本没有碰到三角形,所以只要遍历蓝色区域就可以了
我们知道三角形三个顶点的坐标,有了Xmin,Ymin,Xmax,Ymax就可以得到蓝色的区域
蓝色区域就叫做包围盒(轴向包围盒/BoundingBox/AABB)
采样完成后,因为每个像素都是最小单位,像素内的颜色必须一样,所以我们会得到这样一副图
这看起来和初始的三角形差别很大,有一个个的明显锯齿(Jaggies/Aliasing)
采样
把到达光学元件上的光,产生的信息,离散成了像素,对这些像素采样,形成了照片
采样不只发生在位置上还能发生在时间上,对图像在时间上进行采样,形成了视频
采样产生的问题
- 走样
- 摩尔纹
- 车轮效应
原因就是信号的变化太快了,以至于采样的速度跟不上
反走样处理方法:采样前模糊
不能先采样再模糊!只能先模糊在采样
频率,时域
频域和时域是对信号或系统的两种不同的表示方式。
频域表示是通过分析信号的频率分布来表示信号的方式。在频域中,信号被分解为一系列不同频率的分量,每个分量对应着信号中的一种特定的周期性成分。
时域表示是通过直接分析信号在时间上的变化情况来表示信号的方式。在时域中,信号的变化被直接表示为在时间上的变化,而不是在频率上的变化。
傅里叶级数展开
任何一个周期性的函数都可以变成一系列正弦/余弦的线性组合和一个常数项
傅里叶变换
可以把一个函数f(x)通过变化变成F(w),F(w)还能通过逆变换变成f(x)
对五个不同频率的函数波形进行采样
通过f1(x)、f2(x)的采样点,我们可以大致还原出f1(x)\f2(x)的函数波形
但是从f3(x)开始,还原出的波形和原来的函数有较大出入,越往下越明显
这里就可以理解什么叫采样的频率跟不上信号变化的频率了
我们对蓝色函数进行采样,得到黑色的函数
但假如原本就有这样一个黑色的函数
我们同时对蓝色和黑色进行采样,两个截然不同的函数,得到的采样结果完全相同
这就被称为走样(Aliases)
滤波
滤波就是抹掉一些特定的频率
对应的信号如何发生变化
傅里叶变换可以把一个函数从时域变到频域
右边的图像就是左边的照片通过傅里叶变换得到的
右边图像表示的就是有多少信息
中间部分是低频信息,越往外越高频
高通滤波
在频域空间内完全抹掉低频信号,将结果还原成图像,形成左图
高频的东西在图像上表示的就是图像的边界
为什么高频信息代表着边界?
当某一图像的周围突然发生发生了变化,我们就认为他是边界
比如图中人物的衣服和背景就是由黑色突然变成了灰色
相当于颜色信号突然从黑色变成了灰色,就是出现了高频的变化,即边界
低通滤波
同理高通滤波,得到模糊的图像
去除高频和低频,只留一部分
卷积
移动窗口(Filter),将窗口中三个数和覆盖信号的三个数做点乘,填到结果中
其实就是信号在任意一个地方,在他的周围做了个平均操作
卷积的一些定理
时域的卷积 == 频域的乘积
- 可以拿到一幅图直接用一个卷积滤波器进行卷积操作
- 也可以
1. 先傅里叶变换这幅图,将这幅图变到频域
2. 将卷积滤波器变到频域上
3. 将两者相乘,乘完后得到的频域的结果,将其逆傅里叶变换,变到时域上
将3*3的滤波器乘1/9是为了不让图像整体的颜色发生变化
如果不乘1/9,那么每个像素就会是原来这个像素周围九个像素的和,图像就会越滤波越明亮了
左边一列是时域,右边一列是频域
对a图像进行c的采样,得到e
对应的操作在频域中就是bdf
时域的采样在频域中就就体现为频域信号的复制
(这里老师说左边时域进行乘积=右边频域的卷积,和前文说的不一致,我去查了一下,好像两种说法是相互的,都可以,这里不太懂,但是不影响整体的理解)
为什么会产生走样呢?
采样不同的间隔,会引起频谱不同间隔进行复制,所相交的部分就是走样
反走样
先对图像做模糊(把高频信息拿掉),再采样
把高频信息砍掉,砍掉虚线方块以外,在以原始采样频率进行采样
这样频域图像就不会发生混叠,也就没有走样了
对覆盖面积求平均,也就是卷积
MSAA(Multisample Anti-Aliasing)多重采样抗锯齿
通过更多的样本来近似三角形的覆盖率,并不是提高采样频率
把一个像素划分为几个小点,判断这些小点是否在三角形内,再把结果平均起来,就知道三角形覆盖了这个像素的百分之多少
并不是简单的提高了采样的频率,只是用来做第一步模糊,求三角形的覆盖率,平均之后是什么
MSAA解决的其实是对信号的模糊操作
在工业界并不是直接将每个像素平均分了四份,而是采用了一些独特的图形,而且一些边缘的像素还会被复用