抗锯齿之几何抗锯齿

何为抗锯齿?且看下图
图一
在这里插入图片描述
图二:
在这里插入图片描述

我们小时候都用过锯子锯柴火,锯子是一块铁皮,铁皮的两边都是一块块像毛刺一样的铁片,就用这些铁片来锯柴火。上图是不是有点像锯子呢,所以我们形象的称为锯齿,那上图的情况又是怎么出现的呢?
首先上图就是四个顶点,只是连接四个顶点的时候,发现这个矩形是斜着的,矩形要在显示器上展示,就需要有颜色,矩形根据四个顶点可以确定大小,根据四个顶点的颜色,可以进行插值,算出这个矩阵的颜色!何为矩形的颜色?矩形的颜色就是以屏幕小格子为单位来计算的,矩形的显示也都是用像素小格子来表示的,光栅化的时候会根据四个顶点栅出更多片元,这些片元就是屏幕小格子。矩形在边界处包围的像素格子是不均匀的,有的在内部大一点,有的在外部大一点,不管在外部大还是在内部大,如果不特殊(抗锯齿)处理的话,都会使用采样的颜色,就是每个像素格子插值出来的颜色,你比如上图都是黑色,纯色锯齿现象特别明显,就是因为边界处经过的物理像素格子太靠外了,这样的情况也不连续,所以就出现了一段段的锯齿现象。为了解决这个问题,出现了抗锯齿技术,其实抗锯齿技术主要就是边缘模糊化。
何为边缘模糊化?
如果有一个物理像素格子只有一部分被我们的三角形包围了,那他的颜色就不能完全是当时插值出来的颜色,我们的差值之前是以实际物理像素进行插值的,比如说两点之间的颜色范围是10-110,那中间的物理像素格子的颜色应该是50,如果正常采样,无论这个像素格子被三角形包围多少,这个物理像素格子的颜色都是50,这样就可能早成锯齿?作为一个正常人来说,对于这样的理解是不正常的,凭啥呀,不应该根据占据的比例进行颜色分配吗?OK,是的,这就是边缘模糊,这就是抗锯齿,即根据物理像素格子所占据的多少进行颜色分配,这样造成的结果是,外界暴露的越多,不做抗锯齿那锯齿现象越严重,如果做的话那当前物理像素格子所应该填充的颜色相对于原来的颜色就越少,这样看上去颜色就好像被稀释掉了,进而产生模糊的效果
常见的抗锯齿技术有哪些?
SSAA:超级采样,这个就牛逼了,效果最好,但太消耗性能了,狂吃显存和CPU计算,它的原理就是提高分辨率
原本光栅化的时候,是按照屏幕的物理像素为标准进行的,那它是提高了光栅化的目标分辨率,产生更多的片元,最后在快要进行写入颜色缓冲的时候,进行分辨率的下降,即降为正常的屏幕分辨率,只考虑那些被三角形包围的片元,对他们的颜色进行累加进而算出一个屏幕物理小格子的最终颜色,这里举个例子,假设我们开了4XSSAA抗锯齿,那么分辨率就相当于提高了四倍,片元的数量也会提升4倍,最后在写入颜色缓冲的时候,才会将分辨率,一个真实的物理像素格子需要四个片元的颜色来填充,计算的时候,只会去计算被三角形包围的时候片元,将他们的颜色进行累加,最终算出物理小格子的颜色,写入颜色缓冲。
这里有几个需要注意的地方,正常的光栅化是按照屏幕的分辨率进行的,但这只是一个选项,我们可以升降分辨率,你可以理解为这是一个开关,之前是1:1,那现在可以n:1,其他的操作都是正常不变的
片元着色器,逐片元操作(各种测试,混合),分辨率是否升降,写入缓冲(颜色,模板,深度)
我们虽然提升了分辨率,但是一个物理像素格子对应的格子数是固定的,如果提升后的格子数完全被三角形包围的话,那将分辨率以后,颜色也没有变化,我们生分辨率只是将物理像素格子的颜色平均分配到各个小的采样点里,正常情况一个采样点就是一个物理像素格子,升分辨率以后,就是一个物理像素格子对应n个采样点

MSAA:由于SSAA是对整个目标进行升降分辨率,这个太消耗性能了,所以msAA诞生了,这个也是在光栅化阶段进行分辨率的升降,只是这个只对边缘像素升降,何为边缘像素,由于GPU能识别的最牛逼的图形就是三角形,所以边缘像素就是三角形边缘的像素啊,还有一个很大不同,就是光栅化结束以后,就立即进行将分辨率了,对于那些暴露在边缘部分的格子,进行均值处理,就是说我提高了分辨率,一个正常的物理像素格个有几个小采样点被包围,那这个物理像素格子的颜色就是插值的颜色乘以这个比例,举个例子,你比如说你开了4xmsaa,哪一个物理像素格子就对应四个采样点,如果采样点有1个被包围,那就是color*(1/4),由于在进行片元着色器以前分辨率就下降了,所以后边的计算就正常了,片元也只进行一次着色,一次逐片元,一次混合。。。所以性能还是挺好的
这里也有一点要说明,边缘像素指的是三角形的边缘,一个模型往往有非常多的面,每个面都是一个三角形

FXAA:未完待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值