目录
一、透视投影定义补充
Aspect ratio:宽高比
Field of view:垂直可视角度
以上为fovY和l,r,b,t的关系
二、屏幕像素的表示
1.几个定义
- 什么是屏幕
-是一个像素组成的数组
-数组的大小:分辨率
-典型的光栅化显示器
- 光栅
-光栅化==把物体画在屏幕上
- 像素(最小的图元)
-目前:像素是一个颜色均匀的小方块
-颜色是(红、绿、蓝)的混合物
- 定义屏幕空间
屏幕中的每一个像素点我们都用整数坐标进行表示,最大最小值与分辨率相对应,考虑到每个像素都有一定的面积,我们定义(x+0.5, y+0.5)为该(x, y)像素的中心,如图中黑圈所示。
2.三角形
(1)为什么使用三角形作为基本图形
- 其他多边形都可拆分为三角形
- 内部一定是平面
- 边界清晰,容易判断内外(向量的叉积)
(2)如何用像素表示三角形
采样:计算每个点函数的值,即把函数离散化的过程。
使用的一个非常简单的函数判断,点(x,y)在三角形t里面就是1,否则为0
求点是否在三角形内:用p2p1叉乘p1Q,根据右手定则,朝上,说明Q在p1p2左边,同理,按方向顺序判断其他三条边,若Q都在三条边的左边或右边,说明Q在三角形里面
最终得到:
三、锯齿(走样,Aliasing)
采样会出现瑕疵:锯齿、摩尔纹和车轮效应
发生的根本原因:采样速率跟不上信号的变化(走样),从而频谱产生混叠
解决方法:模糊滤波,先模糊,再采样,填充像素颜色填充的是模糊后的颜色(有深有浅)
但是先采样在模糊就不行:
滤波:去掉某个特定的频率段 ,滤波 = 卷积 = 平均
两个信号时域的卷积相当于这两个信号频域的乘积
有关图像频率:
图像的频率被称为空间频率,空间频率是指单位长度内亮度做周期性变化的次数,它反映了图像的像素灰度在空间中的变化情况,从傅里叶频谱上可以看到明暗不一的亮点,反映的就是某点与邻域间的差异程度。 举个例子,一帧图像的背景或者变化缓慢的区域,也就是灰度值分布比较平坦,那么,低频分量就比较强。图像的边缘、细节以及噪声的像素灰度在空间的变化非常剧烈。因此为高频分量。
模糊操作:用卷积核平均了每个像素周围的像素点,达到了模糊的效果。
Box越大,低频滤波越强,只能留下更低得频率,所以图片也越模糊。
四、反走样
采样=重复频率内容
结论:
采样的密度越低走样越厉害。
如果采样的密度小那么不同的波所采样的结果会一样,那么就会导致走样。
解决方法:
- 增大采样率(受限于条件,不好实现)
- 反走样,先模糊(过滤掉高频率波),再采样
超采样反走样SSAA:平均像素值来进行反走样,把每个像素再分成小的像素,计算每个点的颜色值,再求均值。
多采样反走样MSAA:与超采样反走样不同的是,只去研究有几个采样点被三角形cover,然后利用像素中心坐标计算一次颜色(超采样要进行四次shading)。
为了使用多采样反走样增加了计算量。
其他方案:
FXAA:得出有锯齿的图像,找到图像边缘,把有锯齿的部分替换为没有锯齿的。
TAA:复用上一帧的结果,应用到当前帧(相当于把MSAA对于的样本分布到时间上,在当前帧没有进行任何操作,但废内存)。
超分辨率:把低分辨率的图转成高分辨率,用深度学习的方法。
五、深度缓冲
1.Z-Buffer算法
1. Z-Buffer算法需要为每个像素点维持一个深度数组记为zbuffer,其每个位置初始值置为无穷大(即离摄像机无穷远)。
2. 随后我们遍历每个三角形面上的每一个像素点[x,y],如果该像素点的深度值z,小于zbuffer[x,y]中的值,则更新zbuffer[x,y]值为该点深度值z,并同时更新该像素点[x,y]的颜色为该三角形面上的该点的颜色。