GAMES101图形学之光栅化(下)

前提

经过了 MVP 变化,和 是否在三角形内部测试 之后,随之出现的一个问题就是锯齿,也叫作走样,下面讨论如何反走样。

放大之后有很明显的锯齿

采样会导致的问题

采样的运用其实很广泛,比如视频其实是对时间的采样,因为人眼的视觉暂留才导致在大于 24 帧时会感觉那是连续的。
采样会带来的第一个问题就是 锯齿,第二个是 摩尔纹

把奇数行奇数列都去掉之后,产生了摩尔纹

第三个 反转轮胎,这个么滴图片,但大家应该在生活中观察过轮胎在高速运动的时候,人眼观察会觉得它在反转,就是因为人眼的采样率跟不上轮胎的转速。(冷知识:人的余光采样率比焦点高,洗牌的时候可以拿余光试试能不能看清牌面)

总结一下,走样就是因为 信号 变幻太快,采样频率 太小,跟不上。其实很好理解,对于一个正弦波,你在图示地方采样,会以为正弦波是一条直线,因为你得到的值都是 0。(像盲人摸象?采样的范围太小了)

低频率对正弦波采样

下图也是,对于本身频率就高的函数(f5(x)),使用一样的采样频率,是不能还原原来的函数状态的。
同样的采样频率,f1(x)基本可以还原,f5(x)已经完全是另一种曲线了

当使用同样的采样频率(竖着的线),对两种完全不同的曲线(蓝色的曲线和黑色曲线)进行采样,结果却是一模一样的时候(黑色圈圈),也就是通过采样结果,我们不能区分这两种曲线的时候,也就是 走样 了:
走样

解决方法是先将图片进行模糊,再采样。下面的 滤波卷积 都是为了解释为什么这样可行的铺垫,最好看懂,看不懂就直接看 如何反走样

滤波

首先,数学上有很多方法可以对一个函数进行展开,其中有一个 傅里叶级数展开,它可以把任意一个周期函数展开成一系列正弦函数和余弦函数加一个常数项的形式。如下图,我们想用傅里叶级数模拟这个锯齿图,当项数越来越多的时候,模拟的就越精确。

从上往下依次是傅里叶级数项数为 2,3,4,5 的时候

傅里叶级数

傅里叶变换 可以把一个方程 f(x) 经过一系列复杂的操作之后变成 F(x),并且通过 逆傅里叶变换 把 F(x) 变回 f(x)。也就是说他可以把一张图从时域变成频域,再从频域变回时域。
时域(左),频域(右)

图片的频率你可以理解为某一个点附近的变化骤缓程度,比如在衣服和脸的交界处,频率就是很高的,在衣服的内部,基本都是黑色,频率就是很低的。频域图中,中间是频率最低的地方,越往外越高。亮度表示在该频率上所携带的信息多少,越多就越亮,这里的信息你可以理解为像素吧,比如变换小的像素最多,所以中间最亮,变换大的像素少(一般只有边界,比如衣服和皮肤的交界处),所以往外亮的地方很少。一般来说,自然界的图片拍出来,频域图都是这样的。
频域图的四条很明显的亮线,是因为我们假设了这个图片是 Repeat 模式的,也就是像贴瓷砖一样重复。因为上边界和下边界,左边界和有边界会有明显的跳变,所以会有四条很亮的线。
把低频信息去掉,只剩下了图片边缘信息(高通滤波)

把高频信息去掉,图片细节丢失,变得模糊(低通滤波)

只保留中频信息(带通滤波)

滤波 就是把某一频段的信息给去掉,低通滤波就是让低频率通过,高通滤波就是让高频率通过。

卷积

如下图,有一个 3*3 的盒子,卷积的意思就是对原图的每一个像素,都取他自身及周围 8 个像素的颜色相加,再除 9。(当然这个盒子可以有不同的形态)。直接给出一个结论:

时域的卷积等于频域的乘积,时域的乘积等于频域的卷积

将图片进行卷积变得模糊

将一个函数(a)进行傅里叶变换到(b)(c)傅里叶变换到(d),也就是从时域变成了频域。采样就是(a)*(c)=(e),将一个连续函数变成离散函数。而对应的,就是在频域(b)卷积(d)=(f)的过程。


走样就是在频谱上出现了交叠,也就是出现了 混叠
出现混叠

如何反走样

走样的核心矛盾就是采样率跟不上频率。那么一种想法就是增加采样率,也就是换分辨率更高的屏幕,但这不属于图形学研究的范围。另一种方法就是保持采样率,降低频率。也就是去掉高频信息,也就是使用低通滤波器,也就是将原图片进行模糊。


去掉了高频信息,所以原来混叠的地方不再混叠了

具体如何模糊呢?
其实我一开始以为是把下面这个图,每一个像素和周围进行平均 > <。但仔细想一下就会知道这个误差其实很大。



原来是把一半橙色,一半白色的像素变成橙色或者白色二选一,模糊操作其实是让它变成一个白和橙的中间色,而这个中间的程度根据当前像素中橙白的比例来确定的。



按照黑白比例来确定像素整体的灰度

但在实际操作中精确的计算比例是不太可行的,所以目前流行的是一些近似的算法:
MSAA 多重采样抗锯齿:在一个像素中使用更多的采样点来近似的确定橙白比例,

一个像素只有一个采样点,那么结果只有两个等级的覆盖率(在三角内或者不在三角形内)

将一个像素分成四个采样点,每个采样点分别判断是否在三角形内,那么一个像素就有 4 个等级的覆盖率

边缘不再是只有橙和白,而是根据覆盖率产生一个中间色

MSAA 实际运用效果

可以明显看到,如果使用 2*2 的采样点,那么计算量会扩大 4 倍,但是 MSAA 在工业上的运用其实并不会这样,他们会让一些采样点进行复用,并且也只会针对边缘的像素。

FXAA 快速近似抗锯齿:先生成有锯齿的图像,然后算出边界,再把有锯齿的边界换掉。实际上是一种图像后处理。速度很快。

TAA 时间性抗锯齿:简单高效,但只针对静止的画面,简单来说就是把 MSAA 的几个采样点分布到了时间上,比如 2*2 的采样点分别编号为 0,1,2,3。TAA 在第一帧只计算 0 号位置,第二帧只计算 1 号位置.... 复用 4 帧的结果就是 MASS,但是对当前帧来说没有额外的消耗。

指路

https://www.bilibili.com/video/BV1X7411F744?p=6

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容