OpenGL ES 3.0 快速近似抗锯齿(Fast Approximate Anti-aliasing, FXAA)

OpenGL ES 3.0抗锯齿系列文档:

  • 多重采样抗锯齿Multiple Sample Anti-aliasing, MSAA
  • Coverage采样抗锯齿Coverage Sample Anti-aliasing, CSAA
  • 快速近似抗锯齿Fast Approximate Anti-aliasing, FXAA
  • 适配性抗锯齿Adaptive Anti-aliasing, AdaptiveAA

文档iOS OpenGL ES 3.0 数据可视化 2:平面数据可视化运用了多重采样抗锯齿。

本文档描述快速近似抗锯齿(Fast Approximate Anti-aliasing, FXAA)在OpenGL ES的具体实现,这属于后处理技术,可用于图像处理领域。FXAA在Ubuntu上测试比MSAA快25%左右,产生的结果图像质量差不多。实现过程也无需硬件支持,可在任何可编程管线GPU接口中实现。

多重采样MSAA虽可产生质量较好的渲染结果,性能却相对较差。MSAA及FSAA性能差的原因是渲染到高分辨率,比如4倍于原分辨率,再降采样到原分辨率,整个过程需要大量计算,从而降低性能。那么,为提高性能,避免渲染到高分辨率是值得考虑的,同时,抗锯齿的目的是模糊阶梯状区域,无论这些锯齿是因何产生,最终是希望其产生柔和的图像,至于非阶梯状区域,无需处理,FXAA就是这个思路的一种体现。FXAA抗锯齿的思想是进行边缘检测,按需进行模糊锯齿。

1、算法描述

  1. 边缘检测
  2. 计算模糊方向及长度
  3. 应用模糊算法淡化边缘锯齿

2、存在的优缺点

优点 缺点
无法实现时域抗锯齿
不依赖硬件 部分边缘可能检测不到
作为滤镜,适用于任何场合 边缘检测错误导致模糊错误
可指定区域进行边缘检测,提高性能 不同模糊处理误差较大

3、具体实现

3.1 检测X邻近像素

存在多种边缘检测算法,比如我之前尝试的Sobel Operator,但是需要考虑其耗时。检测X邻近像素,以更少的计算量得到相对较好的效果,多数FAXX实现都采用了这种处理。

需知道纹理大小。


参考及推荐阅读

  • OpenGL Game Rendering Tutorial: How FXAA works
  • OpenGL Game Rendering Tutorial: Implementing FXAA
  • glsl-fxaa

你可能感兴趣的:(OpenGL ES 3.0 快速近似抗锯齿(Fast Approximate Anti-aliasing, FXAA))