为什么在设计字体时要添加极值点?
如前所述,字体渲染尤其是提示需要极值。
为了理解这一点,让我们首先看一下在常规像素网格中使用极值作为锚点(绿色)自动提示字形时大致发生的情况¹:为了使字体看起来漂亮清晰,垂直和水平笔划应该完全落入像素网格。任意放置的字形² 通常不会满足这个标准,因此渲染器会为此稍微扭曲它,即通过移动极值,因为它们定义了垂直和水平笔划:
这个过程需要渲染器的猜测,这就是为什么设计师可以定义一堆东西(标记的茎、蓝色值)来帮助渲染器在这个过程中。请注意,这只是第一步,之后还有很多事情要做,我们不需要关心这个问题。
现在,让我们首先假设我们不仅使用了极值来定义字形,而且还使用了一些对角线锚点。然后这些锚点在移动极值时必须逐渐移动,这又需要猜测,但与移动极值不同,由于情况的复杂性,字体设计师对此无能为力。因此,移动这些多余的锚是一个相当大的误差来源,特别是当锚接近极值时。
最后我们可以回到这个问题并考虑如果我们不在极值处定义任何锚点会发生什么。在这种情况下,渲染器必须在移动极值和所有其他锚点之前自动确定极值(它可以轻松完成)。由于对于许多类型的字体,您自然会选择作为锚点的内容接近极值,因此由于上述原因,这会带来错误猜测的风险。
总结一下上面的内容:Extrema 在渲染时起着至关重要的作用,因此如果你的字形建立在它们之上会更好,这样渲染器就不必猜测了。
引号
来自专利US 7068276 B2 – 提示字体的方法和系统:
下面描述的算法方法尝试使用诸如轮廓方向和极值存在等特征来匹配显式曲线上的节点。
轮廓需要有正确的方向,否则捕捉到蓝色区域会受到损害。形成(准确)形状的点越少越好。但是用 H/V 茎暗示的曲线应该在极值处有点,否则它们不会被折断。如果这样的观点是“隐含的”,那就不雅了。
¹它与子像素提示没有太大区别
²这是一个广泛的简化,因为带有提示的字形放置更加复杂;但对于这个例子就足够了
以下是使用贝塞尔曲线时“极值点”是首选方法的三个原因。事实上,特别是在刻字时,我已经看到它被描述为必不可少的:
- 它(极大地)改进了自动提示和 PostScript 解释。实际上,将点设置为极值是设置手动提示时的第一步。
- 以后更容易编辑形状。使用极值点以后编辑曲线要容易得多。极值中的移动点倾向于以最小的额外努力使曲线保持漂亮。
- 整体少点。极值点也倾向于用更少的附加点实现相同的形状......这也导致文件大小更小。
由于这些原因,许多字体软件设计程序都有用于突出和修复不在最大值和最小值(极值)的点的工具。
说了这么多,我早就努力把所有的点都设置在极值上,而且从来没有成功过,但我不认为自己是贝塞尔忍者!