Skip to content
signfast

Quick rating

Community listing page, reviews may not be monitored by the author.

signfast

No reviews yet

Fixes FPS drops caused by walls of glowing signs by giving sign text a single-page font, leaving your UI font untouched.

Mod Loaders
Minecraft

About

Description

SignFast gives sign text its own single-page font and touches nothing else.

The problem

On Minecraft 1.21.9+, a wall of glowing signs can tank your framerate. It is not the glow effect itself - it is the font atlas.

Large font resource packs (MCsans+, Emoji+, and anything shipping thousands of CJK glyphs) get split across hundreds of 256x256 atlas pages. Every sign line whose glyphs land on different pages forces the text buffer to flush, and a 120-sign display re-lays out roughly 480 lines per frame.

Measured on a 120-sign panel: 40 ms/frame and ~5.9 MB allocated per frame, versus 7 ms with the same scene out of view.

The fix

Sign text is redirected to a dedicated font through one mixin on SignText#getMessage:

original.copy().withStyle(style -> style.withFont(new FontDescription.Resource(SIGNFONT)))

The bundled font (assets/signfast/fonts.json) points at a 512x288 atlas, so the entire ASCII range resolves to one page. Your UI, chat, tooltips and item names keep your resource pack's font exactly as it was.

Features

  • Sign text renders from one 512x288 atlas page - 94 ASCII glyphs, 32x48 sampling, 12 px output
  • UI font untouched - no global default.json override, no visual downgrade anywhere else
  • Zero configuration - no GUI, no config file, no dependencies
  • Ships its own assets - the font lives inside the jar, nothing to enable in the resource pack screen

Results

Same sign wall, same camera position, same settings:

  • Before: 26 FPS, 40 ms frame time
  • After: 120 FPS, 8 ms frame time

Compatibility

  • Client-side only. Nothing is sent to the server; works on vanilla servers.
  • Requires Minecraft 1.21.9 - 1.21.11 (the font API changed to FontDescription and fonts.json in 1.21.9).
  • Fabric only. Fabric API is not required.
  • CJK characters fall back to the vanilla unicode pages, so Chinese and Japanese text on signs still renders.

中文说明

问题

1.21.9 之后,成片的荧光告示牌会让帧数暴跌。真正的原因不是发光效果,而是字体图集。

大型字体资源包会被切成几百个 256x256 的图集页。告示牌每一行的字符只要落在不同页上,文字缓冲就会被迫 flush;120 块牌子的显示器每帧要重新排布约 480 行。实测:40 ms/帧、每帧分配约 5.9 MB,而同样场景不在视野内时只有 7 ms。

解决方式

SignFast 用一个 mixin 拦截 SignText#getMessage,把告示牌文字单独挂到一个内置的单页字体上。字体是一张 512x288 的图集,整个 ASCII 范围都落在同一页。UI、聊天、提示框、物品名仍然使用你资源包原来的字体。

特性

  • 告示牌文字只用一页 512x288 图集,94 个 ASCII 字符,32x48 采样,输出 12 px
  • UI 字体完全不变,不覆盖全局 default.json
  • 零配置,没有 GUI、没有配置文件、没有前置依赖
  • 自带资源,字体就在 jar 里,不需要在资源包界面启用任何东西

效果

同一面墙、同一位置、同一设置:26 FPS / 40 ms 变成 120 FPS / 8 ms。

兼容性

纯客户端,不向服务器发送任何数据;需要 Minecraft 1.21.9 - 1.21.11;仅 Fabric,不需要 Fabric API;中文等 CJK 字符回退到原版 unicode 页,告示牌上的中文照常显示。