游戏中的抗锯齿技术Anti-Alasing提炼总结

锯齿(走样,失真)产生的根本原因

图形学的根本过程是一个图形转化成图像的过程,该过程是一个连续信号经过采样转化成离散信号(显示设备的像素是离散的)的过程,之所以产生锯齿现象(失真,走样)就是因为信号的离散性被人眼识别出来。抗锯齿就是通过一些手段来重构丢失的信号。我们通常用的抗锯齿算法实际上是降低锯齿,并非消除锯齿。

  • 走样的两个来源:采样点的颜色信息丢失采样点的可见性信息(包括覆盖coverage和遮挡occlusion)丢失
  • 抗锯齿(复原信号)的根本方法:多采样(multi-sampling)和前置过滤(pre-filter)

抗锯齿算法的分类方法

  • 在管线前段(前向渲染),通过增加采样、以及利用深度信息精确在边缘进行抗锯齿的方法:SSAA、MSAA、CSAA(MSAA的优化版,五点采样)、RGSS(采样点旋转,非规则)等。
  • 在管线后段(延迟渲染)通过纯碎的后处理,即图形处理进行的抗锯齿算法:FXAA、MLAA、SMAA等。
  • 滤波器类型的抗锯齿:类似于图像处理中的图像恢复和抗噪技术(锯齿可以看作高频噪音),滤波算法有很多,例如:几何或算数均值滤波、中值滤波、适应性均值滤波等,区别主要取决于滤波器那个卷积算子的权重设计以及混合方式。注:这种滤波是在屏幕空间进行的,当然也可以走先进行边缘检测(拉普拉斯算子等卷积核),然后只在边缘进行滤波的优化路线。
  • 设计前置过滤器,将走样信息尽可能传递到管线后段,可能会对管线进行修改:NSAA,AGAA。
  • 时域上的抗锯齿(以上其他的都是屏幕空间的抗锯齿):temprial anti-alasing,TXAA。
  • 其他:基于深度学习的DLAA,实时抗锯齿。

简单粗暴的原始SSAA和MSAA,抗锯齿技术的地基

SSAA(Super Sample Anti-Aliasing),超级采样抗锯齿

  • 简单暴力的过度倍数采样来更高精度还原信号,4x,8x,16x等。
  • GPU的shader iteration mode分per pixel和per sample,如果使用SSAA则GPU会使用per sample模式。
  • 最后coverage mask降采样。

MSAA(Multi-Sample AntiAliasing),多重采样抗锯齿

  • 光栅化阶段计算遮挡覆盖信息并保存到二进制掩码中,颜色信息取自离像素中心最近的采样点的颜色,像素内深度测试失败的采样点不着色。
  • MSAA一般是由硬件支持的反走样(anti-aliasing,AA)技术,它在光栅化阶段在一个像素区域内对每个像素使用多个深度采样值,但是每个像素内的这些深度采样值共享一个着色计算,即是每个像素仍然只执行一次fragment shader的计算,然后计算的结果被复制到每个子深度采样点上,这样一个像素内深度测试失败的子采样点将不会包含颜色信息,从而能够更使最终的颜色过渡更平滑。
  • MSAA与SSAA的不同就在于MSAA的每个像素只执行一次着色计算(针对可见性,弱化颜色走样来源),因此比SSAA具有较大的性能优势,但是也因此MSAA不能处理由于着色计算中对函数(如高光)采样不足导致的走样(如Shader Aliasing),但是由于人眼对于几何边缘的敏感度更高于对颜色的敏感度,因此MSAA是一种相当受偏爱的技术。

https://www.cnblogs.com/ghl_carmack/p/8245032.html

这种超采样的抗锯齿方法都发生在管线前段,在延迟渲染中不支持。

##后处理类型的抗锯齿技术

FXAA(Fast Approximate Anti-Aliasing),快速近似抗锯齿

  • 偏经验性的一个算法,算法设计者都不知道为什么该算法抗锯齿会有效。
  • 存在后处理抗锯齿方法自身存在的不可避免的模糊问题,对像绒毛一类的复杂物体效果不好。
  • 主要根据luma亮度检测边缘,然后在边缘上进行抗锯齿操作;

