详解AA抗锯齿基本原理
AA(Anti-aliasing):标准翻译为“抗图像折叠失真”。说通俗点,AA就是在栅格化图形中次像素精确级的渲染技巧。因为电脑屏幕显示单位是像素,它是屏幕上最小的那一个个小方块。大家只要靠近电视仔细观察就会发现一个个红绿蓝色的小点,这即是像素点。然而,曲线和角的如果用方块状的像素来表现,这显然是“不大方便的”,因为曲线和角容易产生“狗牙般”的锯齿。AA就是解决这一难题的一项技术,其目的就是让图像看起来更加平滑自然。总之,进过AA处理过后的图像消除了锯齿所带来的“方块感”。
左边的图是非常平滑的,但右边的则显得一块一块的
从上面这张图我们可以很直观的看出未采用AA抗锯齿技术处理的图像要比采用AA抗锯齿处理过后在“方块感”上面要严重许多。
AA的前提非常简单。请看下面这个图表:
首先假设你要想在屏幕上表现一个圆,若圆的尺寸很大,那么通过很多很多的像素进行排列即可,但如果要表现一个小尺寸的圆,因为提供给你所控制的像素点数量很少,故而通过像素方块所构建起来的圆最后可能是啥也不像。此刻,AA抗锯齿正好帮上了大忙。我们先将圆放大(最左边第一个圆),再将其和一个像素栅格对齐,每个方块代表一个像素。这时你会发现栅格里的好多像素都没有填满,且填充的比例也不尽相同。然后,我们的目标就是找出这些不完全填充的格子,根据填充的比例挑选基本色(这里是黑色)的相应比例来填充进去,即得到了第四个圆。仔细分析下这个圆,全填黑色的是那些格子里完全填充的,而某些50%填充的就填入一个50%的灰进去,75%的就填入75%的灰,等等。最后我们将填好图的第四个圆缩小为原始大小,即得到了第5个圆,效果是不是很不错哈。不过这种方法只部分适用于“像素艺术”领域里,因为像素点的尺寸和颜色的数量都是有限制的。
值得一提的是,AA有正确的用法也有错误的用法。正确的方法是如上面所示造成平滑过渡的感觉。错误的方法是像下图的最左边的图在黑色边线的外围全部加上50%的灰度像素:
刚刚接触AA抗锯齿时,人们往往会犯一个错误:即将每一“步”都加入一单个浅色像素。其实这种方法显的十分糟糕。中间的方法是正确的:只再需要的地方加适合的过渡像素。虽说此刻弧线开起来平滑了些,但锯齿感还没有完全消除。最后边的则是最佳的方法:加两层过渡色,弧线看起来变的更加平滑。所以,单个的分离像素通常不是最好的AA过渡,而同色线条或像素组可以将AA效果表达得更好。
OK,以上介绍了AA的基本前提,不过你会发现我们仅仅介绍了黑白两种颜色的情形。倘若换成彩色,又该怎么办了?其实方法和黑白情况下的AA过渡差不多,只是不再是检查黑色的百分比例,而是检查每种颜色的比例了。上图:
左边第一个,是黑色和白色(在上面我们已经讨论过了)。我们找到用来过渡黑与白的过渡色是一种中间灰。这个颜色是靠混合白色所占的比例之白色和黑色所占的比例之黑色混合而得到的。同样混合红色和黄色,我们得到橙色,然后深绿+蓝色=海蓝色,在最右边我们有一点点变化:3种颜色在一起。我们用同样的方法来对待,混合之后得到一个有点蓝的紫色。方法确实并不复杂,但这些都是在可以无颜色限制情况下使用的,因为实际情况中是不可能有一个无限色盘来做AA过渡的,即使有也很费时间。所以我们只能用不断尝试的方法来选出合适的AA过渡色,直到成功为止。