GAME101总结

数学知识储备

向量

来自:02_Review Of Linear Algebra (yuque.com)

点乘

点乘在图形学中的应用

  • 找到两个方向之间的夹角

    image-20250423103615421

  • 找到一个向量投影到另一个向量上是哪样的

  • 计算两个向量的方向(是接近还是远离)——向量相向还是远离

    判定高光范围,从1(重合)-0(垂直)–1(完全远离)

  • 关于前与后

叉乘

  • 找到两个方向之间的夹角

    image-20250423103623645

  • 判断向量a在向量b的左右

  • 判断点在三角形的内侧还是外侧

应用案例

Unity精华☀️点乘、叉乘终极教程:用《小小梦魇》讲解这个面试题~-腾讯云开发者社区-腾讯云 (tencent.com)

矩阵

第二节总结

这节课主要是对线性代数中向量和矩阵的复习,总体来说难度不大。

1.向量主要是其点乘和叉乘的两种乘法。

  • 点乘能够用于计算向量之间的投影和向量之间的夹角,能够判断两向量是否相近(菲涅尔效果)
  • 而向量投影主要能测量两个方向的距离、分解向量以及确定向前/向后等,这些特性能够运用到确定直角坐标系上(即确定基坐标,就是确定一个基准的感觉)
  • 叉乘能够用于确定向量之间的位置关系,左右、内外等。
  • 确定内外在后续光栅化用的会很多,而确定左右的方向好像没有提及运用??后续有涉及到的话在回来补坑。

2.矩阵则是其乘法计算的一些计算方法。

  • 计算机的图形信息基本都是用矩阵存储的,信息与信息的计算后续也会涉及。这里闫老师主要是稍微复习了一下。

变换

2D(二维)变换

image-20240417225121008

缩放变换中,没有平移,因此最后一列头两个数是00。

旋转变换中,平移和缩放同理。

平移变换中,没有经过线性变换,左上角是单位矩阵1001,有平移因此最后一列头两个数是tx ty。

3D变换

三维空间的变换,可以类比二维的。

注意区别,三维的点和向量增加一个数(升维)后,并不是四元数,四元数是专门用来表示旋转的。

image-20240417231500879

  • 再次使用齐次坐标

欧拉角

任意的一个旋转,都可以写成绕x、y、z旋转的组合。

三个轴旋转的旋转角,称为欧拉角。

四元数

四元数是为了给旋转做差值才引入的。

  • 假设一个旋转矩阵是旋转15°,另一个是旋转25°。如果将两个矩阵加起来求平均,结果并不是20°。
  • 这是因为旋转矩阵不适合做差值。

万向锁、欧拉角、四元数

Unity精华☀️一、从旋转到万向锁之:Unity的旋转-腾讯云开发者社区-腾讯云 (tencent.com)

Unity精华☀️二、到底是什么原因导致“万向锁”?旋转翻车的终极解析!-腾讯云开发者社区-腾讯云 (tencent.com)

Unity精华☀️三、四元数(Quaternion)解决万向锁-腾讯云开发者社区-腾讯云 (tencent.com)

第三节总结

今天讲的是各种变换,前面所有的变换都是以2D为例的,3D其实也是同理。

缩放、对称、旋转等这些变换,能够直接用矩阵乘以向量的形式表示,称为线性变换。

平移不能以矩阵乘以向量表示,并不是平移变换。其形式是矩阵乘以向量加上一个矩阵,可以称之为仿射变换。

如果将平移看作特殊的变化,那又太过麻烦。为了让所有的变换具有统一性,引入了齐次坐标的知识。

齐次坐标能够通过加一个数(升维)的方式,通过齐次坐标来表示仿射变换。其次坐标也可以表示线性变换。

因此,能够用齐次坐标的方式,将所有的变换转变成矩阵与向量的形式。

将单一的变换累加,就是组合变换。组合变换中,变换的顺序很重要。

