700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > [GAMES101]现代计算机图形学课程总结2:光栅化和反走样

[GAMES101]现代计算机图形学课程总结2:光栅化和反走样

时间:2021-06-04 15:35:30

相关推荐

[GAMES101]现代计算机图形学课程总结2:光栅化和反走样

文章目录

屏幕空间GAMES101的屏幕空间约定标准立方体到屏幕的变换光栅化光栅显示器光栅化Rasterization定义三角形-基础的形状图元,使用三角形的优点采样(Sampling)采样一个函数就是求某个点的函数值采样是图形学的核心概念光栅化是采样2D位置检查屏幕中所有像素太浪费!使用包围盒优化真实显示设备中的光栅化走样和反走样图形学中的采样Artifacts走样(Aliasing)的背后原因反走样(Antialiasing)的方法背后的原理傅里叶变换傅里叶变换将一个信号分解成一系列频率走样产生的原因更高的频率需要更快的采样降低采样频率造成走样走样的定义何谓滤波频域图:图片的频率的可视化高通滤波:只去除低频部分(从而得到图像内容的边界-变化大的部分)低通滤波:去除高频部分(模糊)滤波=卷积(=求平均)卷积定理采样和频率采样=重复频率或者说重复频域上的内容走样=不同的频谱发生了混叠反走样如何减少走样错误如何做模糊但是只有一个像素,如何求平均值?MSAA其他的AA方法超分辨率(Super resolution)

屏幕空间

GAMES101的屏幕空间约定

原点在屏幕矩形的左下角像素坐标使用(x,y)(x,y)(x,y)的形式,x和y都是整数像素坐标的范围从(0,0)(0,0)(0,0)到(width−1,height−1)(width-1, height-1)(width−1,height−1)像素坐标(x,y)(x,y)(x,y)对应的像素的位置为(x+0.5,y+0.5)(x+0.5,y+0.5)(x+0.5,y+0.5),即像素位于坐标格的中心屏幕覆盖的范围是(0,0)(0,0)(0,0)到(width,height)(width, height)(width,height)

标准立方体到屏幕的变换

忽略z坐标将xy平面中的[−1,1]2[-1,1]^2[−1,1]2变换到[0,width]∗[0,height][0,width]*[0,height][0,width]∗[0,height]

其实就是简单的缩放加平移,是一个仿射变换:

光栅化

光栅显示器

示波器,CRT显示器,LCD, LED,墨水屏等等

光栅化Rasterization定义

光栅化就是绘制到光栅显示器上

三角形-基础的形状图元,使用三角形的优点

最基础的多边形保证共面很好判断点是否在其内部(叉积)三角形顶点之间插值方法很好做(重心坐标插值)

采样(Sampling)

采样一个函数就是求某个点的函数值

通过采样可以离散化(discretize)一个函数

采样是图形学的核心概念

可以采样时间(1D)采样面积(2D)采样方向(2D)采样体积(3D)

光栅化是采样2D位置

Sample If Each Pixel Center Is Inside Triangle

光栅化是在2D屏幕内使用像素坐标对一个函数进行采样,这个函数就是像素中心是否在三角形内部:inside函数

检查屏幕中所有像素太浪费!使用包围盒优化

真实显示设备中的光栅化

走样和反走样

图形学中的采样Artifacts

Jaggies(锯齿):空间采样的Artifacts摩尔纹:降采样图片的ArtifactsWagon wheel effect(车轮效应): 时间采样的Artifacts

走样(Aliasing)的背后原因

信号变化太快(频率高),但是采样的太慢

反走样(Antialiasing)的方法

采样之前先进行模糊(先过滤)

Blurring(Pre-Filtering) Before Sampling

背后的原理

傅里叶变换

使用一组sin或cos函数的加权和来表示一个函数

傅里叶变换将一个信号分解成一系列频率

上图中,函数经过傅里叶变换从时域变换到频域。

走样产生的原因

更高的频率需要更快的采样

降低采样频率造成走样

上图中,蓝色的高频信号,但是由于采样频率过低,采样点看上去是黑色的低频信号所产生。

走样的定义

Two frequencies that are indistinguishable at a given sampling rate are called “aliases”.

两个不同的频率在一个给定的采样率下无法区分,称为“走样”。

何谓滤波

滤波就是将特定的频率删掉

频域图:图片的频率的可视化

通过傅里叶变换将图形从时域变换到频域