http://blog.simonrodriguez.fr/articles/30-07-2016_implementing_fxaa.html

MLAA

MLAA的基本思路是:检测每帧图像上的边缘(通常可对亮度、颜色、深度或者法线进行边缘检测),然后对这些边缘进行模式识别,归类出Z、U、L三种形状,根据形状对边缘进行**重新矢量化(re-vectorization)**逆向还原原形状,并对边缘上的像素根据覆盖面积计算混合权重,将其与周围的颜色进行混合,从而达到平滑锯齿的目的。

SMAA(Subpixel Monorplogical Anti-Aliasing)

http://www.iryoku.com/smaa/

https://blog.csdn.net/qezcwx11/article/details/78426052

  • SMAA的核心原理来源于MLAA,边缘检测加入了对比度的考量。SMAA是结合MLAA和SSAA/MSAA各自的优点,减轻FXAA导致的模糊的后处理抗锯齿技术。
  • 边缘检测加入了对比度的考量;
  • 分成垂直方向和水平方向的锯齿。

比较

  • FXAA相比SMAA会更模糊,对比效果如下:https://images.nvidia.com/geforce-com/international/comparisons/just-cause-3/just-cause-3-anti-aliasing-interactive-comparison-001-smaa-vs-fxaa.html

新型抗锯齿技术

TAA/TXAA(Temporal Anti-Aliasing),时间反走样

英伟达设计的更高画质的抗锯齿技术。

https://zhuanlan.zhihu.com/p/24063209

https://docs.nvidia.com/gameworks/content/gameworkslibrary/postworks/util.html

https://zhuanlan.zhihu.com/p/20786650

https://developer.download.nvidia.cn/gameworks/events/GDC2016/msalvi_temporal_supersampling.pdf

  • 达到和SSAA的效果,只不过多采样是基于历史帧缓冲,从历史帧中采样,在像素范围内进行加权抖动。
  • 缺点是随着历史颜色的累积,会导致不可绝对消除的模糊(运动模糊),尤其在移动过快的镜头或物体情况下,会导致重影现象,尤其VR设备中此方法不适用。
  • 针对TAA的问题AGAA诞生,但是仍不成熟,对硬件要求高。

AGAA(Aggregate G-Buffer Anti-Aliasing),G缓冲增强反走样

  • AGAA采用MSAA的思路,只不过通过pre-filter聚合前置过滤器将MASS倍数采样导致G-Buffer内存过大的问题降低,将倍数的子采样点过滤到更少的聚集中。

NSAA(None-Sampling Anti_Aliasing),非采样抗锯齿

  • 特殊的针对可见性的分析型prefilter,边缘抗锯齿。
  • 不是应用与传统光栅华渲染管线的,新型管线,目前不太适用。

DLAA

。。。

总体上算法改进的思路:

  • 边缘检测,只在边缘进行抗锯齿(对比度适应)
  • 锯齿边缘形态模式识别,重新矢量化进行信息还原
  • 人眼对几何边缘的敏感度高于颜色
  • pre-filter前置过滤,减少直接倍数采样的内存过大问题
  • 在时域上采集历史帧信息进行超采样,减少超采样导致的内存过大问题

