五分钟搞懂游戏开发中的抗锯齿算法
常见抗锯齿算法总结
- 锯齿由来
- 抗锯齿算法
- SSAA
- MSAA
- CSAA
- FSAA
- TAA
锯齿由来
场景的定义在三维空间中是连续的,而最终显示的像素则是一个离散的二维数组,这是计算机屏幕产生锯齿的原因。在计算机处理图形的过程中(渲染管线了解一下),有一个非常重要的阶段,就是光栅化,光栅化主要的作用是将顶点数据的不连续性通过插值计算,将两个顶点之间不存在的点进行弥补,然后实现到屏幕像素点上的一一映射。如图,现在要在屏幕上绘制一个三角形,我们就要判断屏幕上哪个点在三角形当中,然后将它绘制出来。
图中显示,有的像素点全部在三角形中,有的部分在其中,有的完全没在其中,但是在屏幕上绘制的时候却不能只绘制像素点的一部分,要么不绘制,要么就整个像素点都绘制。所以绘制完成就出现下面的锯齿情况:
抗锯齿算法
首先说明一下,抗锯齿算法应用于硬件,且在光栅化阶段执行。
锯齿的出现可以简单理解为像素精度不够,那么如何巧妙的提升像素精度呢?
SSAA
超级采样抗锯齿 (Super-Sampling Anti-aliasing),也叫SSAA,其原理比较好理解,就是直接“放大屏幕分辨率”。假设屏幕分辨率为800x600,那么4xSSAA会将屏幕渲染到1600x1200的缓冲区上,然后在下采样到800x600,SSAA可以得到非常好的抗锯齿效果,不过SSAA需要的计算量是非常大的,光栅化和片段着色器都是原来的4倍,渲染缓存的大小也是原来的4倍。4xSSAA就是放大4倍的意思。因为SSAA要浪费大量内存,因此基本没有大量应用。
MSAA
多重采样抗锯齿 (Multi-Sampling Anti-aliasing),MSAA是对SSAA的改进,放弃了扩大像素分辨率,使用多重采样的方式,既然有多重采样,就有“单重采样”,而传统的采样方式就可以理解为“单重采样”,当然并不存在“单重采样”这个东西了。姑且这样叫它。“单重采样”就是一个像素点与一个采样点进行对应,而“多重采样”则是一个像素点与多个采样点进行对应。如图:
看图就好理解了:此图是4MSAA,即一个像素点对应4个采样点,对于边界,我们根据其像素点包围的点数来计算其颜色值,比如边界像素点包含2个采样点,那么它最终的颜色就应该是本来的颜色2/4,同理,如果包含一个,就是颜色*1/4,最终 的效果如下:
这样看起来“圆滑”很多。其有点比较突出,效果也不错,但是
注意,它不适合延迟渲染,这里说的不适合并不是不支持,延迟渲染也能支持MSAA,但是支持他就会大量浪费空间
延迟渲染是什么,在这里不做过多介绍,总之他为了优化光照着色,需要一个GBuffer,这个就是临时渲染出的结果的缓存因为需要GBuffer,所以MSAA也需要进行临时保存,那么保存临时数据的后果则是浪费大量显存。
前面可知4x MSAA的显存消耗是4x的关系,假设我们按照2k的原生分辨率来做,一个RT就是64 MB,用来做MSAA的那个RT就会是不低于256MB。又因为GBuffer至少存depth,normal,basecolor3张RT,那三个MSAA RT就是768MB,这种消耗非常巨大,因此可以理解为“不支持”
CSAA
覆盖采样抗锯齿(Coverage Sampling Anti-Aliasing,简称CSAA)是NVIDIA在G80及其衍生产品首次推向实用化的AA技术,也是目前NVIDIA GeForce 8/9/G200系列独享的AA技术。CSAA就是在MSAA基础上更进一步的节省显存使用量及带宽,简单说CSAA就是将边缘多边形里需要取样的子像素坐标覆盖掉,把原像素坐标强制安置在硬件和驱动程序预先算好的坐标中。这就好比取样标准统一的MSAA,能够最高效率的执行边缘取样,效能提升非常的显著。比方说16xCSAA取样性能下降幅度仅比4xMSAA略高一点,处理效果却几乎和8xMSAA一样。8xCSAA有着4xMSAA的处理效果,性能消耗却和2xMSAA相同。
FSAA
FSAA(Fast Approximate AA)的核心思想是正常采样一个三角形,如果该三角形存在锯齿,则通过边缘检测查找出边界区域,然后使用没有锯齿的线段去替换有锯齿的边界,该方法和采样无关,因此速度很快。
TAA
TAA(Temporal AA),该方法的核心思想是复用上一帧渲染出的结果,并整合到本帧中,从时间上复用以前的计算结果,对于静止的图像优势明显。
参考:
https://www.zhihu.com/search?type=content&q=CSAA
https://zhuanlan.zhihu.com/p/71785353
五分钟搞懂游戏开发中的抗锯齿算法相关推荐
- 五分钟搞懂什么是红黑树
五分钟搞懂什么是红黑树(全程图解) 18-09-04 星925 + 关注 献花(2) 收藏 前戏 红黑树,对很多童鞋来说,是既熟悉又陌生.熟悉是因为在校学习期间,准备面试时,这是重点.然后经过多年的 ...
- 【《Real-Time Rendering 3rd》 提炼总结】(十一) 第十四章 : 游戏开发中的渲染加速算法总结
本文由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/78884513 导读 这是一篇1万3千 ...
- 【转载】【《Real-Time Rendering 3rd》 提炼总结】(十一) 第十四章 : 游戏开发中的渲染加速算法总结
本文由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/78884513 导读 这是一篇1万 ...
- 五分钟搞懂Xen、KVM、Qemu间的关系和区别
Aha,忽然发现我也是个标题党,十分钟搞定某某技能这种标题最吸引人了.当然我也不是华而不实,是不是干货,你读了才知道.话说,接触Xen这么久了,现在才花时间搞清楚这个问题,要不是需要给别人解释,还不知 ...
- 【五分钟读懂】PHP中的opcache是什么,opcache是用来干嘛的?
前言 opcache从字面意思,肯定是缓存这一块的.但是你是否知道它的工作原理是怎样的呢? 这里一点一点让你了解!PHP项目中,尤其是在高并发大流量的场景中,如何提升PHP的响应时间,是一项十分重要的 ...
- 五分钟搞懂什么是红黑树(全程图解)
红黑树(又叫平衡二叉树),对很多童鞋来说,是既熟悉又陌生.熟悉是因为在校学习期间,准备面试时,这是重点.然后经过多年的荒废,如今已经忘记的差不多了.如果正在看文章的你,马上快要毕业,面临着找工作的压力 ...
- 网盾极风云:五分钟搞懂HTTP和HTTPS
很多小伙伴每天都要用到http和https协议,但是却对他们一知半解,这篇文章将解开你的所有疑惑. HTTP 一般人们都能说出"HTTP是一种超文本传输协议(Hypertext Transf ...
- 新人必读!五分钟搞懂通信行业!
来自 鲜枣课堂 今天这篇文章,是「通信入门三部曲」的第三篇文章,也是最后一篇文章. 前两篇文章,给大家介绍了通信的基本理论(链接),还有移动通信的网络架构(链接).今天这篇会更实用一点,介绍一下&qu ...
- [刨根问底] 五分钟搞懂组合评价模型—模糊Borda (以2021 年大学生数模国赛C题为例)
组合评价模型-模糊Borda(Matlab) 我们的征途是星辰大海,而并非烟尘人间. 目录 组合评价模型-模糊Borda(Matlab) 一.模糊Borda法简介 二.模糊Borda法主要步骤 (1) ...
最新文章
- im和音视频开发哪个更好_如何阅读成为更好的开发者的方式
- oracle基本概念和术语
- 中国牙科用人工骨替代材料市场供需态势与未来投资方向分析报告2022年
- The 'Microsoft Jet OLEDB 4.0 Provider' is not registered on the local machine
- 深入了解数据人才 | 中国数据人才白皮书
- php实现java socket_php与java通过socket通信的实现代码
- 正则表达式学习笔记005--脱字符和美元符的认识与应用
- mysql 联合表(federated)及视图
- 容器技术Docker K8s 44 Serverless Kubernetes(ASK)详解-ASK弹性伸缩管理
- synchronized的实现原理用法详解
- 【测试】软件测试之测试用例的设计方法
- 试手 破解多开限制
- 关于在谷歌浏览器,vue-video-player 实现断点续播,currentTime不生效问题
- 高清格式——720p/1080i/1080p,谁更清晰
- 智能家居的应用研究现状
- 第四范式蒋仁皓:什么才是构建企业AI的关键要素
- 高德地图嵌入到threejs全景中的踩坑指南
- Windows和iPad传输
- android telnet服务器端,Android FTP客户端实现、Telnet客户端
- 如何将CAD图纸图形同比例缩小或者放大