翻译自https://github.com/libgdx/libgdx/wiki/Distance-field-fonts
渲染超级平滑的可缩放的位图字体
Signed distance field(有符号距离场)是一项被应用在《军团要塞2》中的技术,被V社的Chris Green记录成论文Improved Alpha-Tested Magnification for Vector Textures and Special Effects.并发表。这项技术使得即使以高倍率渲染位图字体,其边缘也不会呈锯齿化。
介绍
传统的位图字体的像素若是以1:1比例转化到屏幕上像素,那么其工作起来是没有问题的。然而,它们被旋转后,看起来则会很糟糕,若是被放大则会更糟。你最终要不就会看到一个个独立的像素,要不就会去使用线性插值处理,然后得到难看的模糊。
使用有符号距离场字体可以让你渲染即使被旋转,放大,或经过其他任意转换后仍然保持离散的字体,而且是在很小的开销代价下完成这些。示例如下:
同样的技术还可以应用到渲染符号,logo等。这项技术的主要缺点就是它只能应用于黑白色的图像;不可能将这项技术应用到任意颜色的图像上。
工作原理
原理是非常简单的。我们预处理字体的图像来产生一个有符号距离场,而不是直接提供一个这个字体的黑白图像。上图中最右的示例展示了字体图像经过预处理后的样子。
预处理器接受黑底白字的黑白图像作为输入。对其中的每一个白色的像素,预处理器计算出他到最近的黑色像素的距离,若黑白色反之亦然。对每个黑色的像素,黑色像素的距离进行取反操作,然后将结果归一化。这给了我们平滑的,连续的场,并且0.5刚好在原始字体的边缘,往字体外部移动时逐渐降低到0,往内部移动时增长到1。
然后我们规定alpha testing只在alpha大于0.5时才将像素输出。对使用最近邻插值的材质来说,这会和输入图像看起来一模一样。