本节内容

  1. 反走样
    采样理论
    图形学中怎么实现反走样

  2. 遮挡与可见性

采样造成走样的本质:
信号的变化太快了,以至于采样的速度跟不上变化的速度。

反走样的方法

1、在采样前做模糊操作,然后再去采样。


结果反走样之后的效果:

对于先采样后模糊的操作(顺序与反走样相反)我们称之为Blurred Aliasing,即把走样后的图像进行了模糊操作。这样处理的图片并不清楚。

理解频率

傅里叶级数展开:任何一个周期函数都可以写成一系列正弦和余弦函数的线性组合以及一个常数项

从f(x)=A/2(最低的频率)开始,每次不断地向式子中加入一些正余弦函数,然后画出新的图像,会发现当加入的项越多时,整个f(x)函数的图像越接近于原始的那个像城墙一样的原函数。

说明任何一个函数都可以使用傅里叶变换(图像也不例外)

走样的概念

High-frequency signal is insufficiently sampled: samples erroneously appear to be from a low-frequency signal
高频信号采样不足:采样错误地显示为低频信号

Two frequencies that are indistinguishable at a given sampling rate are called “aliases”
在给定的采样率下不能区分的两个频率称为“走样”。

滤波

是将信号中特定波段频率滤除的操作,是抑制和防止干扰的一项重要措施。

右边是左图经过傅里叶变换后的频域,越靠近中心代表频率越低,越靠近外侧代表频率越高,白线是因为图像边界引起的。(这里的频率是指 图像颜色变化的激烈程度)

中间很亮代表该图像有很多一大块一大块的色块,各个像素点之间的颜色变化并不明显,只有人物边缘部分的像素变化明显一点。

高通滤波(抹除低频信号,高频信号可以通过)


可以看到摸出低频信号后图像只保留了轮廓信息(高频信息)。这种滤波叫做高通滤波

低通滤波:(抹除高频信号,低频信号可以通过)


低通滤波 去掉了高频信息,即细节信息,留下的低频信息代表了概貌。常用的例子,比如美图秀秀的磨皮,去掉了脸部细节信息(痘坑,痘印,暗斑等)。高通滤波则相反。

滤波又可以理解为平均或者卷积

当我们在求经过滤波后的某个数时,会去参考其周围的几个数。这里是对周围一个数按权求和,得到一个新的数,这个数就是滤波处理后的结果,这种操作叫做卷积。

卷积定理

时域上卷积=在频域上乘积

通过这个定理就知道了怎么样去做一个卷积
方式一:
可以直接用图片然后进行卷积操作
方式二:
首先将图片进行傅里叶变换变到频域上,然后将卷积的滤波器变到频域上,把这两者相乘得到频域上的结果,然后做逆傅里叶变换变为时域上。

用一个3×3的卷积盒,任何一个像素都是它周围对应的8个格子像素的平均。
通过观察图像知道,这个卷积操作相当于进行了一次低通滤波。

卷积盒越大则对应的频域越小。

从频率的角度理解采样


可以发现,频域上原始信号被copy了很多个。所以采样实质就是重复原始信号它的频谱。

从频率的角度理解走样

理解了采样的实质后就可以理解走样了。

如果采样率不足(采样不够快),那么信号“复制粘贴”中间的间隔就会非常小(采样间隔时间大,换算成频率的话就是频率间隔小)而走样就是频谱发生了重叠。

反走样

方法:先把一个信号高频信息去掉(做低通滤波,即模糊操作),然后再采样。

利用频谱证明:

怎么实现把图像变模糊

我们只需要对于每一个像素都进行卷积操作就行了。

通过计算平均像素值来抗锯齿
在对一个三角形进行光栅化时,f(x,y) = inside(triangle,x,y)像素区域内的平均值等于该三角形所覆盖的像素区域的面积。

假设最左边的黑色覆盖了1/8,即有7/8没覆盖,也就是有87.5%的白色,最右边的黑色全部覆盖,也就是有0%的白色(纯黑色)

实际中的反走样方法

如果要实现上一节中计算像素被覆盖的面积是多少在现实中是非常困难的。所以采用了下面的方法。

MSAA:MSAA是MultiSampling Anti-Aliasing的英文缩写,指多重采样抗锯齿,原理是寻找出物体边缘部分的像素,然后再把画缩放到当前的显示器上。

MSAA原理:
通过对一个像素内的多个位置进行采样并取其平均值来确定一个像素被覆盖了多少,即增加一个像素内采样点的数量来确定被覆盖的范围。

没采用MSAA:

采用了MSAA:

最终结果:

其他抗锯齿的方法:
FXAA(Fast Approximate AA)
首先得到一幅图(有锯齿),然后找到有锯齿边界,然后把边界换成没有锯齿的边界。

TAA(Temporal AA)
复用上一帧的结果,上一帧的值在这一帧也会发挥作用

Super resolution / super sampling (超采样技术)
• From low resolution to high resolution (从低分辨率到高分辨率 )
• Essentially still “not enough samples” problem (本质上仍然是“样本不足”的问题 )
• DLSS (Deep Learning Super Sampling)(深度学习超级采样)

