Глава 1. Введение 2
Глава 2. Постановка задачи 3
Глава 3. Обзор предметной области 4
3.1. Способы рендеринга текстов 4
3.2. Рендеринг текста в технике sdf 6
Глава 4. Основной результат 11
4.1. Инструмент для отладки данных 11
4.2. Результаты наблюдений 14
4.3. Инфраструктура 16
Глава 5. Заключение 17
Список литературы 19
Приложения 20
Данная работа появилась в связи с тем, что в «Яндекс.Картах» долгое время были недостаточно качественные подписи — буквы были выщербленные; не выравнивались; было заметно, что некоторые буквы выскакивают из слов. На всех клиентах (мобильные устройства, Web карты) использовались sdf шрифты вместо каноничных ttf шрифтов — для экономии времени рендеринга текстов. Только в растровом режиме были ttf шрифты, но растровый режим является запасным: пока рендерится векторный или в случае его отказа, — поэтому качество работы именно с sdf шрифтами является ключевым, соответственно появилась потребность разобраться, из-за чего тексты выглядели некачественно.
В процессе исследования проблемы было выяснено, что с рендерингом нет проблем — проблемы были с порождением глифов (текстур символов). Проблема специфичная — без инструмента для визуализации отладить проблемы сложно, сырые данные не выразительны.
В данной работе рассматривается каким образом были исправлены проблемы рендеринга текста sdf шрифтами в «Яндекс.Картах» и как для этой цели был создан инструмент отладки данных — sdf глифов, — названный fontograph. Так как приоритетным направлением являются мобильные устройства, то в теме заявлены именно мобильные устройства, но по причине, озвученной ранее, проделанная работа улучшает тексты и в Web картах. Также рассматриваются результаты связанной задачи по улучшению внутренней инфраструктуры без подробностей из-за ограничений, связанных с политикой о неразглашении ООО «Яндекс.Технологии».
Глава 2. Постановка задачи
Имеется код рендеринга подписей на карте на мобильных устройствах, который а) может быть использован в целях тестирования только с помощью создания сложного стенда, который долго поднимать — и хотелось бы иметь инструмент, который позволит ускорить обратную связь от связанных изменений; б) выделить в библиотеку, которой можно было бы пользоваться на ведущих операционных систем для компьютеров (MacOS/Linux/Windows), можно и нужно, но сделать это крайне непросто и небыстро.
Изменения этого кода ведут к обновлению приложения карт и навигатора у клиентов-людей, которые происходят редко и нежелательны в контексте улучшения рендеринга подписей. Изменения формата данных влекут изменения кода клиентов, соответственно они также нежелательны.
Также в процессе поиска подходящего инструмента для отладки данных было выявлено, что на рынке есть либо бесплатные инструменты практически без функционала, либо платные инструменты и зачастую с избыточным функционалом.
Цель: Требуется добиться значительного улучшения подписей на карте без значительного изменения кода рендеринга на клиенте и формата данных — засчет улучшения порождения sdf глифов на сервере. Также требуется собрать воедино разрозненную структуру менеджмента шрифтовых ресурсов и централизовать менеджмент процессов с их участием.
...
Итак, успешно была достигнута поставленная цель: Как видно на рисунке 10, итоговый вариант очень похож на эталонный, из-за чего можно утверждать о значительном улучшении рендеринга подписей.
Был создан инструмент, которого не хватало на рынке — бесплатный и с полезным функционалом, о чем можно утверждать по ошибкам, которые он помог выявить. Этим инструментом продолжат пользоваться в компании для получения быстрой обратной связи от дальнейших изменений в порождении глифов, если подключить к инструменту библиотеку osmesa из mesa3d, которая позволяет создавать контекст рендеринга без использования видеокарты — это обратную связь можно будет начать получать автоматически, в превью пулл реквеста, эти картинки будут рендерить сервера, к которым не подключены видеокарты.
Также видится в дальнейшем, что можно подключить просмотр и msdf глифов, также есть deep-sdf техника, которую тоже можно подключить. Также можно добавить возможность подключения фабрики глифов, как это было сделано для внутренней версии fontograph и внутренней фабрики.
В дальнейшем можно пробовать перевести рендеринг на использование msdf глифов.
Можно поменять побуквенный рендеринг на построчный - и добавить возможность рендерить многострочные тексты. Это изменение должно ускорить fontograph и он будет еще быстрее давать обратную связь.
Наконец, в fontograph можно добавлять новых настроек — и делать это может не только автор, но и другие, потому что инструмент был выложен в открытый доступ.