games101 感悟笔记

Lecture 4:

  1. MVP变换可以这么理解:在虚拟现实中(比如游戏里面),我们需要将一个三维物体投影到一个屏幕中(玩家的屏幕),也就是二维的坐标信息,那么我们需要一个相机(玩家的眼睛),然后MVP做的事情就是:首先为了方便计算相机和物体的相对位置,将相机和物体同时移动到一个标准的坐标系中,相机的位置就是(0,0,0),方向就是(+x, +y, -z),然后物体也要相对移动。第二步,我们需要将相机能看到的视锥区域的所有物体进行投影,分为正交投影和透视投影。正交投影最简单,视锥区域为长方体,直接将视锥区域中心移动到原点,这一步是为了得到视锥内物体x和y的投影,然后将视锥压缩成中心为原点,长度为2的正方体,目的是为了后续的计算,物体变形不用担心,因为后续转换到屏幕坐标的时候就会重新拉伸回来。下图为正交投影图:games101 感悟笔记_第1张图片
    透视投影和正交投影唯一不同之处在于有一个压缩的过程,也就是首先要将视锥体进行压缩,压缩成正交投影的长方体之后,再进行正交投影,就可以了。下图为透视投影图:games101 感悟笔记_第2张图片
    最后一步,就是将变换好的视锥中的物体进行投影到二维屏幕中就可以了。

2.下图的透视图容易误解,特此说明:可以看成是f远处的面是我们想看的,n处的近平面是我们实际透视效果看到的,也就是光线往里面收缩,所以造成了近大远小。
games101 感悟笔记_第3张图片
这里补个图更好理解透视投影的过程:远处物体透视的投影到屏幕上。
games101 感悟笔记_第4张图片

Lecture 6

  1. 对如下图这样的图片空间图和频域图的一点总结:
    games101 感悟笔记_第5张图片
    对于左图这样的空间图,空间频率的指的是单位长度内亮度(灰度)作周期性变化的次数,是图像中灰度变化剧烈程度的指标,也可以理解为灰度在平面空间上的梯度。而右图是对作图进行傅里叶变换之后的频谱图,注意这里并不是和左图一一对应,因为右图的频谱图实际上是经过了中心化处理。
    那么怎么得到右图的呢?首先因为频谱图对应的正弦余弦函数是无限循环,也就是说有周期性的,我们的空间图片很明显没有,那怎么处理的呢,就是将图片复制很多份,然后上下左右进行展开,就相当于循环了,然后我们再取其中一幅图对应的频谱图就可以分析了,示意图如下:

    这里就很好理解中心化之后的十字线是什么原因了,因为往往一张图片的左右上下边界差异很大,所以就会是白色(代表变化大)。
    为了便于分析,于是引入了数学的方法进行频谱的中心化处理,如下图所示进行交换:
    games101 感悟笔记_第6张图片
    整体的结果就是下面这样:

    接下来对这张图进行分析:
    games101 感悟笔记_第7张图片中心化之后的频谱图,中间频谱低,往四周频率逐渐变高,未中心化前正好相反:
    games101 感悟笔记_第8张图片
    可以看出,低频区的白色更多(能量更大),因为低频分量(低频信号)代表着图像中亮度或者灰度值变化缓慢的区域,也就是图像中大片平坦的区域,描述了图像的主要部分。而高频区的白色较少,是因为高频分量(高频信号)对应着图像变化剧烈的部分,也就是图像的边缘(轮廓)或者噪声以及细节部分
    games101 感悟笔记_第9张图片
    最后,补充点额外的知识,在二维傅里叶变化中,空间域(右图这样的)横向的周期变化会反应在Y轴上,而空间域纵向的周期变化会反应在X轴上,同理,东南对应东北方向。如下图:
    games101 感悟笔记_第10张图片
    games101 感悟笔记_第11张图片

games101 感悟笔记_第12张图片

games101 感悟笔记_第13张图片

上面最后一张图说明了一件事:频谱图中的任意一对对称的两点(频点),经过傅里叶反变换之后,就是空间域对应的的一个与之对应的正弦波(相应的频率和方向),如下图:games101 感悟笔记_第14张图片

