本页目录

【GAMES101】Rasterization

在2D屏幕上显示物体时,最终的图像是由一个一个像素构成的。光栅化需要解决的问题就是将连续的物体表示离散化。

为什么使用三角形

三角形在图形学中广泛应用,是因为其具有一些良好的性质:

三角形是最基础的多边形,任何其他的多边形都可以由三角形表示

三角形一定是平面图形

三角形的定义分明

采样

最朴素的想法是:对于一个像素,考虑它的中心点是否在给定的三角形内。如果在,像素值就为1,否则为0。如图:

img

判断一点是否在三角形内使用如下方法:

首先,来判断点在的哪侧,这可以由向量叉乘的符号得到,在右手系中这是一个指向屏幕外的向量。

img

根据这个原理,如果的符号相同,就说明点同时在三角形三条边的同侧,唯一的情况就是点在三角形内部。

对于下图所示情况,假如我们规定指向屏幕外为正方向,会发现符号为负,其余为正,不满足符号相等的条件,因此判断其在三角形外部。

img

采样的问题

采样的问题是会产生锯齿(jaggies),出现走样(aliasing)

反走样

反走样(Anti-Aliasing)也叫抗锯齿,核心的想法是先模糊,再采样。笼统的来说,这样做可行的原理是:直接采样效果不好是因为信号的高频部分超过了采样的频率。对于图像来说,高频的部分通常是边缘;如果能通过模糊充当低通滤波的操作,就可以改善因为采样频率不足带来的失真。

img

SSAA

超采样反走样(Super-Sampling Anti-Aliasing, SSAA)通过对每个像素取多次采样,直接提高了采样率;最后的结果是所有采样点颜色取平均。

img

MSAA

多重采样反走样(Multi-Sampling Anti-Aliasing, MSAA)是对SSAA的改进:MSAA不再对每个采样点进行单独的着色,而是对每个像素只执行一次着色计算,从而降低了计算量。

Z-Buffer

在这节我们约定为正数,且更小的值代表更近的像素点。

深度缓冲记录每一个像素的深度信息。当渲染三维场景时,将每个像素的深度值与Z-Buffer中相应位置的值进行比较,如果当前像素的深度值更小,则更新Z-Buffer中的值并将当前像素的颜色值渲染到屏幕上。

img