超采样技术:有一种512p的图,现在需要把它用1080p来显示,如果直接放大就会导致很严重的锯齿现象,那么就需要去填充放大之后缺乏的像素点,可以使用深度学习的方法让电脑来去猜这个像素应该填什么颜色,这就是DLSS。

计算机图形学GAMES101(五)光栅化(深度测试与抗锯齿)相关推荐

  1. 计算机图形学中的光栅化

    光栅化 1.屏幕 1.2.屏幕分类 1.3.屏幕分辨率 2.像素(Pixel,缩写px) 3.屏幕空间 3.1 规范立方体转化到屏幕空间 4.光栅化 5.像素表示三角形 5.1 2D的采样方法进行光栅 ...

  2. 计算机图形学三:光栅化-Rasterization

    文章目录 什么是光栅化? 像素和屏幕 直线光栅化(Linear Rasterization) DDA数值微分算法 中点Bresenham算法 三角形光栅化(Triangle Rasterization ...

  3. 计算机图形学GAMES101(十二)光线追踪(基本原理)

    我们是怎么解决阴影问题? 当对物体着色的时候,只考虑了像素点自己,没有考虑物体遮挡.所以着色不能解决阴影.那么怎么解决阴影问题呢? 阴影映射(Shadow mapping) 可以使用阴影映射来渲染阴影 ...

  4. 【计算机图形学】小白谈计算机图形学(五)

    小白谈计算机图形学(五)三维图形投影 三维图形投影 分类 平面几何投影 1-平行投影 1.1-正投影 1.1.1-三视图 1.1.2-正轴测投影 例题 1.2-斜投影 相关链接 超链接 三维图形投影 ...

  5. 计算机图形学笔记五:光栅化(消隐算法)和 前几节内容总结

    消隐算法和前几节内容总结 1.消隐算法 1.1画家算法(Painter's Algorithm) 1.2 Z-Buffer算法 2.前几节内容总结 1.消隐算法 1.1画家算法(Painter's A ...

  6. 一个简单光栅器的实现(五) 光栅化阶段

    在几何阶段我们通过顶点变换获得了世界坐标下的顶点最终渲染到屏幕上的位置和它们的深度值,并且在剔除掉了不在视锥体内顶点,接下来要做的就是根据顶点的位置和三角形索引渲染出模型的每一个三角形. 这个简单的光 ...

  7. 计算机图形学GAMES101(十四)光线追踪(辐射度量学、渲染方程与全局光照)

    本节涉及内容: 辐射度量学(Basic radiometry) 光线的传播:反射方程以及渲染方程 全局光照 为什么要学辐射度量学? 之前使用的Whittled style光线追踪很多物理量都没有精确的 ...

  8. 计算机图形学第五次上机——真实感图形绘制(引入光照模型)太阳系动画实现

        计算机图形学       课程实验报告 实验名称    真实感图形绘制     一.实验目的 1.掌握光照模型的编程应用 2.能够编程模拟实现简单的太阳系 1. 用不同的着色和光照参数绘制茶壶 ...

  9. 计算机图形学基础:光栅图像(Fundamentals of computer graphic:Raster Images) 学习笔记

    <Fundamentals of computer graphics>4th edition: 3. Raster Images 本文仅仅是本人的学习笔记,由于自己能力有限,可能存在许多错 ...

最新文章

  1. synchronized底层原理_你用过synchronized吗?它的底层原理是什么?Java经典面试题来了...
  2. JS 时间戳转换成日期
  3. python中 使用join()方法 对各种数据类型中元的素进行合并拼接
  4. openshift安装部署_OpenShift 4 HOL (1) - 多种方法部署容器化应用
  5. 2019.02.09 bzoj4455: [Zjoi2016]小星星(容斥原理+dp)
  6. 下面的一堆文字为了说明一件事情---.NET程序,内存溢出,如何控制.
  7. 半监督学习【机器学习】
  8. 如何使用计算机中的导出,(excel在电脑的哪个文件里?)excel怎么把查找的导出
  9. 3d 模型换人脸_3D人脸模型月销量上千单 谁在打印,谁在帮打?
  10. Help with arrayCollection.additem()
  11. react-nativeAndroid打包报错:Daemon: AAPT2 aapt2-3.2.1-4818971-osx Daemon #0
  12. iOS 15 通知的新功能
  13. Python+Kivy(App开发)从入门到实践
  14. Laravel SQL查询中first, pluck与lists方法
  15. 迷惑新手的IOS开发问题
  16. php中美元符号是什么意思,js程序中美元符号$是什么
  17. 计算机flash听课记录范文,听课记录5篇
  18. jscese 知其白 守其黑 為天下式 __Read The Fucking Source Code的博客汇总
  19. Nvidia Support Matrix 支持矩阵
  20. LeetCode 6. Z 字形变换 (N字形变换)

热门文章

  1. 【Gunicorn】gunicorn + flask 请求流程 及 高并发处理介绍
  2. 【Redis 大量点赞问题】
  3. c++strtol()
  4. YOLO v2实现图像目标检测
  5. cnpm install常见错误
  6. Flutter TextField详解
  7. Linux下查看tomcat版本
  8. 狼、羊、菜和农夫过河问题[超详细解析,CPP实现]
  9. windchill11 安装遇到的问题
  10. AXI协议解析(五)