而平移等其他知识点参考这个链接

  1. 关于下图走样产生原因的理解:
    games101 感悟笔记_第15张图片
    上图说明了,对时域图的采样(相乘),就相当于右边对应频域图的卷积,直观的看就是采样相当于对频谱图进行了左右复制很多份,换句话说就是,采样就是重复一个原始信号的频谱
    games101 感悟笔记_第16张图片
    这个图的上半部分是采样的频率够大,就不会重叠,而下半部分由于采样频率太小,就会发生重合,发生走样。结合上图可以这么理解:现实世界就是无限次的采样(采样频率无限大),那么只会出现一个图形,相当于对着X轴放大而横坐标不动,所以只能看到一个图形;而电脑中如果采样频率非常小,就很有很多个图形,因为下一次采样还没来下一个特征就来了,所以就会重叠起来,当于对着X轴缩小而横坐标不动,所以能看到很多图形。
  2. 模糊之后采样有反走样效果的原因:
    games101 感悟笔记_第17张图片
    这里方框之所以这么框,是因为模糊相当于丢失了一部分高频信息,也就是频率变化大的,而两个斜线频率变化较大,所以这么画。结果就如同下半部分图,就不会有重叠部分造成走样了。

Lecture 07

  1. 满反射:粗糙的物体表面向各个方向等强度地反射光,这种等同地向各个方向散射的现象称为光的漫反射(diffuse reflection)。产生光的漫反射现象的物体表面称为理想漫反射体,也称为朗伯(Lambert)反射体。(所以从哪个方向哪个距离看都一样,亮度只取决于光源和物体之间的参数)

Lecture 09

  1. 关于纹理映射产生的问题的理解:正常理想的情况下,屏幕上像素pixel通过uv坐标映射到纹理图上(也就是uv图),一个像素中心坐标所代表的屏幕区域正好对应其在纹理图上一个单位的区域,也就是一个pixel对应一个texture。但是会有两种情况:第一种情况是纹理过小,像素过大。相当于好几个像素会在一个texture中,就是下图情况:
    games101 感悟笔记_第18张图片
    也就意味着,pixel坐标映射到texture坐标上的时候不再是整数,而是小数,因为精度变高了。这个时候,那么就会出现好几个pixel映射出来的texture都是一样的,也就是图像中的走样。解决办法很简单,就是进行双线性插值即可,如下图:
    games101 感悟笔记_第19张图片
    第二种情况比较麻烦,就是纹理过大,意思是一个pixel坐标映射到纹理图上其对应的pixel区域会对应(覆盖)好几个texture,这个时候就相当于一个pixel包含了好几个texture的信息,那么就会出现不知道该用哪一个texture映射到pixel上。如下图:
    games101 感悟笔记_第20张图片
    最左边就相当于刚刚讲的pixel精度太高,最右边就是精度太低,一个pixel所代表的区域有好几个texture。注意这里的蓝色坐标是pixel的中心坐标,阴影区域是pixel的实际区域
    那么mipmap方法的思想就是将这几个texture进行缩小,也就是进行平均,像128*128到64*64,这样缩小就相当于每个texture单位变大,变大到跟pixel一样的时候。就可以对应映射了。mipmap的做法是渲染前先对贴图做预处理,先存储一张图(假如是128*128texture的图),同时对边长为二次幂的正方形贴图,每次取其边长的一半,做新的分辨率更低的贴图,称为l层进行存储,在这个例子中就是存储了128*128(第0层)、64*64(第一层)、32*32、16*16、8*8、4*4、2*2和1*1,就如下图:
    games101 感悟笔记_第21张图片
    然后我们需要计算pixel的实际区域(注意pixel在屏幕上永远是一个不变的单位大小)在texture上是多大,怎么计算呢,就通过将pixel中心坐标以及它周围的pixel中心坐标映射到纹理图上,如下图:
    games101 感悟笔记_第22张图片
    然后计算在纹理图上到邻居坐标的距离,取一个最大值L,然后作为以pixel中心坐标为中心L为边长的正方形,正方形的区域就是实际pixel在纹理图上的区域。如下图:
    games101 感悟笔记_第23张图片
    接下来,由于这个区域包含了好几个texture,需要将纹理图降低精度,比如一个pixel对应了4个texture,那么就需要精度缩小2*2倍,对应到整张纹理图上面就是从128*128变成了32*32,正好mipmap存储了32*32的图像,这样就可以直接在这个图像里面找到对应大小和pixel一样的texture了。具体到数学公式上就是对L求log运算,得出的结果是几,就在第几层图像找对应的texture。(这个例子是2,就是第2层)。
    但是会有一个新的问题,万一算出来的结果不是整数,比如1.8层,那么就需要进行三次双线性插值来结果了。也就是先对第1层pixel对应texture的坐标和pixel中心坐标做一次双线性插值,注意这里因为是卡在了小数层,意味着pixel包含的texture肯定小于4个,也就是有的单位包含一部分texture,因为小数意味着需要缩小精度但是又不需要2倍那么大,这样的话就正好可以做一次双线性插值(有四个点,其中1-3个所代表的texture可能是不完全包含)。接着对第二层pixel对应texture的坐标和pixel中心坐标做一次双线性插值,这就很正常了,因为精度缩小过多会导致第一种情况,pixel的坐标对应到纹理上是小数,当然可以插值了。最后,再将两次插值的结果根据0.8这个小数进行第三次双线性插值,得到的结果就是最终1.8层的结果了。如下图:
    games101 感悟笔记_第24张图片
    这里我的理解是,双线性插值相当于大致进行一个texture平均,并不准确,两次平均再平均就有了一个过度缓和的插值。第一次平均让不完全包含的那块texture内容平均的权重变小,第二次平均就是把不完全包含的都看作包含了,相当于权重变大一点,这样一插值,就完美解决了包含一部分所带来的共享

