zoukankan      html  css  js  c++  java
  • 多重采样反走样(MSAA)

    多重采样反走样(Multisample anti aliasing)技术,简称MSAA,是实时渲染中解决抗锯齿问题的一个常用方法。今天将对该算法的思想予以介绍。

    Aliasing

    想了解该算法的思想,就要首先明白锯齿是如何产生的。渲染中的锯齿又称走样(Aliasing),是渲染管线在进行光栅化时,由于屏幕像素的离散限制所产生的锯齿状边缘。举个例子,下图使我们在渲染一个三角形:

    对于每个像素,我们取它的中心点,根据中心点是否在三角形内来判断该像素是否渲染三角形。以这种方式来渲染的话,渲染结果就如下图所示:

    可以看到,对于三角形的斜边,因为屏幕像素并不是无限的,因此以这种方式渲染必然会出现锯齿状边缘。这就是Aliasing。

    SSAA

    超采样反走样(SSAA)是一种支持抗锯齿的方法。它的做法也很简单:假设我们的屏幕像素为800600,那么我们只需要将渲染的texture扩大4倍(16001200),然后再把相邻像素值做一个过滤(比如平均等)得到最终的图像就可以解决这个问题了。利用该方法确实可以从根本上消除锯齿,但是这种方法大大提高了存储空间和计算量,所以一般不会使用这种技术。

    MSAA

    后来人们提出了多重采样的方法。它的思路如下:
    对于每个像素,不要仅用一个中间点来判断三角形是否覆盖,而是取4个顶点来分别判断:

    左图是不采用MSAA的做法,那么这个像素就没有被三角形所覆盖。右图用四个均匀分布的点来判断,那么有两个点就被三角形覆盖了。
    下图是采用每像素4个点的三角形覆盖判断:

    在具体的计算中,对于每个像素,fragment shader只需要算一次。对每个采样点赋以颜色值,最终将四个采样点的颜色平均就可以得到像素的颜色。如下图所示:

    这样一来,就可以取到较好的抗锯齿效果。计算量不会有太大变化,但是存储量则要*4(因为多了四个采样点,每个采样点也要存颜色值)。
    下图展示了原始图像和运用了MSAA的图像,可以看到抗锯齿的效果还是比较明显的:

  • 相关阅读:
    5分钟机器学习
    快速排序
    数据预处理 总结
    正则化 / 特征选择
    424. 替换后的最长重复字符 sliding window中的注意点
    自然语言处理算法精讲P3
    76. 最小覆盖子串
    3.无重复字符的最长子串 —— sliding window
    自然语言处理算法精讲 P1
    18.四数之和
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/12766165.html
Copyright © 2011-2022 走看看