在组合变换中发现,先将所有的变换矩阵相乘,还是能得到一个矩阵,这说明任何复杂的变换都能用一个矩阵来表示。

第四节总结

二维三维补充

今天先是对之前缩放、平移和旋转等这些变换在二维、三维上的一些补充。

二维

二维上是对旋转矩阵的补充。

  • 求物体旋转-θ时的旋转矩阵,发现R = Rθ-T
  • 这里引出性质(理论上二维三维都通用):在旋转里,旋转θ的旋转矩阵的转置 等于 旋转θ的旋转矩阵的逆。(数学上的正交矩阵)

三维

三维上时对缩放、平移和旋转变换的补充。

  • 三维的缩放和平移变换很简单,原理和二维的一致。
  • 三维的旋转变换,其会有绕x、y、z轴三个方向旋转的情况,对应的旋转矩阵都会不一样。
  • x和z的旋转矩阵分析方法一致。
  • 绕y轴的旋转矩阵比较特殊,其值是x 、y的旋转矩阵的负值。这是因为在右手系下,x叉乘y是-z。
  • 此外,还提及了四元数。由于矩阵不适合做差值,因此会用四元数。

观测变换

课上的重点是观测变换。观测变换有模型、视图、投影三种(简称MVP变换)

个人理解模型变换像是“建模”这种,这里就不需要讨论。

视图变换

视图变换的主要原因是摄像机的摆放问题,抽象上来看,就是坐标系的建立和转换的问题。

  • 通过定义,我们规定了一套标准的坐标系。但是摄像机自身的坐标系并不一定与标准坐标系重合,这个时候我们需要进行坐标系的转换(视图变换)。
  • 视图变换时,要将视图(定义的摄像机的前后上下,原点,在Y上,看-Z)坐标轴通过平移、旋转等变换回到标准坐标系上。
  • 视图坐标的X轴是通过y和z叉乘得到,要将一个叉乘旋转比较麻烦。因此可以反过来,让标准坐标系旋转到视图坐标系上。接着通过前面的正交矩阵性质(在旋转里,旋转θ的旋转矩阵的转置 等于 旋转θ的旋转矩阵的逆),能够求出旋转矩阵。
  • 平移矩阵很简单,直接是原点的移动就可以得到
  • 视图变换是先旋转,再平移。通过旋转矩阵和平移矩阵,就可以算出视图矩阵。

投影变换

投影变换是将三维的画面投影到一张二维图像上,有正交和透视两种方式。

正交变换

正交投影比较简单,平移变换加上缩放变换即可得到。同理正交矩阵也是通过平移矩阵和缩放矩阵就可以算出。

透视变换

透视投影比较复杂。

  • 透视变换中为了不涉及坐标系之间的变换,引入了“挤压”的想法。透视投影做“挤压”投影,再做正交投影,就可以得到一张二维二维画像。
  • “挤压”投影的“挤压”矩阵推导起来比较复杂,后半节课都在干这个事情。
  • 总的来说,就是先利用相似三角形、变换点和原始点之间的关系和齐次方程的特性,得到出第三行以外的“挤压”矩阵值。
  • 第三行通过观察到的两个信息(挤压时近平面和远平面点的关系),带入特殊值解方程推出来的。
  • 算出“挤压”矩阵后,根据前面的正交矩阵,就能得到透视矩阵。

第五节总结

今天主要讲的是光栅化的知识。

在上节课中,通过观测变换(视图变换和投影变换),可以将三维的物体转化成二维的图像数据信息。

这节课就是需要将这个信息“画”出来,这就叫做光栅化。

理论上无论是怎样的图形,通过光栅化都能“画”在屏幕中。任何图形都可以分解成由三角形组成,因此课上主要以三角形为例,讲了三角形的光栅化。

三角形光栅化中,最简单的方式就是采样。采样简单来说就是通过一个函数,将图形的位置信息传入,即可得到函数值,这个函数值个人理解就是在计算机中用于“画”的像素信息。

