Использование Шрифтов

Godot позволяет устанавливать определенные шрифты для различных узлов пользовательского интерфейса (UI).

Настроить использование шрифтов можно в трёх местах. Первый — в редакторе тем. Выберите узел, для которого хотите установить шрифт, и перейдите на вкладку "font". Второй — в инспекторе узлов управления в разделе Theme Overrides > Fonts. И наконец, в настройках инспектора тем в разделе Default Font.

Если нигде не указано переопределение шрифта, в качестве шрифта проекта по умолчанию используется Open Sans SemiBold.

Примечание

Начиная с Godot 4.0, размеры шрифтов больше не определяются в самом шрифте, а определяются в узле, который его использует. Это делается в разделе Theme Overrides > Font Sizes инспектора.

Это позволяет изменять размер шрифта без необходимости дублировать ресурс шрифта для каждого другого размера шрифта.

Существует 2 типа файлов шрифтов: dynamic (динамические) (форматы TTF/OTF/WOFF/WOFF2) и bitmap (растровые) (формат BMFont .fnt или моноширинное изображение). Динамические шрифты — наиболее распространённый вариант, поскольку их размер можно менять, и они сохраняют чёткость даже при больших размерах. Благодаря своей векторной природе они также могут содержать гораздо больше глифов, сохраняя при этом разумный размер файла по сравнению с растровыми шрифтами. Динамические шрифты также поддерживают некоторые расширенные функции, недоступные растровым шрифтам, например, ligatures (лигатуры) (преобразование нескольких символов в один другой рисунок).

Совет

Файлы шрифтов со свободной лицензией можно найти на таких сайтах, как Google Fonts и Font Library.

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

См. также

Увидеть, как работают шрифты в действии, можно с помощью демонстрационного проекта BiDI and Font Features.

Динамические шрифты

Godot поддерживает следующие динамические форматы шрифтов:

  • TrueType Font или Collection (.ttf, .ttc)

  • OpenType Font или Collection (.otf, .otc)

  • Web Open Font Format 1 (.woff)

  • Web Open Font Format 2 (.woff2)

Хотя форматы .woff и особенно .woff2, как правило, позволяют уменьшить размер файлов, не существует универсально "лучшего" формата шрифта. В большинстве случаев рекомендуется использовать формат шрифта, предоставленный на сайте разработчика.

Bitmap (Растровые) шрифты

Godot поддерживает формат растровых шрифтов BMFont (.fnt). Этот формат создан программой BMFont. Существует также множество программ, совместимых с BMFont, например BMGlyph или веб-программа fontcutter.

Вы также можете импортировать любое изображение для использования в качестве растрового шрифта. Для этого выберите изображение в доке "FileSystem ", перейдите в доку "import", измените тип импорта на Font Data (Image Font) и нажмите Reimport:

Изменение типа импорта на Font Data (Image Font)

Измененить тип импорта на Font Data (Image Font))

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

Пример растрового шрифта

Источник: LibreQuake (масштабировано и обрезано, чтобы исключить расширенный диапазон)

Для успешного импорта вышеуказанного изображения шрифта можно использовать следующие параметры импорта:

Параметры импорта для использования в приведенном выше примере шрифта

Параметры импорта для использования в приведенном выше примере шрифта

Параметр Character Ranges представляет собой массив, который отображает каждую позицию на изображении (в координатах плитки, а не в пикселях). Атлас шрифтов просматривается слева направо и сверху вниз. Символы можно указывать десятичными числами (127), шестнадцатеричными числами (0x007f) или в одинарных кавычках ('~'). Диапазоны можно указывать с помощью дефиса между символами.