游戏中的抗锯齿技术Anti-Alasing提炼总结相关推荐

  1. 电影级高画质!3D游戏抗锯齿技术解析

    几乎无法区分的现实和虚拟 泡泡网显卡频道8月24日 近几年来显卡技术的发展速度可谓是突飞猛进,不仅仅是性能的提升,更多的新特效也令我们的游戏世界更加精彩更加逼真.近日人气明星姚晨在微博上发出一张水面照 ...

  2. Anti-Aliasing抗锯齿 SSAA MSAA FXAA三维游戏抗锯齿技术浅谈

    今天组里同学询问关于抗锯齿的问题,我尽量简化成人话方便理解. 关于抗锯齿的技术有很多种,有的基于硬件,有的则完全依赖算法计算.总的来说,锯齿是软硬件沟通差异导致的问题,是开发者最常见的问题之一. 实际 ...

  3. 图形学中的抗锯齿讨论以及在unity中的应用

    抗锯齿(Anti-Aliasing)是图形学中,很重要的一个部分.本文旨在做一些分析总结,并对平时不理解的细节,做了调研,但毕竟不是做GPU行家,所以有不对的地方,欢迎拍砖^^. 1 什么是锯齿 下图 ...

  4. 【技术美术图形部分】简述主流及新的抗锯齿技术

    电脑的世界里没有曲线,都是三角面组成一个个模型的,因此一定会出现走样(锯齿)的情况,只是严重与否的问题,而AA也是实时渲染最难解决的问题之一. Sampling&Artifacts Lectu ...

  5. games101 作业2 原创代码框架进阶版 MSAA4x抗锯齿技术学习

    用的库有opencv4.5.5 (vc15)和eign3.4.0 这篇的代码是在我上篇作业1的基础上魔改出来的,目的是为了实现MSAA四倍的抗锯齿技术和实心三角形的光栅化. #include<E ...

  6. 关于三角形重心坐标插值/锯齿/抗锯齿/延迟渲染中的抗锯齿问题

    我们都知道,在渲染流水线中,顶点着色器对输入的顶点数据进行处理(如顶点的坐标变换和光照计算)以后,GPU会进行进行齐次除法并将顶点从三维空间转换到二维的屏幕坐标,接着将这些所需要的着色数据发送到光栅化 ...

  7. 游戏中应用强化学习技术,目的就是要打败人类玩家?

    来源:AI前线 作者:凌敏 采访嘉宾:黄鸿波 2016 年,DeepMind 公司开发的 AlphaGo 4:1 大胜韩国著名棋手李世石,成为第一个战胜围棋世界冠军的人工智能机器人,一时风头无两.Al ...

  8. 游戏中的角色渲染技术之皮肤篇

    原文链接https://blog.uwa4d.com/archives/Usparkle_Skin.html 这是侑虎科技第253篇原创文章,感谢作者洛城供稿,欢迎转发分享,未经作者授权请勿转载.当然 ...

  9. 网易游戏人工智能实验室分享:游戏中应用的AI技术

    在2019网易游戏开发者峰会上,网易游戏人工智能实验室技术总监Weldon Zhang,分享了人工智能实验室在游戏AI上的探索和成果,对游戏中应用的AI技术进行了盘点. 总体来看,AI技术可以在游戏中 ...

最新文章

  1. JS小数点加减乘除运算后位数增加的解决方案
  2. linux+npm+v+报错_linux – npm install会导致像npm ERR这样的错误...
  3. 计算机网络实验(华为eNSP模拟器)——第七章 远程终端协议(远程登陆)
  4. Linux下软件安装和卸载
  5. idea看更改过的代码_就是你把所有代码全写在一个类里的?
  6. String实例化两种方式的区别
  7. oracle数据库监听频道异常,数据库监听不定期出现异常故障处理
  8. C++基础——用C++实例理解UML类图
  9. clamp.js 的使用---超出省略 (翻译)
  10. html5 前端js框架,前端h5框架总结
  11. java 前后端分离教程,Java web前后端分离
  12. Windows通过IP地址向对方发送信息
  13. html去除背景颜色怎么设置,word文档背景颜色怎么去掉,文档背景颜色怎么去掉
  14. Win10下Windows徽标键键盘快捷键大全
  15. python定量城市研究_Python定量城市研究实战
  16. 【同一电脑原win用户信息迁移到新Win用户下python interpreter显示 no interpreter问题】
  17. 智慧公路养护管理系统实现养护管理精细化
  18. linux 怎样安装 nginx
  19. 脚本:通过ssh、scp和expect批量复制文件到其它设备,已解决传输文件不完整的问题
  20. python我的世界脚本方块_ScriptBlockPlus下载

热门文章

  1. 有趣的HTML实例(七) 注册登录界面Ⅱ(css+js)
  2. Kafka 2.8.0 学习
  3. python实现excel表格按内容模块倒序排列
  4. 产品经理成长经历感悟
  5. UNR2 黎明前的巧克力
  6. 解决error ‘XXX‘ is not defined no-undef且项目没有eslintrc.js文件问题
  7. 《C语言程序设计》江宝钏主编-习题4-2-分段函数
  8. eslint报“Extra semicolon“错误的解决
  9. 小白css基础学习记之精灵图
  10. 下载 线代 薛威_考研线代李永乐真的首选吗?