但在实际应用中,光栅化会出现锯齿、走样的问题,下节课的主要目的,就是抗锯齿、防走样。

第六节总结

前提:图形学中将一幅图像看成一个二维函数。

频率、频谱

频率用来表示波变化的快慢。

一个函数(图像)经过傅里叶变换后,能够得到其频谱。

  • 函数f通过变换能够变成另一个函数F,f通过逆变换也能够变回F。变换过程就叫做傅里叶变换或逆傅里叶变换。
  • 频谱是图像(信号)在不同频率的样子,是频率的分布曲线。
  • 在频谱中,每间隔一段就取一个数据点,这个取点的过程叫做采样
  • 同样的一个采样方法,采用两种不同的频率的函数得到的结果,我们无法区分它们,这叫做走样

滤波

将某一范围内的特定频率去掉的过程称为滤波

个人理解滤波其实就是一个函数,将图像(信号、函数)与这个滤波函数叠加,就能实现实现滤波的效果。

高通滤波就是能够去掉低频频段的函数(信号)。图像增加高频滤波后,图像边界将变得明显。

同理,低通滤波就是去掉高频频段的函数(信号)。

除此之外还有一些特定频段的滤波。图像增加低频滤波后,图像将变得模糊。

卷积

卷积在图形学中就是加权求平均。

卷积操作就是一个低通滤波器

  • 将某一种滤波作用在一个信号上,进行卷积操作(点乘加权平均),得到一个新的信号。
  • 这是图形学简化后的定义,不是数学上的定义

卷积定理主要是证明了时域的卷积 = 频域的乘积,反之亦然。

  • 从例子上看,就是一个图像进行卷积操作后得到新的图像,在频域中就是一个频谱乘以卷积操作的频域得到一个新的频谱。

卷积盒可以看作是一个滤波器

  • 卷积盒box越大,边界越少,图像信息越来越少,图像越来越模糊。

频域中的定义

采样在频域中就是将频谱复制粘贴。

  • 时域上函数相乘变成一系列的点。
  • 对应到频域上,就是把原始的函数的频谱复制粘贴。

复制粘贴的频谱之间的间隔越小,频谱重叠在了一起(信号混在了一起)就是走样。

采样的越稀疏,采样的频率越小,对应频谱上就越密集(时域上的信号就会叠在一起)。

反走样

在采样之前做一个模糊(滤波)可以达到反走样的效果。

  • 需要模糊的话需要做低通滤波。去掉高频,在频域的体现就是频谱覆盖的面会小,防止频谱重叠。

MSAA、FXAA和TAA都是做模糊一些技术。

  • MSAA是增加像素的采样点,近似合理的覆盖率,从而达到模糊的效果。
  • FXAA则是先采样,形成图像后,再利用图像匹配找到锯齿的部分,模糊处理后替换锯齿部分(但是会违背采样之前做一个模糊的理论,这样达不到很好的效果,优点是很快)
  • TAA则是会复用上一帧的感知结果,相当于将MSAA的样本分布在时间上。

第七节总结

本节课讲的东西比起前面来说,难度直线下降!

今天主要讲着色,讲着色前补充了前面光栅化深度缓存的知识。

光栅化内容中,首先讲解了画家算法的思想。由于画家算法无法很好的满足计算机图形学的需求,因此引入深度缓存的概念。

  • 每个导出的图像都有一张对应的深度图,这个深度图记录着所有像素的深度信息。
  • 此外还讲了深度缓存算法的实现方法,其本质就是一个双重循环。

着色部分通过Blinn-Phong反色模型引入漫反射、高光等显示中光照的效果情况。

  • 主要讲了物体漫反射中,光的能量问题。
  • 着色点平面与光发现的角度可以得到着色点对光能量接收的情况。
  • 光源与物体的距离可以得到着色点处光能量的发射状况。
  • 通过光能量的接收和发射状况,我们就可以量化漫反射的能量。