学习图形学
前言
感觉自己一开始没有认真学,所以现在基础有点差,最近打算重学一遍,该手推就手推,不偷懒了。
因为直接跟着 Games101 和 Games201 学,所以也直接用课程的目录了。
Games101
Transformation
View transformation
相机需要设置的参数。
将相机平移至原点并同时将 look at 和 up 及其叉乘共三个向量同时对其标准坐标轴的矩阵即为 View matrix。
唯一要注意的就是由于直接计算旋转矩阵比较复杂(从任意向量变换到标准坐标轴),所以先计算其逆矩阵(从标准坐标轴变换到任意向量)。
Projection transformation
其实只要求从四棱台压缩到矩形的矩阵就行了。
直觉上其实很容易得出结论,难点在于求出相应的变换矩阵。
为了计算出来就得补充两个假设。
Any point on the near plane will not change
Any point’s z on the far plane will not change
解方程后也能求出来最后的投影矩阵(还需要用 FOV 和长宽比进行参数替代)。
最后再通过正交矩阵映射到 NDC 空间。
补充一点,如果不出意外的话四棱台向长方体的挤压方向是这样的。
因为如果不做出第二条假设,所有的点都会向法线(垂直边方向)挤压,第二条假设的存在使挤压形变变少,速度变慢。
欧拉角,旋转矩阵和四元数
欧拉角
万向锁就是旋转过程中,任意两轴重合,导致旋转轴的缺失。
旋转矩阵
唯一的缺点就是不方便插值。
四元数
四元数的话就看 3B1B 的视频吧。
四元数是一种具有四个实数分量的超复数。四元数也可以用于表示三维空间中的旋转,其中三个实数分量表示旋转轴的方向,第四个实数分量表示旋转的角度大小。四元数在旋转计算中具有很多优点,例如不存在万向锁问题,计算量小,而且可以很容易地插值和球面插值。然而,使用四元数需要对其进行规范化处理,而且理解四元数可能需要更多的数学知识。
Rasterization
其实光栅化的本质就是采样。
反走样
在采样过程中,每个像素的颜色值是由周围像素颜色值插值得到的,因此如果周围像素颜色值发生了剧烈变化,那么插值得到的像素颜色值就会出现锯齿状的边缘。这种锯齿现象是因为高频分量没有被滤波掉导致的。
MSAA 和 FXAA
实现方式:FXAA是一种基于像素的反走样技术,它使用特定的颜色滤波器对像素进行处理,从而实现反走样的效果。而MSAA则是一种基于多个采样点的反走样技术,它在采样点周围绘制多个采样点,然后对采样点进行平均化处理,从而实现反走样的效果。
渲染速度:FXAA相对于MSAA来说更快,因为它只需要进行一次颜色滤波处理就能完成反走样,而MSAA需要绘制多个采样点并进行平均化处理,因此会比FXAA更加耗时。
效果质量:FXAA相对于MSAA来说效果稍逊一些,因为它只是对像素进行颜色滤波处理,容易出现图像过度平滑和模糊等问题。而MSAA则可以更好地保留图像的细节和清晰度,但是需要更多的计算资源。
适用范围:FXAA更适合用于移动设备、游戏主机和低端PC等场景,因为这些设备的性能有限,需要快速的反走样技术。而MSAA则更适合用于高端PC和工作站等场景,因为这些设备的性能更强,可以承担更多的计算开销。
特定的颜色滤波器是指针对图像中特定类型的边缘和锯齿问题而设计的一种颜色滤波器。在FXAA(Fast Approximate Anti-Aliasing)中,采用了一种基于Luma值(亮度)的颜色滤波器,通过计算像素周围的亮度值来检测出可能的边缘和锯齿,并将其进行平滑处理,从而达到反走样的效果。
这种颜色滤波器主要是通过将图像中相邻的像素进行比较,并根据它们之间的颜色和亮度差异来判断是否存在边缘和锯齿,并对这些像素进行颜色和亮度的平滑处理,从而消除图像中的锯齿和边缘问题。这种处理方式不需要对图像进行多次采样或绘制额外的像素,因此可以在较短的时间内完成反走样处理,并且对于移动设备、游戏主机和低端PC等设备来说具有很好的适用性。
TAA(Temporal Anti-Aliasing)
传统的空域反走样技术往往会导致图像失去一些细节和清晰度,而时域反走样技术可以利用前一帧和当前帧之间的信息来进行反走样处理,从而避免这种问题。
TAA通过利用前一帧和当前帧之间的运动信息,以及图像的深度信息等,计算出运动向量,并将当前帧的像素颜色与前一帧进行混合,从而得到一个平滑的图像。具体来说,它将前一帧的像素颜色投影到当前帧上,并计算出两帧之间的运动向量,然后将当前帧的像素颜色与投影的像素颜色进行混合,从而得到反走样效果。
TAA不仅可以减少锯齿状边缘和走样等问题,还可以增强图像的清晰度和细节。但是,它也会带来一些副作用,比如图像可能会出现闪烁和模糊等问题。因此,使用TAA需要进行适当的调节和优化,以平衡反走样效果和图像质量。