8 floats per glyph: u0, v0, u1, v1, centerX, centerY, halfW, halfH (atlas px).
4 floats per word: glyphStart, glyphCount, widthPx, 0.
Maximum glyph count across all words — drives the per-particle vertex count.
Em height (ascent + descent, atlas px) — scale = worldHeight / emPx.
CPU-precomputed font/word tables uploaded to GPU storage buffers so the particle
glyph_trailshader can typeset words along trails without doing any string layout on the GPU. All metrics stay in atlas pixels; the shader scales them to world units.