
Caxton
Мод Caxton для Майнкрафт добавляет поддержку TrueType и OpenType шрифтов. Чёткий текст, настоящие жирные и курсивные начертания, сложное отображение текста без использования AWT.
Caxton
Caxton (назван в честь [William Caxton]) - это мод для Майнкрафт, который добавляет полноценную поддержку TrueType и OpenType шрифтов. Если вы когда-нибудь хотели, чтобы текст в игре выглядел так же круто, как на вашем рабочем столе - этот мод для вас.
Доступен на Modrinth и CurseForge.
Что даёт Caxton
В ванильном Майнкрафт шрифты - это по сути растровые картинки. Они выглядят нормально только при определённом размере, а при масштабировании начинают размываться или пикселиться. Caxton решает эту проблему кардинально.
- Чёткий текст любого размера благодаря технологии [MSDF] - буквы остаются crisp даже при сильном зуме
- Настоящие жирные и курсивные шрифты - не имитация наклоном, а реальные глифы из файла шрифта
- Сложное отображение текста - лигатуры, кернинг, всё как в нормальных редакторах
- Не использует AWT - меньше лагов, больше производительности
Текущие ограничения
Правда, есть пара моментов, которые стоит знать:
- Арабское письмо в старых шрифтах пока не поддерживается. Если вам нужен арабский текст - придётся использовать шрифт с поддержкой арабского под Caxton.
- Генерация MTSDF из шрифтов - процесс затратный. Но Caxton кэширует результат после первого запуска, так что дальше всё летает.
- Многие UI-элементы в Майнкрафт и модах делают неправильные предположения о рендеринге текста. GUI элементы пропатчены, но текст выравнивается по левому краю независимо от направления.
- Хинтинг шрифтов скорее всего никогда не будет поддерживаться.
Совместимость с модами и ресурспаками
Совместимо с оговорками
| Мод | Версия | Примечания |
|---|---|---|
| [Sodium] | Любая, кроме Caxton <0.6.0 + Sodium 0.5.5 | Контурный текст неправильно рендерился с Sodium 0.5.5 и старыми версиями Caxton |
| [ImmediatelyFast] | ≥1.2.0 | Отключи опцию sortTextRenderLayers у Caxton (делается автоматически). Убедись, что experimental_sign_text_buffering у ImmediatelyFast выключен |
| [Exordium] | Любая | Отключи буферизацию табличек у Exordium |
Несовместимо
| Мод | Версия | Примечания |
|---|---|---|
| [Iris Shaders] | Любая | Кастомные core шейдеры не поддерживаются Iris; текст в мире с MSDF шрифтами не рендерится |
| [Emojiful] | Любая | Полностью заменяет стандартный рендерер текста Майнкрафт |
| [MemoryLeakFix] | ≤1.1.1 | Конфликт на старте |
| [VanillaIcecreamFix] | ≤1.2.1-beta+1.20.4 | Конфликт с Fabric ASM зависимостью Caxton - исправлено в 1.2.2-beta+1.21 |
| [Porting Lib] | <1.2.1451-beta+1.18.2/2.1.1453+1.19.2 | Конфликт с API регистрации core шейдеров Fabric API |
| [Advent of Ascension] | 1.20.4-3.7.7 | Не крашится, но контурный текст от AoA не использует MSDF шрифты, и скролл-панель AoA не обрезает текст в MSDF шрифтах (планируется аддон совместимости) |
Неправильно обрабатывает разметку
Эти моды не должны крашить игру, но GUI элементы могут вести себя неожиданно, а в логе появятся предупреждения:
| Мод | Версия | Примечания |
|---|---|---|
| [IBE Editor] | Любая | Использует кастомный виджет текстового поля, который копирует большую часть ванильного кода рендеринга Майнкрафт |
| [Roughly Enough Items] | Любая | Использует неподдерживаемые методы в некоторых виджетах |
Ресурспаки с кастомными core шейдерами для текста
Ресурспаки, которые изменяют core шейдеры для текста (например, "Dark UI" и "Transparent UI" от [Vanilla Tweaks]), потребуют модификации для работы со шрифтами Caxton.
Поддержка ОС
Caxton использует нативную библиотеку для шейпинга текста и генерации MSDF. В предсобранной версии есть библиотеки для x86_64 Windows и Linux. Если у вас другая платформа - придётся собрать мод самостоятельно.
Если мод не распознаёт вашу платформу - измени rustTarget в config/caxton.json на соответствующее имя платформы Rust и сообщи об этом.
Важно: так как у автора нет ни одного Mac, собрать бинарники для macOS из-за лицензионных ограничений невозможно.
Как использовать Caxton
В комплекте с модом идут два встроенных ресурспака со шрифтами: [Inter] и [Open Sans]. Если они не подходят - можно использовать свой шрифт через ресурспак.
Перед распространением ресурспака с файлом шрифта обязательно проверь лицензию!
Добавление шрифтов через ресурспаки
Caxton добавляет провайдер шрифтов типа caxton, который поддерживает ключи regular, bold, italic и bold_italic. Каждый можно задать идентификатором <namespace>:<path>, который указывает на файл assets/<namespace>/textures/font/<path>. Для дополнительных опций используй объект с ключом file:
{
// Единственный обязательный элемент.
"file": "<namespace>:<path>",
// Коэффициент масштабирования шрифта от стандартного размера.
// Если 1.0, то шрифт масштабируется так, чтобы ascent был равен 7 пикселям стандартного bitmap-шрифта.
// Добавлено в Caxton 0.3.0.
"scale_factor": 1.0,
// Смещение тени как множитель размера пикселя memefont.
"shadow_offset": 1.0,
// Смещение текста по осям X и Y в пикселях memefont.
// Добавлено в Caxton 0.4.4.
"shift": [
0.0,
0.0
],
// 32-битное целое число, биты которого интерпретируются как 32-битное число с плавающей точкой,
// описывающее наклон символов.
// Можно использовать для имитации курсива в шрифтах без курсивного варианта,
// но всегда предпочтительнее использовать выделенный курсивный вариант.
// Добавлено в Caxton 0.5.6.
// Не поддерживается в Caxton 0.7.0.
"the_font_designer_couldnt_be_assed_to_make_an_italic_variant_so_slant_the_text": 0,
// Список тегов функций OpenType.
"features": [],
// Влияет только на растровую технологию. Для MSDF шрифтов интерполяция всегда включена.
// Если true, тексели в битмапе глифа будут интерполироваться.
// Добавлено в Caxton 0.4.0. Заменено настройкой метаданных шрифта в Caxton 0.7.0.
"blur": false
}
Если в JSON-файле шрифта есть объект caxton_providers, он будет использован вместо providers при установленном Caxton. Это позволяет загрузить шрифт Caxton с запасным вариантом, если Caxton не установлен.
Также можно добавить файл assets/<namespace>/textures/font/<path>.json с настройками растеризации:
{
// Указывает фактический путь к файлу шрифта.
"path": "<path of font file>",
// Все опции необязательны.
"shrinkage": 32.0,
"margin": 4,
"range": 4,
"invert": null,
"variations": [],
"face_index": 0,
"tech": "msdf",
"max_mipmap": 0,
"blur": false
}
Не забудь указать расширение файла шрифта. Если шрифт лежит в assets/example/textures/font/example.otf, то JSON должен быть в assets/example/textures/font/example.otf.json (не example.json).
Глобальная конфигурация
Настройки в config/caxton.json:
{
"rustTarget": null,
"tweakExpText": true,
"sortTextRenderLayers": false,
"fatalOnBrokenMethodCall": false,
"debugRefcountChanges": false,
"disableEasterEggs": false
}
Сборка из исходников
Если хочешь собрать Caxton сам - понадобятся [Rust toolchain] и [Clang] в дополнение к Gradle.
По умолчанию нативная библиотека собирается только для вашей платформы. Чтобы собрать для других платформ, укажи дополнительные цели через запятую в свойстве xyz.flirora.caxton.additionalTargets. Например:
gradle build -Dxyz.flirora.caxton.additionalTargets=x86_64-pc-windows-gnu
Если получаешь ошибку о неизвестных целях - измени переменную cargoCrossBuildTasks в caxton-impl/build.gradle.
Сравнение с другими модами
BetterFonts / TrueType Font Replacement
Старый мод, который использует Java AWT для разметки текста и растеризует глифы в битмапы с ограниченным разрешением. Но он правильно реализует жирные и курсивные стили и сложные скрипты.
Smooth Font
Мод для версий 1.7-1.12, улучшающий рендеринг текста при разных масштабах. Но код закрытый (ARR).
ThaiFixes
Реализует собственные процедуры шейпинга для тайского языка - бесполезно для других языков со сложным рендерингом.
Modern UI
Поддерживает сложный рендеринг текста и настоящие жирные/курсивные стили, исправляет многие проблемы ванильной разметки (например, MC-117311). Но текст не такой чёткий по краям и использует AWT для разметки.
Minecraft 1.13+
С версии 1.13 Майнкрафт поддерживает TrueType и OpenType шрифты, но реализация та же, что и для bitmap-шрифтов - конвертирует глифы в битмапы и наивно размечает текст. К тому же неправильно обрабатывает метрики глифов.
Благодарности (техническая часть)
Caxton стал возможен благодаря: Fabric, Architectury Loom, Rust, Gradle Cargo Wrapper, HarfRust/RustyBuzz, Skrifa/ttf-parser, fdsm/msdfgen, ab-glyph-rasterizer, JNI bindings for Rust, flate2, Rayon, Cross, Fabric-ASM, MixinExtras, Caffeine, Inter (OFL-1.1), Open Sans (OFL-1.1).
Переводы: IcedDog (китайский), JustFoxxo (польский).
