Principe des méthodes classiques

Le rendu texte sur GPU repose sur la conversion d’une police vectorielle en données exploitables par le fragment shader. La technique la plus ancienne consiste à rasteriser chaque glyphe dans une texture atlas à une taille fixe. Cette approche, largement adoptée parce qu’elle ne nécessite que des quads texturés, montre rapidement ses limites : lorsqu’on agrandit le texte, le bitmap devient flou, et lorsqu’on le réduit, les traits fins disparaissent ou scintillent. Le problème s’accentue avec les alphabets CJK, où des dizaines de milliers de glyphes exigent plusieurs résolutions, entraînant une consommation de mémoire prohibitive. De plus, la texture ne porte aucune information sur la géométrie 3D, ce qui rend le texte appliqué à des surfaces en perspective visuellement mou.

Signed distance fields (SDF) et limites

En 2007, Chris Green a introduit les signed distance fields (SDF) lors du SIGGRAPH, une méthode qui stocke, pour chaque texel, la distance signée au bord le plus proche du glyphe. Le shader compare cette valeur à zéro pour déterminer l’intérieur ou l’extérieur, ce qui permet une interpolation lisse et un antialiasing économique. Un SDF unique suffit pour plusieurs tailles, tant que la résolution du champ reste suffisante. Cependant, la distance est un scalaire : aux coins aigus, où la fonction distance présente une discontinuité, l’interpolation bilinéaire arrondit le coin, entraînant un adoucissement visible. Lorsque le champ est trop petit, les traits fins se fragmentent et les détails se brouillent, limitant l’usage aux interfaces UI ou aux HUD où les tailles restent modérées.

Multi‑channel signed distance fields (MSDF) et amélioration des coins

Viktor Chlumsky a proposé en 2015, puis publié en 2018, les multi‑channel signed distance fields (MSDF). Au lieu d’un seul canal, trois canaux (rouge, vert, bleu) codent les distances vers trois arêtes distinctes du glyphe. Cette séparation préserve la géométrie des coins : chaque canal reste continu le long de son arête, évitant l’arrondissement induit par l’interpolation. Le rendu MSDF nécessite un fragment shader légèrement plus complexe, qui combine les trois valeurs pour reconstruire la frontière exacte. Les tests montrent que les glyphes conservent leur netteté même à des facteurs d’échelle élevés, tout en conservant les avantages de la texture unique. La contrainte principale réside dans la génération du champ, qui demande un pré‑traitement plus coûteux que le SDF classique.

Slug et implémentation Slughorn

En 2017, Eric Lengyel a publié l’algorithme Slug, qui élimine totalement l’étape de pré‑baking. Slug rasterise les contours vectoriels directement dans le fragment shader, sans atlas ni tessellation par image. Le brevet déposé en 2019 a été placé dans le domaine public le 17 mars 2026, ouvrant la voie à des implémentations libres. Slughorn, développé en C++20, incarne cette approche : il charge les courbes de Bézier (quadratiques pour TrueType, cubiques pour CFF) et calcule, pixel par pixel, le nombre de traversées de rayon pour appliquer la règle de remplissage non‑zéro. Cette méthode garantit une netteté parfaite à n’importe quelle résolution ou transformation 3D, car aucune approximation bitmap n’est impliquée. Le coût réside dans le calcul du winding number à chaque fragment, ce qui augmente la charge du GPU mais reste viable sur les architectures modernes grâce aux unités de calcul parallèles. Slug se révèle ainsi pertinent pour les applications où le texte change chaque image, comme les interfaces de réalité augmentée ou les panneaux dynamiques en jeu.