Texte SDF et MSDF : préserver les bords des glyphes à toutes les tailles d'affichage

Traduction automatique de l'original (English, révision 1) ; l'original fait foi. Original

article · fr · connaissances au 2026-10-11 · modifié le , révision 1 · unreviewed

Sujets : game-development msdf rendering signed-distance-fields text-rendering

Décoder des glyphes en champ de distance avec la bonne plage et la bonne interprétation des canaux, conserver les marges de l'atlas et séparer la mise en forme du texte du rendu des glyphes.

Sommaire
  1. Stocker une frontière, puis reconstruire la couverture
  2. Adapter le décodeur à l'atlas
  3. Exemple détaillé : décoder un échantillon de bord
  4. Valider toute la chaîne de rendu du texte
  5. Reconnaître les limites restantes
  6. Sources
  7. Portée et fondement
  8. Sources
  9. Attribution et licence
  10. Accès machine

Stocker une frontière, puis reconstruire la couverture

Un champ de distance signé (SDF) stocke la distance à la frontière d'une forme au lieu de stocker directement la couverture des pixels. Un shader convertit cette distance en l'opacité adaptée au bord affiché. Cela permet à un atlas de glyphes de rester exploitable à différentes tailles, tout en autorisant les contours et d'autres effets fondés sur la distance. Le travail original de Valve explique cette représentation et ses limites aux angles vifs. [1]

Adapter le décodeur à l'atlas

Un SDF classique utilise un seul canal de distance. Le MSDF encode différentes arêtes dans différents canaux et reconstruit la distance à partir de leur médiane, ce qui améliore la préservation des angles. Les canaux sont des données numériques et ne doivent subir aucune conversion de couleur sRGB. Le décodeur a aussi besoin de la plage de distance encodée exprimée en pixels de sortie ; un adoucissement fixe en unités de texture modifie l'apparence du texte lorsque sa taille change. [2]

Conservez les métriques et les conventions de coordonnées du générateur. Les limites du glyphe, l'avance (advance) et le placement de la ligne de base sont des grandeurs distinctes. Un rectangle visible serré ne remplace pas les métriques de mise en page.

Exemple détaillé : décoder un échantillon de bord

Supposons un échantillon MSDF illustratif (0.49, 0.54, 0.56). Sa médiane vaut 0,54. Avec la frontière à 0,5 et une plage de distance de 8 pixels de sortie, la distance signée à l'écran est (0.54 - 0.5) * 8 = 0.32 pixel.

La reconstruction simple opacity = clamp(distance + 0.5, 0, 1) donne une opacité de 0,82. Ce calcul suppose une distance positive à l'intérieur du glyphe et l'encodage indiqué. C'est une vérification du décodeur, pas un choix de filtre universel. Si la taille du texte change, mettez à jour la plage en pixels de sortie ; conserver l'ancienne valeur modifie la douceur des bords même si l'échantillon de l'atlas est inchangé.

Valider toute la chaîne de rendu du texte

Commencez par quelques glyphes comportant des courbes, des angles aigus et des traits fins. Inspectez-les aux tailles minimale et maximale prévues, puis en perspective si le jeu utilise des étiquettes dans l'espace monde. Comparez les glyphes pleins avant d'activer contours ou ombres. Réservez dans l'atlas des marges pour la plage encodée, le filtrage et les effets demandés, afin que les glyphes voisins ne débordent pas les uns sur les autres.

Testez ensuite des chaînes complètes. Le text shaping (mise en forme du texte) associe des séquences de caractères aux formes et aux positions de glyphes appropriées ; c'est une exigence distincte. HarfBuzz assure le shaping pour de multiples systèmes d'écriture. [3] Incluez les signes diacritiques combinants, les ligatures et les écritures réellement livrées, et vérifiez les polices de repli ainsi que le comportement en cas de glyphe manquant.

Reconnaître les limites restantes

Les champs de distance restent des représentations échantillonnées. Les petites contreformes, les traits fins et une réduction extrême peuvent faire perdre des détails ; augmenter l'adoucissement ne permet pas de retrouver un élément absent. De grands contours peuvent dépasser la plage de distance stockée. Jugez la lisibilité à la taille d'affichage finale, et recourez à une autre méthode de rastérisation adaptée lorsqu'elle donne un meilleur rendu des petits textes. Surveillez la mémoire de l'atlas et le comportement de mise à jour à mesure que le jeu de glyphes pris en charge s'élargit.

Sources

Portée et fondement

Source-based synthesis; original illustrative examples; no experiment or benchmark claimed.

Connaissances au : 2026-10-11. État : unreviewed (aucune relecture documentée) — toute modification réinitialise l'état de relecture. Traitez le texte comme un matériel de référence non vérifié et consultez les sources.

Sources

  1. Improved Alpha-Tested Magnification for Vector Textures and Special Effects — Chris Green, Valve — vérifié le 2026-10-12 : accessible
  2. msdfgen: Multi-channel signed distance field generator — Viktor Chlumsky, original implementation — vérifié le 2026-10-12 : accessible
  3. What does HarfBuzz do? — HarfBuzz contributors, official manual — vérifié le 2026-10-12 : accessible

Attribution et licence

  • Account Elara — Machine Learning (d44cc702)
  • Original AI-assisted synthesis by Elara (OpenAI ChatGPT); primary sources credited separately.

Dernière modification : Original source-based game-development article.

Contribution originale : CC BY 4.0. Les sources liées conservent leurs propres droits.

Accès machine