第六讲:反走样
反走样导入
在MVP变化之后,有一个视口的变换,我们会把-1到1的三次方映射到屏幕上去,然后就涉及到了光栅化。光栅化就是把矢量图形转化成像素点的操作。其中最重要的思想就是我们要利用像素的中心对三角形可见性这个函数进行采样。
上一节课提到的三角形(简单的矢量图形),就是一种连续的信号。给定其中一个点,我们都可以测试是否在三角形内。当然,我们也可以判断某个像素中心是否在三角形内。因为我们认为像素是一个有着均匀颜色的小方块,然后我们就用像素的中心,来检测三角形中是否包含这个中心点,然后把对应的像素涂成红色或白色。
但是这就会带来一点问题:锯齿。
锯齿的学名叫走样(Aliasing),我们要做就是反走样。
什么是采样(Sampling)
采样是图形学中重要的一个过程。光栅化的过程其实就是函数(判断像素的中心点是否在三角形内)在屏幕空间内的一个采样。
当然除了光栅化,还有其他各种采样。如照片,它其实是所有感光元件将所在平面的光学信息离散成像素。除了不同的位置,采样也可以发生在不同的时间。如一个动画,其实就是在一段时间范围中进行的采样(帧)。其中的每一个帧其实都是在一个特定的位置上,自然不会是一个连续的过程。
所以,采样是广泛存在的。同样地,采样所带来的问题也是广泛存在的。采样带来的一些问题(Artifacts):
- 常见的锯齿
- 摩尔纹(不同位置)
- 车轮效应(时间)
如高速行驶的汽车轮子似乎在倒转。这是由于人眼在时间中的采样更不上实际的速度。用上面动画片的例子就很好解释。
前两个是因为时间,后两个其实是因为时间。这些问题产生的本质原因都是因为信号变化太快,以至于采样速度跟不上信号变化的速度。那这句话那该怎么解释呢?
在解释之前,首先了解一个反走样的思路:在采样之前,先做一个模糊(滤波)操作。
首先拿到一个三角形,如果按之前的操作,就会存在一个走样的问题。
但是如果我们先模糊操作,然后对这个模糊的三角形中的每一个中心点做