MLAA:高效地将抗锯齿处理从 GPU 迁移至 CPU

下载文章和源代码

英文版下载 MLAA:高效地将抗锯齿处理从 GPU 迁移至 CPU (PDF 1.2MB)

访问 MLAA 示例页可下载源代码。

简介

高效的抗锯齿技术是进行高品质、实时渲染的重要工具。MSAA(多点采样抗锯齿处理)是目前使用的标准技术,但有一些严重的缺点:

  • 与延迟照明不兼容,后者在实时渲染中使用得越来越多;
  • 高内存和处理开销,这使其在一些流行平台(如索尼 Playstation* PS3*)上的使用受限 [Perthuis 2010]。这种开销还直接与渲染场景的复杂性关联;
  • 除非与阿尔法覆盖通道一起使用,否则无法对非几何边界进行平滑处理。

英特尔实验室开发的一项新技术形态学抗锯齿处理(Morphological Antialiasing,MLAA) [Reshetov 2009] 解决了这些限制。MLAA 是一种基于图像的后处理过滤技术,它可以标识不连续模式,并混合这些模式的相邻模式中的色彩来执行有效的抗锯齿处理。它是新一代实时抗锯齿技术的先驱,可与 MSAA 抗衡 [Jimenez et al., 2011] [SIGGRAPH 2011]。

此示例基于由 Reshetov 提供的基于 CPU 的原始 MLAA 实施,并进行了改进以大幅提高性能。这些改进包括:

  • 集成一种高效且易用的新任务处理系统,在英特尔? 线程构建模块(Threading Building Blocks,TBB)上实施。
  • 集成一种高效且易用的新管道传输系统,用于 CPU 图形任务装载。
  • 通过新转置通道改进数据存取模式。
  • 增加使用英特尔? SSE 指令以优化中断检测和颜色混合。

MLAA 算法

本节将概述 MLAA 算法的原理;请参阅 [Reshetov 2009] 了解详尽说明。从概念上说,MLAA 分三步处理图像缓冲:

  1. 查找指定图像中的像素间中断。
  2. 标识 U 形、Z 形和 L 形模式。
  3. 混合这些模式的相邻模式中的颜色。

第一步(查找中断)通过将每个像素与其相邻像素比较实现。横向中断通过将像素与其下方相邻像素比较进行识别,纵向中断通过比较像素与其右方相邻像素进行识别。在我们的实施中我们比较了颜色值,但适合应用程序特点的任何其他方法也完全有效。

第一步结束时,如果检测到中断,则相应的每个像素都会用横向中断标志和/或纵向标志进行标记。在下一步中,我们会沿标记的像素来确定中断线(标记有相同中断标志的连续像素序列),并确定它们如何组合成 L 形模式,如下图中所示:

图 1: MLAA 图像处理,图像具有左侧原始图像中所示的 Z 形、U 形和 L 形形状

第三步(即最后一步)是对每个标识的 L 形模式进行混合。

一般的想法是将 L 形形状主线段(下图中的水平绿线)的中点连接到次线段(垂直绿线)的中点(连线为红线)。连线将每个像素分成两个梯形;对于每个像素,对应梯形的面积确定混合权重。例如,在下图中,像素 c5 的梯形面积是 1/3;因此,c5 的新颜色计算方式为 2/3 *(c5 的颜色)+ 1/3 *(c5 下面相邻像素的颜色)。

图 2: 计算混合权重

在实践中,为了确保有平滑的轮廓外观,我们需要最大程度地减少连续 L 形形状结合位置的颜色差异。为此,我们根据结合点周围的像素颜色对中间位置周围的 L 形线段上的连接点进行细微调整。

原文链接:https://software.intel.com/zh-cn/articles/mlaa-efficiently-moving-antialiasing-from-the-gpu-to-the-cpu#

时间: 2024-10-08 04:45:30

MLAA:高效地将抗锯齿处理从 GPU 迁移至 CPU的相关文章

回击MLAA:NVIDIA FXAA抗锯齿性能实测、画质对比

PC游戏玩家肯定会对各式各样的AA抗锯齿技术非常熟悉,而今天本文的主角就是NVIDIA今年才推出的新型抗锯齿技术"FXAA". FXAA在某种程度上有些类似于AMD之前宣传的MLAA(形态抗锯齿),但远比后者低调,所以很多玩家可能还从来没听说过,但是如果你玩过<永远的毁灭公爵>或者<F.3.A.R>,应该会有所耳闻.今天我们就来实际测测多款显卡上的FXAA性能和画质表现,并将其与MLAA进行简单对比. 什么是FXAA? FXAA全称为"Fast App

抗锯齿技术简介