频域图中,中心为最低频区域,四周为高频区域。不同频率上有多少信息通过亮度来表示。图中的十字线是因为做频域分析时,信号是周期性的,而图形并不是周期性的,所以将图像在水平和竖直方向上平铺,由于大多数图片左边和右边,上边和下边是不连续的(四方向连续的图除外),因此平铺时会在交界处产生剧烈的信号变化,从而会产生极其高的高频。

高通滤波:只去除低频部分(从而得到图像内容的边界-变化大的部分)

低通滤波:去除高频部分(模糊)

滤波=卷积(=求平均)

卷积定理

时域上对两个信号进行卷积对应了频域上两个信号的乘积,反之亦然

因此进行卷积有两个方法:

1)直接在时域上进行卷积过滤

2)通过傅里叶变换将信号从时域变换到频域;在频域上将信号和傅里叶变换之后的卷积核相乘;再将信号通过逆傅里叶变换转换回时域

卷积核越大,过滤的频率越低(比如21x21的卷积核就别3x3的卷积核对应的低通滤波器更低频,从结果上说更模糊)

采样和频率

采样=重复频率或者说重复频域上的内容

上图中,左边是时域。(a)为时域上的原始信号,©是一个采样函数,这个函数只在特定的位置有值(称为冲击函数),在时域上使用©乘(a)得到采样后的离散的点(e)。右边是频域,(b)为(a)经过傅里叶变换得到的频谱,(d)是冲击函数经过傅里叶变换,得到的还是一个冲击函数,但间隔不一样。由于时域上的乘积就是频域上的卷积,因此使用(d)卷积(b),最后得到(f)为采样后的信号的频谱。从图中可以看出,采样就相当于将原始信号的频谱复制了很多份。

走样=不同的频谱发生了混叠

由于不同的采样频率会使得频域上采样函数(冲击函数)的间隔不一样,当间隔小时(对应了采样频率低),复制的频谱就会发生混叠,混叠处就产生了走样。

反走样

如何减少走样错误

方法一:提高采样率

本质上是增加傅里叶域中复制的频谱的间隔。

需要更高分辨率的显示器,传感器和frame buffers。

代价高。方法二:反走样(Antialiasing)

先把信号的高频信号去除,再做采样。(即先做低通滤波,即先做模糊)

即在傅里叶域上复制之前先将频谱变窄,这样复制后就可以避免混叠。

如何做模糊

使用低通滤波器(卷积核)对图像进行卷积就可以让图像模糊。对于反走样,我们使用1个像素大小的低通滤波器:

自己的理解:为什么是一个像素的低通滤波?如果是较大的滤波器会过滤到更大范围的频率的信号。而我们希望过滤掉最高频的信号(也就是图像边缘),图像边缘信号频率变化最大,造成走样,所以要过滤掉。而大的卷积核一般是特意要做图像模糊使用的,比如高斯模糊效果。对于反走样,1像素的正好。

但是只有一个像素,如何求平均值?

通常的卷积操作要计算卷积核范围内多个像素的平均值。但是我们做反走样只有一个像素,怎么求平均呢?和谁平均呢?这里其实是要看这一个像素内部有多少面积被三角形覆盖。要将像素内部分解成很多的子像素,比如2x2共4个,然后对这些子像素是否在三角形内进行inside函数计算的结果取平均值。但是要注意,采样仍然只采样像素中心位置。因此光栅化三角形时的inside函数不再仅仅返回0或1了,而是会返回这个像素被三角形覆盖的面积(像素边长为1)。

MSAA

以上说的都是MSAA方法,MSAA并没有增加采样率,它只是使用子像素来计算像素被三角形覆盖的百分比,一个像素仍然只采样一次,采样位置为像素中心。在工程上来说,MSAA对于一个像素只计算一次颜色(pixel shader),然后根据三角形覆盖百分比来算最终的颜色。而SSAA(超级采样)就是用更多的子像素进行采样,然后计算平均值。

其他的AA方法

FXAA (Fast Approximate AA): 快速近似反走样,是通过后期处理的方法,针对已经产生了走样(锯齿)的光栅化结果,将边缘(锯齿)部分提取出来并替换为没有走样的边缘。速度很快。该方法和采样无关,是在图像层面上抗锯齿。TAA (Temporal AA): 时间反走样。对于静止的图像,每一帧使用不同的子像素位置来感知像素是否在三角形内,然后将当前帧和前一帧的感知结果进行平均。相当于把MSAA的样本分布在时间上。

超分辨率(Super resolution)

将低分辨率的图拉大到高分辨率,会有锯齿。和AA类似,都是要解决样本不足的问题。DLSS(Deep Learing Super Sampling)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。