为什么斜边比横边更容易显得粗糙?
斜线切过方形网格时,总会遇到尴尬的位置。有的方格完全在边界一侧,有的则被一分为二。如果每格只能选黑或白,边界就会逐级跳动。抗锯齿的起点,是换一个问题来描述那些只被覆盖一部分的格子。
边缘可以覆盖半个像素,却不必变成半条边。
一格里有两个答案
想象一张白纸盖住深色桌面的一部分。完全位于纸内的像素应该是白色,完全在外的应该是深色。边界处,纸可能只盖住像素的一部分。若仅依据中心点做二选一判断,就忽略了格子内的其他区域。
覆盖率记录这个比例。在理想的线性光合成模型里,四分之一被覆盖的像素贡献四分之一的前景。边缘的中间亮度不一定代表物体模糊,也可以准确描述清晰边界穿过有限测量面积的情况。

故意做一张小图
合成图像只有24乘24像素。白色区域位于直线y = 0.63x + 3下方。一种算法只检查方格中心,另一种在每个像素内部布置32乘32个均匀采样点,再平均这些点位于内侧或外侧的判断。
每像素因此有1,024个子采样点,但并没有变成1,024个可以独立显示的像素。它们只用来估计一个覆盖率。这是面积的有限数值近似,不是精确解析积分。增加子采样数量可以改善估计,却不改变最终图像尺寸。
灰色方格携带位置信息
放大的对比中,中心采样的边缘在两个极值间突然切换。覆盖率版本则有一条狭窄的中间值带,说明边界如何穿过每个方格。即使两侧包含哪些像素中心暂时不变,边缘稍微移动,覆盖率也能逐渐改变。
单行曲线把这种差别单独呈现出来,每一列都有明确数值,比整条斜线更容易读懂。显示网格中的台阶并没有真的消失,只是亮度分布向视觉系统提供了更多证据,帮助判断连续边缘的位置。

运动暴露了遗漏的信息
另一组图把边缘上移零、四分之一和半个像素。几何位置平滑变化,覆盖率沿边界响应,而不必等待中心点跨过边界。因此抗锯齿对动画也很重要:二元判断可能把轻微移动变成突然闪动。
这里展示的是几个位置的静态样本,不是动画性能测试。运动场景还可能需要时间方向的滤波。空间覆盖率本身不能解决时间混叠、运动模糊、透明排序,以及纹理和着色引入的各种采样问题。

亮度需要正确的算术
覆盖率是几何权重,不自动等于显示编码值。要正确混合前景和背景的光,渲染器需要考虑所用颜色编码。直接平均经过编码的sRGB数值,可能比先在线性光空间平均、再编码的结果更暗。
图示采用深蓝到浅色的可视化,让小数值容易辨认,并非校准过的显示测试。浏览器缩放也可能增加一次滤波。放大查看是在研究数值构造;正常尺寸判断边缘,则涉及对比度、观看距离和实际屏幕,是另一个感知问题。
平滑也有成本
更多采样需要计算,而覆盖率估计也只是方法之一。渲染器还可能采用解析边缘计算、多重采样或专门设计的滤波器。不同方法在成本、细节和稳定性之间取舍。更模糊不一定更好,特别是需要分清小特征时。
关键是保留足以回答图像用途的信息。清晰的斜线不必假装每格都完全在内或完全在外。一旦把像素看成面积,中间色调就不再只是美化技巧,而成了有用的测量结果。
