为什么在设计字体时添加极值点?


9

在设计字体的字形时,显然要在路径的水平和垂直极值处添加锚点。大多数字体编辑器都具有为您添加这些功能的功能,如果省略它们会给您带来错误。

但是有时绘制这样的路径有时更容易,更自然:

在此处输入图片说明

请注意,在大多数极值上角度各不相同且缺少点。

以下是更好的方法,但是如果您从第一个图像开始,那么进入该路径意味着该过程需要额外的步骤(有时必须追溯原始图像):

在此处输入图片说明

那么,为什么我们甚至需要增加极值点?如果不这样做,我将面临哪些实际问题?

Answers:


7

如前所述,字体渲染特别是提示需要极值。

为了理解这一点,让我们首先来看一下在常规像素网格中自动绘制带有极值作为锚点(绿色)的字形¹时发生的大致情况:为了使字体看起来清晰美观,垂直和水平笔划应完全落入像素网格中。任意放置的字形通常将不满足此条件,因此渲染器将使它稍稍变形到该末端,即通过移动极值,因为它们定义了垂直和水平笔触:

提示过程关键部分的说明

此过程需要渲染器进行猜测,因此设计人员可以定义一堆东西(标记的茎,蓝色值),以帮助渲染器完成此过程。请注意,这只是第一步,之后还有很多事情要做,我们不需要关心这个问题。

现在,让我们首先假设我们不仅使用极值定义了字形,还使用了它们之间的一些对角锚。然后,当移动极值时,这些锚点将必须逐渐移动,这又需要猜测,但是与移动极值不同,由于情况的复杂性,字体设计者无法为此提供很多帮助。因此,移动这些多余的锚是相当大的误差来源,尤其是在锚靠近极值的情况下。

最后,我们可以回到问题并考虑如果在极值点上未定义任何锚点会发生什么情况。在这种情况下,渲染器必须在移动极值和所有其他锚点之前自动确定极值(可以轻松地做到这一点)。由于对于许多类型的字体,您自然会选择最接近锚点的位置,因此,由于上述原因,这可能带来猜测错误的风险。

概括一下以上内容:无论如何,Extrema在渲染时都起着至关重要的作用,因此,最好在它们之上构建字形,这样渲染器就不必猜测了。

行情

来自专利US 7068276 B2 –提示字体的方法和系统

下文所述的算法方法尝试使用诸如轮廓方向和极值等特征来匹配明显的曲线上的结。

来自FontForge的Wiki上的提示

轮廓线必须具有正确的方向,否则会影响到蓝色区域的捕捉。形成(准确)形状的点越少越好。但是,用H / V杆提示的曲线应该在极点处有指向,否则它们不会被捕捉。如果这样的观点是“隐含的”,那将是毫无意义的。


¹子像素提示
并没有太大区别²这是一个广泛的简化,因为带有提示的字形放置更加复杂;但是这个例子就足够了


3

使用贝塞尔曲线时,“极值点”是首选方法的三个原因如下。实际上,特别是在处理字母时,我已经将其描述为必不可少的

  1. 它改善了(极大地)自动提示和PostScript解释。确实,设置极值点是设置手动提示时的第一步。
  2. 以后编辑形状要容易得多。使用极点时,以后编辑曲线要容易得多。极值中的移动点倾向于以最小的额外努力使曲线保持漂亮。
  3. 总体上少分。极值点也倾向于使用更少的额外点来实现相同的形状...这也导致文件大小更小。

由于这些原因,许多字体软件设计程序都具有用于突出显示和固定不位于最大值和最小值(极值)的点的工具。

说了这么多,我一直在努力将自己的观点设定在极致上,但从未成功过,但是我不认为自己是Bezier Ninja!


我得到了暗示,尽管我对规格的阅读使我相信它是一个对称的取整问题。在无关的新闻中,应避免出现拐点。但是我没有得到其他两个原因。他们经常被引用,但仍然如此。如果为真,则旋转的对象具有不同的最佳贝塞尔曲线手柄,考虑到对象在所有方向上如何保持不变,这似乎是不正确的。因此,这些要点实际上是创作工具中的缺陷,或者是人脑中的缺陷。
joojaa

如果您选择2和3,则宁愿使用拐点,也可以使用曲率最高的点(请参阅我的答案)。(CC @joojaa)
Wrzlprmft

@Wrzlprmft是的,我同意,因为拐点是全局的。另外,字体引擎确实不喜欢弯曲的曲线,因此会同时杀死2只鸟。
joojaa
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.