离近仔细观察立方体的边缘,会发现模型边缘有锯齿的情况。这些锯齿边缘(Jagged Edges)的产生和光栅器将顶点数据转化为片段的方式有关。

光栅器是位于最终处理过的顶点之后到片段着色器之前所经过的所有的算法与过程的总和。光栅器会将一个图元的所有顶点作为输入,并将它转换为一系列的片段。顶点坐标理论上可以取任意值,但片段不行,因为它们受限于你窗口的分辨率。顶点坐标与片段之间几乎永远也不会有一对一的映射,所以光栅器必须以某种方式来决定每个顶点最终所在的片段/屏幕坐标。


这里我们可以看到一个屏幕像素的网格,每个像素的中心包含有一个采样点(Sample Point),它会被用来决定这个三角形是否遮盖了某个像素。图中红色的采样点被三角形所遮盖,在每一个遮住的像素处都会生成一个片段。虽然三角形边缘的一些部分也遮住了某些屏幕像素,但是这些像素的采样点并没有被三角形内部所遮盖,所以它们不会受到片段着色器的影响。

你现在可能已经清楚走样的原因了。完整渲染后的三角形在屏幕上会是这样的:

由于屏幕像素总量的限制,有些边缘的像素能够被渲染出来,而有些则不会。结果就是我们使用了不光滑的边缘来渲染图元,导致之前讨论到的锯齿边缘。

Multisampling

多重采样抗锯齿(Multisample Anti-aliasing, MSAA)真正的工作方式是,无论三角形遮盖了多少个子采样点,(每个图元中)每个像素只运行一次片段着色器。片段着色器所使用的顶点数据会插值到每个像素的中心,所得到的结果颜色会被储存在每个被遮盖住的子采样点中。当颜色缓冲的子样本被图元的所有颜色填满时,所有的这些颜色将会在每个像素内部平均化。

简单来说,一个像素中如果有更多的采样点被三角形遮盖,那么这个像素的颜色就会更接近于三角形的颜色。

如果我们想要在OpenGL中使用MSAA,我们必须要使用一个能在每个像素中存储大于1个颜色值的颜色缓冲(因为多重采样需要我们为每个采样点都储存一个颜色)。所以,我们需要一个新的缓冲类型,来存储特定数量的多重采样样本,它叫做多重采样缓冲(Multisample Buffer)

glfwWindowHint(GLFW_SAMPLES, 4);
// 现在再调用glfwCreateWindow创建渲染窗口时,每个屏幕坐标就会使用一个包含4个子采样点的颜色缓冲了。GLFW会自动创建一个每像素4个子采样点的深度和样本缓冲。这也意味着所有缓冲的大小都增长了4倍。
glEnable(GL_MULTISAMPLE);

OpenGL - Anti Aliasing相关推荐

  1. Learn OpenGL Anti Aliasing

    超采样抗锯齿(Super Sample Anti-aliasing, SSAA):使用比正常分辨率更高的分辨率(即超采样)来渲染场景,当图像输出在帧缓冲中更新时,分辨率会被下采样(Downsample ...

  2. OpenGL 抗锯齿Anti Aliasing

    OpenGL抗锯齿Anti Aliasing 抗锯齿Anti Aliasing简介 多重采样 OpenGL中的MSAA 离屏MSAA 多重采样纹理附件 多重采样渲染缓冲对象 渲染到多重采样帧缓冲 自定 ...

  3. 第二十三课,抗锯齿(Anti Aliasing)

    Anti Aliasing(ˈænti ,ˈeliəsɪŋ )反走样 文章目录 超采样抗锯齿(Super Sample Anti-aliasing, SSAA) 多重采样抗锯齿(Multisample ...

  4. Anti aliasing 抗锯齿 后期处理系列5

    Anti aliasing 抗锯齿 本文档主要是对Unity官方手册的个人理解与总结(其实以翻译记录为主:>) 仅作为个人学习使用,不得作为商业用途,欢迎转载,并请注明出处. 文章中涉及到的操作 ...

  5. Learn OpenGL 笔记5.11 Anti Aliasing(抗锯齿)

    这种清晰地看到边缘组成的像素结构的效果称为锯齿. 有很多称为抗锯齿技术的技术可以通过产生更平滑的边缘来对抗这种锯齿行为.(小时候打开一个新游戏,第一件事情就是把抗锯齿给关了,开抗锯齿太卡了) 起初,我 ...

  6. 关闭Anti Aliasing 的情况下单独对3D模型抗锯齿

    公司的Unity 2.5D游戏,场景基本上都是2D Sprite铺成的,但主角是3D的,不开MSAA的话,3D主角锯齿特别明显,开MSAA的话帧数下降的厉害,所以尝试着对主角单独做了处理. 解决方案: ...

  7. Unity 抗锯齿Antialiasing

    直接放到相机上用即可,可以有效降低锯齿(相对于其他插件而言),另外这个脚本跟NatCorder录制视频冲突,具体原因后续再详查. 最近突然发现PC端用Antialiasing修改窗口分辨率时会黑屏,后 ...

  8. OpenGL完整教程专栏完整目录

    OpenGL完整教程专栏完整目录 专栏说明如下 专栏目录 专栏说明如下 内容:OpenGL完整教程 数量:314篇博文(2023年2月15日截止) 更新时间至:2023年2月15日(后续加上去的博文, ...

  9. ogre研究之第一个程序(二)

    接续(一) 首先,我们要分析的就是Root类,使用Ogre的程序所需要作的第一件事情就是实例化一个Root对象.如果没有这个对象,你就无法调用(除了日志管理以外)的任何一个功能.Root类的构造函数接 ...

最新文章

  1. 大数据与智能算法(一-基础技术)-SMU在线学习笔记
  2. AJAX ControlToolkit学习日志-ResizableControlExtender(23)
  3. Spring 为啥默认把 bean 设计成单例的?
  4. 标准模板库(STL)学习指南之set集合
  5. SqlMap常用参数(一)
  6. 计算机统计知识,计算机知识在统计工作中的重要性
  7. udp组播的应用场景
  8. 作为Java开发工程师,如何高效优雅地编写接口文档
  9. 吴恩达机器学习ex5:正则化线性回归和方差与偏差
  10. 【C语言】 分享几个简单的代码
  11. nmap输出xml转换htm方法
  12. 移动web前端开发注意事项
  13. Linux下cuda卸载
  14. [转载]通过插件支持,Geronimo 提供了 one-click 升级
  15. 华为计算机的隐藏应用程序,华为平板5怎么隐藏软件 荣耀5平板怎么隐藏应用程序?...
  16. 名帖128 成亲王 楷书《心经》册
  17. october cms-官方文档-ajax
  18. .podSpec文件相关知识整理
  19. Android自定义控件之圆形头像
  20. 基于WEB 的实时事件通知方案

热门文章

  1. MIPS指令译码器设计
  2. vue3仿美团项目(2)-vant和阿里巴巴图库使用
  3. HMM学习笔记2 隐马尔科夫模型与前向算法
  4. Matlab中消除图像噪声之中值滤波器:medfilt2
  5. QGIS经纬度坐标转投影xy
  6. 陆奇:人工智能核心需要数据 中国远远多于任何国家 | Gartner预测:2025年,人工智能将创造200万个新增就业机会
  7. Java数组和冒泡排序
  8. 做多媒体课件的一些想法
  9. C语言实现状态机(一)
  10. 易基因:NAR:ChIP-seq等揭示蛋白质酰基化与c-di-GMP协同调控放线菌发育与抗生素合成机制|项目文章