虽然3D图形渲染技术的飞速进步给我们带来了一次次的视觉震撼,电影级的画面早已经不是遥远的梦想,但电脑在计算3D画面时所出现的锯齿效果仍是不可避免的,这种效果在物体边缘最为明显.画面上那些跳牙咧嘴的锯齿每每令我们如蟹在喉,不吐不快.为了消除这些碍眼的锯齿,抗锯齿技术应运而生,并在图形处理技术不断发展的推动下日趋成熟和完善. 1. FSAA抗锯齿技术 最早的抗锯齿技术来自于3DFX,名为FSAA (FuliSceneAnti-aliasing,全屏抗锯齿).我们都知道,画面的分辨率越高,锯齿感就越不

SSE图像算法优化系列二十四: 基于形态学的图像后期抗锯齿算法--MLAA优化研究。

偶尔看到这样的一个算法,觉得还是蛮有意思的,花了将近10天多的时间研究了下相关代码. 以下为百度的结果:MLAA全称Morphological Antialiasing,意为形态抗锯齿是AMD推出的完全基于CPU处理的抗锯齿解决方案.对于游戏厂商使用的MSAA抗锯齿技术不同,Intel最新推出的MLAA将跨越边缘像素的前景和背景色进行混合,用第2种颜色来填充该像素,从而更有效地改进图像边缘的变现效果,这就是MLAA技术. 其实就是这个是由Intel的工程师先于2009年提出的技术,但是由AMD将

OpenGL核心技术之抗锯齿

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 抗锯齿问题在游戏中一直存在的,尤其是体现在3D模型上的材质或者游戏UI界面上,由于现在引擎都非常完善,并且引擎都提供了抗锯齿功能,我们通过引擎提供的参数界面设置一下就可以消除.但是很

GPU抗锯齿

抗锯齿(Anti-aliasing):标准翻译为"抗图像折叠失真".由于在3D图像中,受分辨的制约,物体边缘总会或多或少的呈现三角形的锯齿,而抗锯齿就是指对图像边缘进行柔化处理,使图像边缘看起来更平滑,更接近实物的物体.它是提高画质以使之柔和的一种方法.如今最新的全屏抗锯齿(FullSceneAnti-Aliasing)可以有效的消除多边形结合处(特别是较小的多边形间组合中)的错位现象,降低了图像的失真度.全景抗锯齿在进行处理时,须对图像附近的像素进行2-4次采样,以达到不同级别的抗锯

未来抗锯齿,FXAA/TXAA

前言:未来抗锯齿,FXAA/TXAA回顶部 [PConline 应用]在3D图像中,我们不可避免的遇到"锯齿".锯齿是由于受到显示设备分辨率和图像生成原理制约,不可避免的会出现的一种图像失真现象,具体表现为画面中物体的边缘呈现出直角的锯齿状.为了获得更好的视觉体验,让物体边缘看起来更柔和.自然,需要进行消除锯齿(Anti-Aliasing,简称AA)处理. 未来抗锯齿技术的方向:FXAA/TXAA 虽然抗锯齿了,但是模糊了 虽然FSAA全屏抗锯齿技术十分成熟,但是无论怎样发展,是不能够

基于图片的抗锯齿方法(一)

目前为止,MSAA仍是抗锯齿效果的黄金标准.然而MSAA需要硬件支持,并且要在RT中存放子像素信息,这大大增加了内存和带宽开销.在使用HDR管线或者G Buffer时此问题显得更加严重. 由于这些限制,基于后处理的抗锯齿方案逐渐成为主流.这类方案并不需要改变渲染管线,而是在图片中寻找被人眼识别为锯齿的像素,再对应模糊处理.morphological antialiasing(MLAA)即是其中之一. MLAA的思路很简单,考虑锯齿图中的一个微元,它常常是下图中B的样子.而如果分辨率无限加大,可以

移动端canvas抗锯齿

未抗锯齿效果图: 加入抗锯齿代码效果: var Game = function(){ var H = document.documentElement.clientHeight || document.body.clientHeight; var W = document.documentElement.clientWidth || document.body.clientWidth; this.canvas = document.getElementById("canvas"); t

OpenGL中的抗锯齿技术

计算机通过离散(不连续)的像素来绘制图形,想象一下,真实世界中,我们画直线,是比连续画的,还是一个点一个点画的?计算机就是一个点一个点画的(很小的矩形).这样就会导致绘制的图形走样(锯齿),消除锯齿的技术就叫反走样(抗锯齿) 可以看这篇:http://blog.csdn.net/mikewolf2009/archive/2009/08/18/4460421.aspx 点示例 当点很大时,显示如下 而我们实际想看到的是一个圆点,而不是矩形 启用抗锯齿后的效果 有点圆了 代码 glPointSize