Зачем добавлять точки экстремумов при разработке шрифтов?

По-видимому, важно добавлять опорные точки на горизонтальных и вертикальных экстремумах ваших путей при разработке глифов шрифта. В большинстве редакторов шрифтов есть функции для их добавления, и если вы их пропустите, вы получите сообщение об ошибке.

Но иногда проще и естественнее рисовать такие пути:

введите описание изображения здесь

Обратите внимание на разные углы и отсутствие точек на большинстве экстремумов.

Ниже приведен лучший путь, но если вы начинаете с чего-то вроде первого изображения, то переход к этому означает дополнительный шаг в процессе (иногда приходится повторять исходное):

введите описание изображения здесь

Так зачем нам вообще нужно добавлять точки экстремумов и с какими практическими проблемами я столкнусь, если я этого не сделаю?

Ответы (2)

Как уже упоминалось, экстремумы нужны для отрисовки шрифта и в частности хинтинга.

Чтобы понять это, давайте сначала посмотрим, что примерно происходит при автоподсказке глифа с экстремумами в качестве якорей (зеленый) в обычной пиксельной сетке¹: чтобы шрифт выглядел красиво и четко, вертикальные и горизонтальные штрихи должны точно попадать в пиксельную сетку. Произвольно размещенный глиф² обычно не удовлетворяет этому критерию, и поэтому рендерер немного искажает его с этой целью, а именно, перемещая экстремумы, так как они определяют вертикальные и горизонтальные штрихи:

иллюстрация важной части процесса намека

Этот процесс требует догадок от рендерера, поэтому дизайнер может определить множество вещей (отмеченные основы, синие значения), которые помогут рендереру в этом процессе. Обратите внимание, что это только один из первых шагов, и после этого происходит много всего, о чем нам не нужно заботиться в этом вопросе.

Теперь давайте сначала предположим, что мы использовали не только экстремумы для определения глифа, но и некоторые диагональные привязки между ними. Тогда эти якоря пришлось бы постепенно перемещать при перемещении экстремумов, что опять же требует догадок, но в отличие от перемещения экстремумов дизайнер шрифта мало чем может помочь в этом из-за сложности ситуации. Поэтому перемещение этих избыточных якорей является значительным источником ошибок, особенно если якоря находятся близко к экстремумам.

Наконец, мы можем вернуться к вопросу и рассмотреть, что произойдет, если мы не определим никаких якорей на экстремумах. В этом случае рендерер должен автоматически определить экстремумы (что он может легко сделать), прежде чем перемещать их и все остальные привязки вместе с ним. Поскольку то, что вы, естественно, выбрали бы в качестве якоря, близко к экстремуму для многих типов шрифтов, это сопряжено с риском неверного предположения по причинам, изложенным выше.

Подводя итог вышеизложенному: экстремумы в любом случае играют решающую роль при рендеринге, и поэтому лучше, если ваш глиф будет построен на них, чтобы рендереру не приходилось угадывать.

Котировки

Из патента США 7068276 B2 — Методы и системы хинтинговых шрифтов :

Алгоритмический подход, описанный ниже, пытается сопоставить явные узлы на кривой, используя такие функции, как направление контура и наличие экстремумов.

Из Wiki FontForge о намеках :

Контуры должны иметь правильное направление, иначе привязка к синим зонам будет нарушена. Чем меньше точек образуют (точную) форму, тем лучше. Но кривые, обозначенные стеблями H/V, должны иметь точки экстремумов, иначе они не будут совмещены. Это неэлегантно, если такая точка является «неявной».


¹ это не сильно отличается для подпиксельного хинтинга
², что является большим упрощением, поскольку размещение глифа с хинтингом более сложно; но этого достаточно для этого примера

Вот три причины, по которым метод «точки экстремума» является предпочтительным при работе с кривыми Безье. На самом деле, работая над надписями, в частности, я видел, что это описывается как важное :

  1. Это значительно улучшает автоподсказку и интерпретацию PostScript . Действительно, установка точек на экстремумы — это один из первых шагов при настройке хинтинга вручную.
  2. Гораздо проще редактировать форму позже . Редактировать кривые позже намного проще с точками в экстремумах. Перемещение точек в экстремумах позволяет сохранять кривые красивыми с минимальными дополнительными усилиями.
  3. В целом меньше баллов . Экстремальные точки также имеют тенденцию достигать той же формы с меньшим количеством дополнительных точек... что также приводит к меньшим размерам файла.

По этим причинам многие программы для разработки шрифтов имеют инструменты для выделения и фиксации точек не на максимумах и минимумах (экстремумах).

Говоря все это, я долго трудился, чтобы установить все свои точки в экстремуме, и никогда не преуспел, но я не считаю себя ниндзя Безье!

Я понимаю намек, хотя мое чтение спецификаций заставляет меня поверить, что это проблема симметричного округления. В несвязанных новостях следует избегать точек перегиба. Однако я не понимаю 2 другие причины. Их часто цитируют, но все же. Если бы это было правдой, то повернутые элементы имели бы разные оптимальные ручки Безье, что кажется неверным, учитывая, что объект постоянен при всех ориентациях. Так что эти моменты на самом деле являются дефектами инструментов разработки или ошибками человеческого мозга.
Если вы выберете 2 и 3, вы предпочтете использовать точки перегиба и, возможно, точки наибольшей кривизны (см. этот мой ответ ). (CC @joojaa)
@Wrzlprmft да, с этим я согласен, поскольку точки перегиба являются глобальными для формы. Также шрифтовые движки очень не любят кривые, которые invflect, поэтому он убивает двух зайцев одновременно.