现代计算机图形学入门-闫令琪-02

前言:一些读书笔记
引用闫令琪老师的课程内容,GAMES101,老师讲的很好,可以看原课程视频。

Rasterization

这节课主要顺着上面的内容继续讲的,上节课讲了如何将一个物体拍照,并且将其缩放到一个[-1,1]^3的立方块,这节课主要讲如何将这个立方块投放到屏幕上。

1)屏幕(光栅)
假设是一个像素的2维数组。
像素暂且认为是一个有着统一颜色的方块。
其中每个方块的中心为(x+0.5,y+0.5)。
数组的大小叫作分辨率。

2)立方到屏幕
1.忽略z轴。
2.把[-1,1]^2拉成[0,width]x[0,height]、
Mviewpoint =
3.图形学中经常使用三角形来划分,因为:
三角形是最基础的多边形。任意多边形都可以拆成三角形。
三角形是一个屏幕,内外部定义清晰,重心坐标插值方法。
4.拉伸以后,我们如何将左边的图变为像素数组呢?


我们要进行采样,将连续函数离散化。
于是,像素化的过程可以是:

for(int x = 0;x < xmax; ++x)
  for(int y = 0;y < ymax; ++y)
    image[x][y] = inside(tri,x+0.5,y+0.5);

这里inside是判断点是否在三角形tri的函数,用之前介绍过的叉乘的方法来判断。
5.与此同时,我们可以采用使用边界盒等方法优化,来加速判断的过程。

3)反走样
反走样是抽样导致的锯齿等。
1.傅里叶变换其实就是将函数分为不同频率的段,从时域到频域。
2.高频率需要更高次数的采样,否则会丢失信息。
3.滤波Filtering = 卷积 = 平均化
删去一些特定的频率内容。
高通滤波:只有高频率的信息可以通过。会得到边界信息。
低通滤波:只有低频率的信息可以通过。会得到模糊信息,边界信息会被模糊。
时域的卷积=频域的乘积。
4.减少走样的方法
A.提高采样率。
B.反走样:
采样前模糊(卷积后再采样),这样会使得模糊的区域颜色变浅了,采样后也会是这个颜色。先采样后模糊不行。
C.超采样:
MSAA(它的原理是增加计算量,原本4x4的像素块再细分下去每个像素块里有4个小像素块,先去判断小像素块是否在三角形内部,然后再判断大像素块中有几个小像素块在三角形内部,用这个比例乘颜色深度。)
FXAA (先得到一个有锯齿的图,再通过图像匹配的方法找到边界,再将其处理替换)
TAA(把MSAA应用在时间上,暂时保留上一帧的结果)
题外话:超分辨率方法(本质已经不是采样问题),它可以把低分辨率变为高分辨率。DLSS。

4)画家的算法
先画远处的东西,再画近处的,从而使得近处物体可以覆盖远处的。
缺陷在于:如果物体的深度并没有准确的顺序,这个算法就无法执行了。于是引入了Z-buffer算法。

5)Z-buffer
采用额外的缓存来存每个像素的最浅深度信息。(也即本来有frame-buffer存颜色信息,现在再多个Z-buffer存深度信息。)
z总是正的,越小表示离我们越近。
时间复杂度为O(n),因为每个三角形要遍历的像素可以看作为常数,n个三角形要遍历n次,所以是O(n)。
假设不同三角形不会存在相同的深度。

你可能感兴趣的:(现代计算机图形学入门-闫令琪-02)