光栅化及反走样

经过MVP变换后,将需要绘制的模型都集中于[-1,1]^3中,下一步就是绘制到屏幕上。绘制到屏幕的过程叫做光栅化(判断屏幕像素是否处于三角形内,通过深度检测等将屏幕像素颜色确定)。

视口变换将投影空间转换到屏幕空间,此时只考虑xy坐标,视口变换的矩阵如下(屏幕宽高为width、height):

光栅化带来的走样问题

走样产生的原因

走样即一些错误的效果,如锯齿、摩尔纹等。

产生走样的原因:从频域角度分析:采样频率和函数频率有误差,如下图所示,采用相同的采样频率,实际函数频率越高(采样频率和函数频率相差越大),采样后的函数和实际函数效果越不一致

图形与频谱

任意图图像我们可以假定其拥有时域的信息,并且可以将其通过傅里叶变化转化到频域。

对于右边的频谱图来说,其中心代表低频,四周代表高频;可见低频信息相对比较多。十字形状的白色线是由于一般我们定义的时域函数都是连续的,所以将图形上下左右平铺后,图像边界处通常具有较大的改变,所以产生频率变化较大,所以出现白线。 

经过高通滤波后,图像如下所示,可以看到高频代表着图像中的边界处,这些信息显示比较明显

(是否可以用作描边技术?)

 

经过低通滤波后,图像如下所示,可以看到图像变模糊了,因为高频被滤除,边界信息不再明显。

 其实滤波可以理解为卷积、平均,所以可以通过平均的方式实现模糊的效果,即对每一个像素与其周围的像素做一个加权平均

 

 频域分析产生走样的原因

时域对一个信号进行采样,可以将其与冲激信号相乘。时域中的乘积就是频域中的卷积,所以频域中就是将信号与冲激函数卷积。如下图所示,可以看到在频域中实际上就是将原始信号进行搬移。

 不同的采样频率有对应不同的冲激函数(对应不同的搬移),当冲激函数频率过小的时候,频域中就会出现频谱混叠的现象,这就是走样的产生。

如何 解决走样也就比较明确了,我们可以增加冲激函数的频率,对应就是增加时域的采样间隔(频域与时域有很多相反的关系)。

 

对于去掉的部分,实际上是高频信号,因为对于频谱而言越外面的频率越高。

如何解决走样

原理明确之后,解决走样的方法从根本上可以通过增加采样频率解决,但是受限于物理条件,例如一个固定分辨率的屏幕,我们没法更改他的分辨率,即采样频率。如何解决走样问题呢?从频域分析,我们可以去掉产生频谱混叠那部分的高频信号,如下图:

先模糊、再采样可以解决走样的问题,因为模糊操作等于做了个低通滤波,即去掉了高频的信号,减少了信号重叠的情况。

但是先采样再模糊是不行的,因为在频域上,采样后频谱已经混叠了,此时再去掉高频信号,相当于是对走样的图像进行了一次模糊,效果是不正确的。

如何进行模糊

反走样可以通过模糊+采样的方式实现,接下来的重点就是如何进行模糊操作。

对于三角形的任何一个点,都用低通滤波器进行操作,即用一个box-filter对其进行平均操作,选用最简单一个像素大小的box-filter,对三角形的每一个点进行平均。即可以得到一个像素中三角形的占比,将占比与三角形颜色相乘得到最终的像素颜色。

 MSAA(MultiSampling Anti-Aliasing)

对于一个像素来说,假设将其划分成更多小的像素,称为超采样;通过2x2的超采样计算三角形占比如下图:

MSAA虽然增加了采样点,但是它为的是检测三角形在一个像素内的覆盖情况,也就是为了做模糊操作(虽然采样操作也隐藏在了里面),我们可以发现它其实并没有改变屏幕的分辨率,因此它不属于通过改变采样频率来实现反走样的操作。 

前面也说了使用MSAA增加了采样点,那么自然而然,计算量也就增加了很多。因此为了更好的性能同时能够实现反走样,也对MSAA进行了很多的优化。例如增加的采样点并不是均匀分布的,而是按照一定的规则摆放,或者有些采样点能够被复用等等。

FXAA(Fast Approximate Anti-Aliasing)

先得到带有锯齿的图,然后通过一些图像匹配的方法找到这些锯齿边界,然后将这些边界换成没有锯齿的边界。属于图像的后期处理。

时间抗锯齿,TAA(Temporal Anti-Aliasing)

将采样点从单帧分布到多个帧上,使得每一帧并不需要多次采样增加计算量。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值