Lecture 10

  1. 关于凹凸贴图的理解:通过改变几何体表面各点的法线,使本来是平的东西看起来有凹凸的效果,是一种欺骗眼睛的技术。Bump Mapping把各象素法线相关的信息存于一张Texture中,各象素的法线就是通过从这张Texture中Sample得到的信息,进行一定的计算得到。原本的Bump Mapping通过一张Height Map记录各象素点的高度信息,有了高度信息,就可以计算HeightMap中当前象素与周围象素的高度差,这个高度差就代表了各象素的坡度,用这个坡度信息去绕动法向量,得到最终法向量,用于光照计算。坡度越陡,绕动就越大。所以就有了下图:
    games101 感悟笔记_第25张图片
    后面才出现了法线贴图,直接用RGB颜色来代表法线的信息,就可以不用计算直接使用。详情见这篇文章

Lecture 15

  1. 关于辐射度量场:
    radiant Intensity:点光源在单位立体角方向上的光照强度
    irradiance:单位面积上所有的垂直方向是的光强的和。
    radiance:单位面积上单位立体角方向的光的强度。
    BRDF:说的就是用反射方向wr上的只考虑wi的光线下得到的radiation除以入射方向上wi的irradiance,算出一个比例,就可以应用所有入射方向光到这个单位面积的方向为wr的反射光的radiance了。
    games101 感悟笔记_第26张图片

games101 感悟笔记_第27张图片
这个式子分子就是反射方向上wr的radiance,也就是单位面积沿着wr(单位立体角)方向上的能量,加了个d是因为只考虑wi方向的入射光。分母是当前这个单位面积的irradiance但是只考虑wi方向,所以加了个d,也就是入射光线方向为wi对单位面积造成的irradiance。
注意:这里有一个误区,wi方向对单位面积造成的irradiance并不直接等于wi这个方向上在这个单位面积的光的radiance,因为还要乘上一个cosθ,原因是radiance的定义是下面这个式子,里面有cosθ
games101 感悟笔记_第28张图片
很容易推出w方向对单位面积造成的irradiance为:

在这里插入图片描述

最后对所有入射方向上的radiance都乘上这个比例,再求和就是这个单位面积在wr这个方向是反射光的radiance的总和了,最后就是下面这个积分式子。
在这里插入图片描述
H平方表示出射光线所在的半球:
games101 感悟笔记_第29张图片

Lecture 16

  1. 对于蒙特卡洛积分公式中除以pdf(x)的理解:
    games101 感悟笔记_第30张图片
    如果是均匀分布,就很好堆了,根据面积直接算具体见这篇文章。那如果是一般的情况,也就是非均匀分布,为什么要除以pdf呢,我的理解是原本我们对目标函数进行采样的目的是尽可能的遍历所有采样点,但是如果本身采样点不是均匀分布的而是按照某种概率密度函数分布,那么就存在概率大的点更容易随机出来,概率小的点很难随机出来,除以pdf(x)就相当于原本概率大的乘了一个小的数,概率小的乘了一个大的数(类似于权重调整),也就是将采样均匀化了

你可能感兴趣的:(计算机图形学,图形渲染)