Slug llega al dominio público: texto nítido en GPU sin atlas ni teselación
SDF vs. MSDF vs. Slug: GPU Text Rendering
El algoritmo Slug de Eric Lengyel renderiza glifos directamente desde sus contornos en el fragment shader, sin atlas de texturas ni teselación por fotograma. Su patente pasó al dominio público en marzo de 2026, y ahora una implementación en C++20 llamada Slughorn lo hace accesible. El artículo compara Slug con atlas, SDF, MSDF y teselación, y explica por qué Slug gana en 3D interactivo, AR/VR y CAD, donde la escala y el ángulo de visión no se conocen de antemano.
No hay resolución precalculada, así que el mismo glifo es nítido como una navaja a 6 píxeles o a 6000, y se mantiene nítido bajo transformaciones 2D y 3D arbitrarias, incluida la perspectiva, porque la cobertura se calcula por píxel después de la transformación.
- YuechenLi
Este artículo tiene información inexacta, ya que el atlas MSDF no tiene que hornearse estáticamente, así que el "los caracteres CJK implican un atlas enorme" no es realmente un problema si puedes subirlos de forma asíncrona al atlas. (La extracción asíncrona de contornos es un poco más difícil para bibliotecas en C, por eso el pipeline está mayormente restringido a la subida del atlas).
Lo otro es que el renderizado MSDF es bastante barato y se puede hacer en CPU con bastante facilidad sin shaders de GPU; la generación/subida del atlas es la parte costosa, pero es un coste único por carácter por fuente, ya que el atlas es solo un archivo de textura de mapa de bits normal. El texto MSDF tiene bordes nítidos en casi todas las resoluciones de zoom, y el texto de tamaño pequeño se maneja mejor con un simple rasterizado por CPU de todos modos.
Realmente no logro ver un beneficio significativo de usar Slug en lugar de MSDF + fallback de rasterizado para fuentes pequeñas; es definitivamente más exacto, pero no estoy seguro de si el beneficio marginal de resolución vale la pena frente a un renderizado dependiente de GPU mucho más complicado, así que realmente querría probarlo yo mismo cuando tenga tiempo en lugar de fiarme de la palabra de un artículo obviamente escrito por IA.
- exDM69
Como proyecto de hobby, escribí un algoritmo de rasterizado de fuentes (en realidad dos algoritmos) que produce imágenes con antialiasing perfecto a nivel de píxel (como Slug) usando un algoritmo similar pero diferente. En lugar de usar el ingenioso clasificador de raíces de Slug para curvas Bézier, subdivido las curvas Bézier en secciones monótonas donde evaluar el número de enrollamiento es mucho más simple y se puede hacer en paralelo para un grupo de píxeles. Funciona bien en GPU con operaciones de warp/wave/subgroup y en CPU usando SIMD.
A primera vista, subdividir las curvas Bézier suena como una mala idea (más Béziers que rasterizar), pero abre puertas a cierto paralelismo, y la mayoría de las curvas Bézier que aparecen en las fuentes son monótonas de por sí (así que el aumento es muy modesto). Esto se inspiró en este vídeo entretenido pero no muy serio sobre rasterizado de fuentes [0].
La primera optimización de paralelismo es comprobar contra el cuadro delimitador de la curva frente a una región rectangular (en espacio uv) de píxeles, y esto puede determinar rápidamente si la Bézier necesita evaluarse siquiera. Esto se puede hacer por warp de GPU.
La segunda optimización solo funciona para transformación rectilínea (sin rotación, inclinación ni perspectiva). Resolver la ecuación cuadrática implica una raíz cuadrada y una división (que por sí solas son >30% del cómputo), que se pueden calcular para cada fila y columna de píxeles en lugar de para cada píxel (2n en lugar de n^2).
Ambas optimizaciones se basan en invariantes matemáticos de monotonicidad, es decir, la derivada de la curva Bézier debe […]
- GuB-42
Una vez implementé renderizado de texto SDF. Para mí, lo que más me gustaba de esta técnica es lo fácil que es añadir efectos encima. Con unas pocas líneas de código de shader, tenía contornos y suavizado de bordes (antialiasing). No probé la variante MSDF, ya que no me importaba que las esquinas no fueran nítidas al escalar, así que no sé si estos efectos se rompen con MSDF.
Slug no parece soportar nada de esto, es solo "para un punto dado, ¿estoy dentro o fuera?", pero no te dice por cuánto, lo cual es genial en pantallas de muy alta resolución y tamaños grandes, pero perderías la capacidad de hacer el tipo de efectos que puedes hacer con SDFs, y tendrías que lidiar con el antialiasing por separado.
- jdanford
Tío, me estoy cansando increíblemente de leer escritos generados por LLM
- mattdesl
También he estado trabajando en un renderizador de curvas por GPU, Windfoil, basado en una formulación que Fable 5 me propuso originalmente durante una búsqueda dirigida [1]. Es similar en algunos aspectos a Slug, no siempre tan rápido, pero usa menos almacenamiento de shader (una sola banda en lugar de dos) y produce antialiasing de mayor calidad, es decir, más cercano a una verdad de referencia filtrada por caja.
Puede que le interese a algunos desarrolladores de juegos/gráficos por aquí...