Например, 0-127 (или 0x0000-0x007f) обозначает весь диапазон ASCII. Другой пример: ' '-'~'` эквивалентно 32-127 и обозначает диапазон печатаемых (видимых) символов ASCII.

Убедитесь, что значение параметра Character Ranges не превышает заданного значения Columns (Столбцы) × Rows (Строки). В противном случае шрифт не будет импортирован.

Если изображение шрифта содержит поля, не используемые для глифов шрифта (например, для информации об авторстве), попробуйте настроить Image Margin. Это поле применяется только один раз по всему изображению.

Если изображение шрифта содержит направляющие (в виде линий между глифами) или интервалы между символами кажутся некорректными, попробуйте настроить Character Margin. Это поле применяется к каждому импортированному глифу.

Если вам требуется более точный контроль над интервалом между символами, чем тот, который предоставляют параметры Character Margin, у вас есть больше возможностей.

Например, Character Ranges поддерживает три дополнительных аргумента после указанного диапазона символов. Эти аргументы управляют их позиционированием и интервалами. Они представляют собой сдвиг отступа, смещение по оси X и смещение по оси Y в указанном порядке. Они изменяют сдвиг отступа и смещение каждого символа на количество записанных пикселей. Сдвиг отступа наиболее полезен, например, если строчные буквы тоньше прописных.

Диаграмма, показывающая значения смещения и опережения, используемые в диапазонах символов.

Обратите внимание, что смещения могут привести к тому, что текст будет обрезан по краям границ этикетки.

Во-вторых, вы также можете настроить Kerning Pairs (пары кернинга) для отдельных символов. Чтобы задать пару кернинга, введите два набора символов, разделённых пробелом, а затем ещё один пробел и число, указывающее, на сколько пикселей больше/меньше интервал между этими двумя наборами символов при размещении рядом.

../../_images/using_fonts_bitmap_kerning_pairs_example.webp

При необходимости символы кернинговой пары можно указать с помощью кода символа Unicode, введя \uXXXX, где XXXX — шестнадцатеричное значение символа Unicode.

Загрузка файла шрифта

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

../../_images/using_fonts_load_font.webp

Загрузка файла шрифта

Вы также можете перетащить файл шрифта из дока FileSystem в свойство inspector , которое принимает ресурс Шрифта.

Предупреждение

В Godot 4.0 и более поздних версиях свойства фильтра и повтора текстуры определяются в месте её использования, а не в самой текстуре. Это также относится к шрифтам (как динамическим, так и растровым).

Для шрифтов, имеющих вид пиксельной графики, следует отключить билинейную фильтрацию, изменив настройку проекта Rendering > Textures > Canvas Textures > Default Texture Filter на Nearest (Ближайший).

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

Режим фильтра текстур также можно установить для отдельных узлов, наследующих от CanvasItem, установив CanvasItem.texture_filter.

Контуры и тени шрифта

Контуры и тени шрифтов можно использовать для улучшения читаемости, когда цвет фона заранее неизвестен. Например, это касается элементов HUD, отображаемых поверх 2D/3D-сцены.

Контуры шрифтов доступны в большинстве узлов, производных от Control, в дополнение к Label3D.

Чтобы включить контур шрифта в заданном узле, настройте переопределения темы Font Outline Color (Цвет контура шрифта) и Outline Size (Размер контура) в инспекторе. Результат должен выглядеть следующим образом:

Пример контура шрифта

Пример контура шрифта

Примечание

При использовании шрифта с рендерингом MSDF установите для параметра импорта MSDF Pixel Range значение как минимум в два раза больше размера контура, чтобы контур выглядел корректно. В противном случае контур может обрезаться раньше, чем предполагалось.

Поддержка теней шрифтов более ограничена: они доступны только в классах Label и RichTextLabel. Кроме того, тени шрифтов всегда имеют чёткие границы (но можно уменьшить их прозрачность, чтобы сделать их более плавными). Чтобы включить тени шрифтов в определённом узле, настройте переопределения темы Font Shadow Color (Цвет тени шрифта), Shadow Offset X (Смещение тени по оси X) и Shadow Offset Y (Смещение тени по оси Y) в узле Label или RichTextLabel соответствующим образом:

Настройка тени шрифта в узле Label

Настройка тени шрифта в узле Label

Результат должен выглядеть так:

Пример тени шрифта

Пример тени шрифта

Совет

Вы можете создать локальные переопределения для отображения шрифтов в узлах Label, создав ресурс LabelSettings, который можно использовать повторно в узлах Label. Этот ресурс имеет приоритет над theme properties.

Расширенные возможности шрифтов

Сглаживание

Вы можете настроить сглаживание шрифта при рендеринге, настроив antialiasing (сглаживание) и hinting (хинтинг). Это разные свойства с разными вариантами применения.

Antialiasing (Сглаживание) определяет, насколько сглаживаются края символов при растеризации шрифта. Метод сглаживания по умолчанию (Grayscale) хорошо работает на всех дисплеях. Однако, при малых размерах, сглаживание в оттенках серого может привести к тому, что шрифты будут выглядеть размытыми.

Резкость сглаживания можно повысить с помощью оптимизации субпикселей ЖК-дисплеев, которая использует структуру субпикселей большинства ЖК-дисплеев, смещая сглаживание шрифтов по каналам (красный/зеленый/синий). Недостаток этого подхода заключается в том, что он может привести к появлению "окантовки" по краям, особенно на дисплеях, не использующих стандартные RGB-субпикселы (например, OLED-дисплеи).

В большинстве игр рекомендуется использовать сглаживание по умолчанию (Grayscale). Для неигровых приложений стоит рассмотреть возможность оптимизации субпикселей ЖК-дисплея.

Сравнение сглаживания шрифтов

Сверху вниз: Disabled (отключено), Grayscale (оттенки серого), LCD Subpixel (субпиксельный ЖК-дисплей) (RGB)

Примечание

Antialiasing (Сглаживание) нельзя изменить для шрифтов, отрисованных с помощью MSDF – они всегда отрисовываются с использованием сглаживания в оттенках серого.

Hinting (сглаживание контура шрифта)

Hinting (Хинтинг) управляет степенью агрессивности привязки краев глифов к пикселям при растрировании шрифта. None обеспечивает максимально плавный вид, что может привести к размытию шрифта при малых размерах. Light (по умолчанию) обеспечивает более чёткую привязку краев глифов к пикселям только по оси Y, а Full — ещё более чёткую привязку краев глифов к пикселям как по оси X, так и по оси Y. В зависимости от личных предпочтений, вы можете использовать один из режимов хинтинга.

Сравнение hinting шрифтов

Сверху вниз: None, Light, Full hinting

Примечание

Если изменение режима хинтинга не даёт видимого эффекта после нажатия кнопки Reimport, обычно это связано с тем, что шрифт не содержит инструкций по хинтингу. Проблему можно решить, найдя версию файла шрифта с инструкциями по хинтингу или включив параметр Force Autohinter в панели импорта. В этом случае автохинтинг FreeType будет использоваться для автоматического добавления инструкций по хинтингу к импортируемому шрифту.

Subpixel positioning (Субпиксельное позиционирование)

Субпиксельное позиционирование можно настроить. Это функция FreeType, которая позволяет отображать глифы ближе к их первоначальной форме. Значение по умолчанию Auto автоматически включает субпиксельное позиционирование при малых размерах шрифта, но отключает его при больших размерах шрифта для повышения производительности растеризации.

Вы можете принудительно установить режим позиционирования субпикселей на Disabled, One half of a pixel (Половина пикселя) или One quarter of a pixel (Четверть пикселя). Четверть пикселя обеспечивает наилучшее качество, но увеличивает время растеризации.

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

Предупреждение

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

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

Мип-карты

По умолчанию шрифты не создают MIP-карт, чтобы уменьшить использование памяти и ускорить растеризацию. Однако, это может привести к тому, что уменьшенние размера шрифтов приведёт к зернистости. Это может быть особенно заметно с 3D текст, для которого не включен Fixed Size. Это так же может произойти при отображении текста традиционным растеризованным (не -MSDF) шрифтом в узле Control, масштаб которого меньше , чем (1, 1).

После выбора шрифта в панели FileSystem (Файловая система), вы можете включить MIP-карты в панели импорта, чтобы улучшить отображение уменьшенных шрифтов.

MIP-карты также могут быть включены для MSDF шрифтов. Это может немного улучшить качество рендеринга шрифта при размерах меньше значений по умолчанию, но MSDF шрифты изначально устойчивы к пикселизации.

Рендеринг шрифтов MSDF

Визуализация шрифта методом многоканального поля расстояния со знаком (MSDF) позволяет визуализировать шрифты любого рзмера, без необходимости повторной растеризации при изменении их размера.

Визуализация шрифта с помощью MSDF имеет 2 преимущества над традиционной растеризацией, которая используется по умолчанию в Godot:

  • Шрифт всегда выглядит четким, даже при больших размерах.

  • Когда символы шрифта большого размера визуализируются впервые, происходит меньше подтормаживаний, поскольку растеризация не выполняется.

Недостатки рендеринга шрифтов MSDF:

  • Более высокая базовая сложность визуализации. Это обычно незаметно на настольных платформах, но может оказывать влияние на низко производительных мобильных устройствах.

  • Шрифты маленького размера будут выглядеть менее четко, чем растеризованные, из-за отсутствия хинтования.

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

  • Для шрифтов MSDF нельзя включить субпиксельную оптимизацию ЖК-дисплеев.

  • Шрифты с обводкой, которая само-пересекается, не могут быть корректно отображены в режиме MSDF. Если вы заметили проблемы с отображением шрифтов загруженных с таких сайтов как Google Fonts, попробуйте загрузить шрифт с официального сайта автора шрифта.

Сравнение методов растеризации шрифта

Сравнение методов растеризации шрифта. Сверху вниз: растеризованный без передискретизации, растеризованный с передискретизацией, MSDF-шрифт

Чтобы включить MSDF для выбранного шрифта, выберите его в панели FileSystem (Файловая система), перейдите к панели Import (Импорт), включите Multichannel Signed Distance Field, затем нажмите Reimport:

Включение MSDF в настройках импорта шрифта

Включение MSDF в настройках импорта шрифта

Использование эмодзи

Godot имеет ограниченную поддержку эмодзи шрифтов:

  • Поддерживаются шрифты эмодзи CBDT/CBLC (встроенные PNG) и SVG.

  • Шрифты эмодзи COLR/CPAL (Собственный векторный формат) не поддерживается.

  • Сжатие растрового изображения EMJC (используется системным эмодзи шрифтом iOS) не поддерживается. Это означает, что для поддержки эмодзи в iOS вам необходимо использовать особый шрифт который использует сжатие растрового изображения SVG или PNG.

Чтобы Godot мог отобразить эмодзи, используемый шрифт (или один из его fallbacks) должен их включать. В противном случае, эмодзи не отобразятся и вместо них появятся символы-заполнители "тофу":

Вид по умолчанию при попытке отображения эмодзи в тексте

Вид по умолчанию при попытке отображения эмодзи в тексте

Добавив шрифт для отображения эмодзи, такой как Noto Color Emoji, вы получите ожидаемый результат:

Правильное отображение после добавления эмодзи шрифта к тексту

Правильное отображение после добавления эмодзи шрифта к тексту

Чтобы использовать обычный шрифт вместе с эмодзи, рекомендуется указать fallback font который указывает на шрифт эмодзи в расширенных параметрах импорта обычного шрифта. Если вы хотите использовать шрифт проекта по умолчанию во время отображения эмодзи оставьте свойство Base Font в FontVariation пустым, добавляя резервный шрифт, который указывает на шрифт эмодзи:

Совет

Эмодзи шрифты имеют довольно большой размер, поэтому вы можете load a system font чтобы добавить символы эмодзи вместо того чтобы добавлять их в ваш проект. Это позволит обеспечить полную поддержку в вашем проекте без увеличения размера экспортируемого PCK. Недостатком является то, что эмодзи будут выглядеть по-разному в зависимости от платформы, и загрузка системных шрифтов поддерживается не на всех платформах.

Системный шрифт также можно использовать в качестве резервного.

Использование шрифтов-иконок

Такие инструменты, как Fontello, можно использовать для создания файлов шрифтов, содержащих векторы, импортированные из SVG-файлов. Это можно использовать для визуализации пользовательских векторных элементов в тексте или для создания вытянутых 3D-значков с помощью 3D текст и TextMesh.

Примечание

Fontello в настоящее время не поддерживает создание многоцветных шрифтов (которые может отображать Godot). По состоянию на ноябрь 2022 года поддержка многоцветных шрифтов в инструментах для генерации иконочных шрифтов остаётся ограниченной.

В зависимости от ваших вариантов использования это может дать лучшие результаты по сравнению с использованием тега img в RichTextLabel. В отличие от растровых изображений (включая SVG, которые Godot растеризует при импорте), векторные данные можно масштабировать до любого размера без потери качества.

После загрузки сгенерированного файла шрифта загрузите его в свой проект Godot и укажите его как пользовательский шрифт для узла Label, RichTextLabel или Label3D. Перейдите в веб-интерфейс Fontello, затем скопируйте символ, выделив его и нажав Ctrl + C (Cmd + C в macOS). Вставьте символ в свойство Text узла Label. Символ будет отображаться как глиф-заполнитель в инспекторе, но он должен корректно отображаться в области просмотра 2D/3D.

Чтобы использовать пиктограммный шрифт вместе с традиционным шрифтом в одном элементе управления, можно указать пиктограммный шрифт как fallback. Это работает, поскольку пиктограммные шрифты используют область частного использования Unicode, которая зарезервирована для пользовательских шрифтов и изначально не содержит стандартных глифов.

Примечание

У некоторых современных иконочных шрифтов, таких как Font Awesome 6, есть версия для настольных компьютеров, использующая лигатуры для указания иконок. Это позволяет указывать иконки, вводя их названия непосредственно в свойство Text любого узла, поддерживающего отображение шрифтов. После того, как название иконки будет полностью введено в виде текста (например, house), оно будет заменено названием иконки.

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

Резервные шрифты

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

  • Используйте шрифт, поддерживающий только латинские символы, но используйте другой шрифт, чтобы можно было отображать текст с другим набором символов, например, кириллицей.

  • Используйте один шрифт для отображения текста и другой шрифт для отображения эмодзи или значков.

Откройте диалоговое окно "Advanced Import Settings", дважды щёлкнув по файлу шрифта в доке "FileSystem". Вы также можете выбрать шрифт в доке "FileSystem", перейти в док "Import" и выбрать пункт Advanced… внизу:

../../_images/using_fonts_advanced_import_settings.webp

Импортный док

В открывшемся диалоговом окне найдите раздел Fallbacks на боковой панели справа, щелкните текст Array[Font] (size 0), чтобы развернуть свойство, затем щелкните Add Element:

../../_images/using_fonts_font_fallbacks_add.webp

Добавление резервного шрифта

Щелкните стрелку раскрывающегося списка на новом элементе, затем выберите файл шрифта с помощью параметров Quick Load или Load:

../../_images/using_fonts_font_fallbacks_load.webp

Загрузка резервного шрифта

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

Примечание

Резервные шрифты также можно определить на локальной основе, аналогично Возможности шрифтов OpenType, но здесь это не рассматривается из соображений краткости.

Вариативные шрифты

Godot полностью поддерживает variable fonts, которые позволяют использовать один файл шрифта для представления различных начертаний и стилей (обычный, полужирный, курсив и т.д.). Это должно поддерживаться используемым файлом шрифта.

Чтобы использовать переменный шрифт, создайте ресурс FontVariation в том месте, где вы собираетесь использовать шрифт, затем загрузите файл шрифта в ресурс FontVariation:

../../_images/using_fonts_font_variation_create.webp

Создание ресурса FontVariation

../../_images/using_fonts_font_variation_load.webp

Загрузка файла шрифта в ресурс FontVariation

Прокрутите вниз до раздела Variation FontVariation, затем щелкните текст Variation Coordinates, чтобы развернуть список осей, которые можно настроить:

../../_images/using_fonts_font_variation_variable_font.webp

Список осей вариаций

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

Например, вот шрифт Inter V с жирностью 900 и наклоном -10:

../../_images/using_fonts_font_variation_variable_font_example.webp

Пример вариативного шрифта (Inter V)

Совет

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

Значение оси

Эффективная толщина шрифта

100

Тонкие (как волос)

200

Экстра тонкие (Ультра тонкие)

300

Лёгкий

400

Обычный (Нормальный)

500

Середний

600

Полужирный (Demi-Bold)

700

Жирный

800

Очень жирный (Ultra Bold)

900

Черный (Тяжелый)

950

Экстра черный (Ultra Black)

Вы можете сохранить FontVariation в файле ресурсов .tres, чтобы использовать его в других местах:

../../_images/using_fonts_font_variation_save_to_file.webp

Сохранение FontVariation во внешнем файле ресурсов

Искусственный полужирный шрифт и курсив

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

Однако для настоящих полужирных и курсивных шрифтов требуется больше файлов шрифтов, что увеличивает размер дистрибутива. Можно также использовать один файл variable font, но он будет больше, чем файл с одним непеременным шрифтом. Хотя размер файла обычно не является проблемой для настольных проектов, он может стать проблемой для мобильных/веб-проектов, стремящихся максимально сократить размер дистрибутива.

Чтобы обеспечить отображение жирных и курсивных шрифтов без необходимости поставки дополнительных шрифтов (или использования переменного шрифта большего размера), Godot поддерживает поддельные жирный и курсивный шрифты.

Псевдожирный/курсивный (вверху), настоящий полужирный/курсивный (внизу). Использован стандартный шрифт: Open Sans SemiBold

Псевдожирный/курсивный (вверху), настоящий полужирный/курсивный (внизу). Использован стандартный шрифт: Open Sans SemiBold

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

Чтобы использовать псевдожирный шрифт, создайте ресурс FontVariation в свойстве, где ожидается ресурс Font. Установите для параметра Variation > Embolden положительное значение, чтобы сделать шрифт более жирным, или отрицательное, чтобы сделать его менее жирным. Рекомендуемые значения — от 0.5 до 1.2 в зависимости от шрифта.

Псевдокурсив создаётся путём наклона текста, что достигается изменением посимвольного преобразования. Это также реализовано в FontVariation с помощью свойства Variation > Transform. Установка положительного значения для компонента yx преобразования символа приведёт к курсивному начертанию текста. Рекомендуемые значения — от 0.2 до 0.4 в зависимости от шрифта.

Регулировка интервала шрифта

В стилистических целях или для лучшей читаемости вы можете настроить отображение шрифта в Godot.

Создайте ресурс FontVariation в свойстве, где ожидается ресурс Font. В разделе Variation > Extra Spacing доступны 4 свойства, которые принимают положительные и отрицательные значения:

  • Glyph (Глиф): Дополнительный интервал между каждым глифом.

  • Space (Пробел): Дополнительный пробел между словами.

  • Top (Сверху): Дополнительный интервал над глифами. Используется для многострочного текста, а также для расчета минимального размера элементов управления, таких как Label и Button.

  • Bottom (Внизу): Дополнительный интервал под глифами. Он используется для многострочного текста, а также для расчета минимального размера элементов управления, таких как Label и Button.

Свойство Variation > Transform также можно настроить для растяжения символов по горизонтали или вертикали. Это достигается путём изменения компонентов xx (горизонтальный масштаб) и yy (вертикальный масштаб). Не забудьте скорректировать интервал между глифами с учётом любых изменений, поскольку преобразование глифов не влияет на то, сколько места каждый глиф занимает в тексте. Неравномерное масштабирование такого рода следует использовать с осторожностью, поскольку шрифты, как правило, не предназначены для отображения с растяжением.

Возможности шрифтов OpenType

Godot поддерживает функции шрифтов OpenType, которые представляют собой стандартизированный способ определения альтернативных символов, переключаемых без необходимости полной замены файлов шрифтов. Несмотря на то, что они называются функциями шрифтов OpenType, они также поддерживаются в файлах шрифтов TrueType (.ttf) и WOFF/WOFF2.

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

Существует 2 способа использования возможностей шрифтов OpenType:

Глобально для файла шрифта

Откройте диалоговое окно "Advanced Import Settings", дважды щёлкнув по файлу шрифта в доке "FileSystem". Вы также можете выбрать шрифт в доке "FileSystem", перейти в док "Import" и выбрать пункт Advanced… внизу:

../../_images/using_fonts_advanced_import_settings.webp

Импортный док

В открывшемся диалоговом окне найдите раздел Metadata Overrides > OpenType Features на боковой панели справа, щелкните текст Features (0 of N set), чтобы развернуть свойство, затем щелкните Add Feature:

../../_images/using_fonts_advanced_import_settings_opentype_features.webp

Переопределение функций OpenType в Расширенных Настройках Импорта

В определенном использовании шрифта (FontVariation)

Чтобы использовать функцию шрифта, создайте ресурс FontVariation, как это делается для переменного шрифта, а затем загрузите файл шрифта в ресурс FontVariation:

../../_images/using_fonts_font_variation_create.webp

Создание ресурса FontVariation

../../_images/using_fonts_font_variation_load.webp

Загрузка файла шрифта в ресурс FontVariation

Прокрутите вниз до раздела FontVariation OpenType Features, щелкните текст Features (0 of N set), чтобы развернуть свойство, затем щелкните Add Feature и выберите нужную возможность в раскрывающемся списке:

../../_images/using_fonts_font_variation_opentype_features.webp

Указание функций OpenType в ресурсе FontVariation

Например, вот шрифт Inter без функции Slashed Zero (вверху), а затем с включенной функцией OpenType Slashed Zero (внизу):

../../_images/using_fonts_font_variation_slashed_zero.webp

Сравнение функций OpenType (Inter)

Вы можете отключить лигатуры и/или кернинг для определенного шрифта, добавив функции OpenType, а затем сняв с них отметки в инспекторе:

../../_images/using_fonts_font_variation_disable_ligatures.webp

Отключение лигатур и кернинга для шрифта

Системные шрифты

Предупреждение

Загрузка системных шрифтов поддерживается только в Windows, macOS, Linux, Android и iOS.

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

Системные шрифты — это другой тип ресурсов по сравнению с импортированными шрифтами. Они фактически не импортируются в проект, а загружаются во время выполнения. Это даёт два преимущества:

  • Шрифты не включаются в экспортируемый файл PCK, что приводит к уменьшению размера файла экспортированного проекта.

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

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

Создайте ресурс SystemFont в том месте, где вы хотите использовать системный шрифт:

../../_images/using_fonts_system_font_create.webp

Создание ресурса SystemFont

../../_images/using_fonts_system_font_specify.webp

Указание имени шрифта для использования в ресурсе SystemFont

Вы можете либо явно указать одно или несколько названий шрифтов (например, Arial), либо указать имя псевдонима шрифта, который соответствует "стандартному" шрифту по умолчанию для системы:

Псевдоним шрифта

Windows

macOS/iOS

Linux

Android

sans-serif

Arial

Helvetica

Обрабатывается fontconfig

Roboto / Noto Sans

serif

Times New Roman

Times

Обрабатывается fontconfig

Noto Serif

monospace

Courier New

Courier

Обрабатывается fontconfig

Droid Sans Mono

cursive

Comic Sans MS

Apple Chancery

Обрабатывается fontconfig

Dancing Script (Сценарий танца)

fantasy

Gabriola

Papyrus

Обрабатывается fontconfig

Droid Sans Mono

На Android шрифт Roboto используется для латинского/кирилловского текста, а Noto Sans — для глифов других языков, например, CJK. В сторонних дистрибутивах Android точный выбор шрифтов может отличаться.

Если указано более одного шрифта, будет использован первый найденный в системе шрифт (сверху вниз). Названия шрифтов и псевдонимы регистронезависимы на всех платформах.

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

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

Примечание

В отличие от Windows и macOS/iOS, набор шрифтов по умолчанию в Linux зависит от дистрибутива. Это означает, что в разных дистрибутивах Linux для одного и того же имени или псевдонима системного шрифта могут отображаться разные шрифты.

Шрифты также можно загружать во время выполнения, даже если они не установлены в системе. Подробнее см. в разделе Загрузка и сохранение во время выполнения.

Предварительная визуализация шрифтов

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

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

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

Примечание

В обоих случаях (традиционном и MSDF) растеризация шрифтов выполняется на центральном процессоре. Это означает, что производительность графического процессора не влияет на время растеризации шрифтов.

Откройте диалоговое окно "Advanced Import Settings", дважды щёлкнув по файлу шрифта в доке "FileSystem". Вы также можете выбрать шрифт в доке "FileSystem", перейти в док "Import" и выбрать пункт Advanced… внизу:

../../_images/using_fonts_advanced_import_settings.webp

Импортный док

Перейдите на вкладку Pre-render Configurations диалогового окна "Дополнительные параметры импорта", затем добавьте конфигурацию, нажав на символ "плюс":

Добавление новой конфигурации предварительной визуализации в диалоговом окне "Дополнительные параметры импорта"

Добавление новой конфигурации предварительной визуализации в диалоговом окне "Дополнительные параметры импорта"

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

Существует 2 способа добавления глифов для предварительной визуализации в заданную конфигурацию. Оба подхода можно использовать совместно:

Использование текста из переводов

Для большинства проектов этот подход наиболее удобен, поскольку он автоматически использует текст из ваших языковых переводов. Недостаток заключается в том, что его можно использовать только в том случае, если ваш проект поддерживает internationalization. В противном случае используйте подход "Использование пользовательского текста", описанный ниже.

После добавления переводов в Настройки Проекта используйте вкладку Глифы из раздела Переводы, чтобы проверить переводы, дважды щелкнув по ним, а затем нажмите Формировать все строки в разделе Переводы и добавить глифы внизу:

Включение предварительной визуализации в диалоговом окне "Дополнительные параметры импорта" с глифами из вкладки "Переводы"

Включение предварительной визуализации в диалоговом окне "Дополнительные параметры импорта" на вкладке Глифы из переводов

Примечание

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

Использование пользовательского текста

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

Чтобы использовать существующий текст в качестве основы для предварительной визуализации, перейдите на вкладку Глифы из текста диалогового окна "Дополнительные параметры импорта", введите текст в окно справа, затем нажмите Формировать текст и добавить глифы в нижней части диалогового окна:

Включение предварительной визуализации в диалоговом окне "Дополнительные параметры импорта", глифы на вкладке "Текст"

Включение предварительной визуализации в диалоговом окне "Дополнительные параметры импорта" на вкладке Глифы из текста

Совет

Если ваш проект поддерживает internationalization, вы можете вставить содержимое ваших CSV- или PO-файлов в поле выше, чтобы быстро выполнить предварительную визуализацию всех возможных символов, которые могут быть отображены во время игры (исключая предоставленные пользователем или непереводимые строки).

Включая наборы символов

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

Чтобы использовать существующий текст в качестве основы для предварительной визуализации, перейдите на вкладку Глифы из таблицы символов диалогового окна «Дополнительные параметры импорта», затем дважды щелкните наборы символов, которые нужно включить справа:

Включение предварительной визуализации в диалоговом окне «Дополнительные параметры импорта», глифы на вкладке «Таблица символов»

Включение предварительной визуализации в диалоговом окне «Дополнительные параметры импорта» на вкладке Глифы из таблицы символов

Для обеспечения полной предварительной визуализации наборы символов, которые необходимо включить, зависят от поддерживаемых в вашей игре языков. Для английского языка необходимо включить только Basic Latin. Включение Latin-1 Supplement позволяет полностью охватить многие другие языки, такие как французский, немецкий и испанский. Для русского языка необходимо включить Cyrillic и так далее.

Свойства шрифта проекта по умолчанию

В разделе GUI > Theme расширенных настроек проекта вы можете выбрать способ отображения шрифта по умолчанию:

  • Default Font Antialiasing: Управляет методом antialiasing, используемым для шрифта проекта по умолчанию.

  • Default Font Hinting: Управляет методом hinting, используемым для шрифта проекта по умолчанию.

  • Default Font Subpixel Positioning: Управляет методом subpixel positioning для шрифта проекта по умолчанию.

  • Default Font Multichannel Signed Distance Field: Если true, шрифт проекта по умолчанию использует рендеринг шрифта MSDF вместо традиционной растеризации.

  • Default Font Generate Mipmaps: Если true, включает генерацию и использование mipmap для шрифта проекта по умолчанию.

Примечание

Эти настройки проекта влияют только на шрифт проекта по умолчанию (тот, который жестко закодирован в двоичном файле движка).

Свойства пользовательских шрифтов определяются соответствующими параметрами импорта. Чтобы переопределить параметры импорта по умолчанию для пользовательских шрифтов, используйте раздел Import Defaults диалогового окна «Параметры проекта».