- MVP变换之后该做什么?自然是将变换好的视图映射到屏幕空间上。
- 最终会把
映射到屏幕空间上去。
- 当所有的三角形都已经屏幕上,这时就要把三角形画出来,这个过程就叫光栅化。
- 利用像素的中心(是否在三角形内),对三角形可见性的函数进行采样。
- 处理反走样(抗锯齿)AntiAliasing
目录
2.2 采样:对连续函数的离散化,对像素中心(x+0.5,y+0.5)进行采样
⭐ 2.2.1 AABB包围盒(轴对齐包围盒):求解离散点最优包围空间的方法
⭐3.2.1 傅里叶变换(Fourier Transform):时域-->频域
❗3.2.7 反走样 = 限制频域上内容的混合,在采样前通过滤波去除高频部分
3.2.8 由以上可得出:可通过在一定像素区域卷积来达到反走样的效果,取均值
3.3.1 MSAA(多重采样抗锯齿):提高分辨率,算平均值
3.3.2 FXAA(Fast Approximate AA):快速近似抗锯齿
3.3.4 DLSS(Deep Learning Super Sampling):深度学习抗锯齿
4. 可见性与遮挡(Visibility/Occlusion)
⭐4.1 Z-Buffering深度缓冲,在GPU硬件中实现
1. 视口变换
1.1 定义屏幕、屏幕空间
1.2 视口变换:将标准立方体坐标变换到屏幕空间
2. 光栅化
2.1 三角形:最基本的图元
- 保证是一个平面
- 容易定义三角形内外(通过叉乘)
- 三角形内任意一点的属性可通过插值获得
2.2 采样:对连续函数的离散化,对像素中心(x+0.5,y+0.5)进行采样
采样可以在时间上采样,也可以在位置上采样
⭐ 2.2.1 AABB包围盒(轴对齐包围盒):求解离散点最优包围空间的方法
碰撞检测之 AABB 包围盒_星星光点的博客-优快云博客_aabb包围盒
3. 反走样
3.0 图形学中的几种Sampling Artifacts
⭐3.1 走样的原因:采样频率无法与信号频率不同步
3.2 频域(Frequency Domain)
⭐3.2.1 傅里叶变换(Fourier Transform):时域-->频域
利用傅里叶级数近似原函数:
3.2.2 高频信号需要高频采样,一些可视化例子
3.2.3 频域图:高通滤波、低通滤波、某频段通滤波
高通滤波:只保留高频率部分,视觉上表现为保留边界,因为边界是图像中变化最剧烈的部分。
低通滤波:只保留低频部分,视觉上表现为模糊,可理解为去除明显的边界部分。
3.2.4 卷积操作:时域中的加法=频域中的乘法
由此,卷积的实现可以有两种方法:
❓3.2.5 采样=重复频域上的内容
❓3.2.6 走样=频域上内容混合,即函数上有交叉的部分
❗3.2.7 反走样 = 限制频域上内容的混合,在采样前通过滤波去除高频部分
所以这也就是为什么可以通过滤波的方式能一定程度上解决走样的原理:
3.2.8 由以上可得出:可通过在一定像素区域卷积来达到反走样的效果,取均值
3.3 几种反走样技术
3.3.1 MSAA(多重采样抗锯齿):提高分辨率,算平均值
比如把之前每个点由1×1像素提升为2×2的像素点
随后进行采样,并算得均值
3.3.2 FXAA(Fast Approximate AA):快速近似抗锯齿
通过图像匹配的方法找到锯齿的图像边界,并换成没有边界的图像,速度十分快,与采样无关,用图像的方法
3.3.3 TAA(Temporal AA):时域抗锯齿
复用上一帧的信息,相当于MSAA对应的样本分布在了时间上。
3.3.4 DLSS(Deep Learning Super Sampling):深度学习抗锯齿
上采样时会丢失一些信息(产生锯齿),采样率不够,利用深度学习技术“猜”出缺失的细节。
4. 可见性与遮挡(Visibility/Occlusion)
4.0 画家算法Painter's Algorithm
⭐4.1 Z-Buffering深度缓冲,在GPU硬件中实现
- 存取离我们最近的像素深度值在一个Buffer中,叫深度缓存,Z-Buffer
- 把离我们最近的像素点混合后的信息缓存,叫做frame buffer
z-buffer 算法: