Scrive una guida per i fonti SDF | Mewayz Blog Skip to main content
Hacker News

Scrive una guida per i fonti SDF

Cumenti

14 min read Via www.redblobgames.com

Mewayz Team

Editorial Team

Hacker News

Perchè u Font Rendering hè sempre più impurtante di ciò chì pensate

Ogni pixel nantu à u vostru schermu conta una storia, è nimu ùn hè più evidenti chì in quantu u testu si rende in i dispositi, risoluzioni è livelli di zoom. I fonts bitmap tradiziunali ci anu servitu bè in l'era di i monitori di risoluzione fissa, ma l'esplosione di display high-DPI, interfacce responsive è applicazioni 3D in tempu reale hà espostu i so limitazioni fundamentali. Inserisci i fonts Signed Distance Field (SDF) - una tecnica di rendering chì hà rivoluzionatu in silenziu cumu l'applicazioni muderne mostranu un testu croccante è scalabile senza gonfiare a memoria o sacrificà u rendiment.

Sia chì stai custruendu una UI di ghjocu, un dashboard di dati, o una piattaforma affruntata à i clienti chì deve esse affissante in tuttu, da un smartwatch à un monitor 4K, capisce i fonti SDF vi dà un seriu vantaghju tecnicu. Questa guida scompone u cuncettu da i primi principii, cammina à traversu u pipeline di generazione, è offre cunsiglii pratichi per l'integrazione di fonti SDF in i vostri prughjetti.

Chì hè esattamente un campu di distanza firmatu ?

Un Campu di Distanza Signatu hè una struttura bidimensionale induve ogni pixel guarda a distanza da quellu puntu à u bordu più vicinu di un contorno di glifi. A parte "firmata" hè critica: i pixel in u cunfini di glifi guardanu i valori pusitivi, mentre chì i pixel fora almacenanu i valori negativi (o viceversa, secondu a cunvenzione). U cunfini stessu si trova à u passaghju zero. Questa semplice rapprisintazioni matematica codifica una quantità straordinaria di informazioni di forma in una maghjina compacta in scala di grigi.

A tecnica hè stata popularizata da u paper SIGGRAPH di Valve di u 2007, induve Chris Green hà dimustratu chì texture SDF quant'è 64x64 pixel puderanu pruduce un testu chì restava nitido à ingrandimenti estremi - risultati chì necessitanu un bitmap 4096x4096 per ottene una rasterizazione tradiziunale. L'intruduzione chjave hè chì l'interpolazione bilineare integrata di a GPU, chì produce risultati sfocati nantu à i caratteri bitmap regulari, in realtà produce una interpolazione di distanza liscia è precisa nantu à texture SDF.

In termini pratichi, un unicu atlas di font SDF - tipicamente 512x512 o 1024x1024 pixel - pò cuntene un inseme di caratteri sanu chì rende pulitu à quasi ogni dimensione. Paragunate cù l'approcciu di fonti bitmap, chì necessitanu atlasi di texture separati per ogni dimensione di font (16px, 24px, 32px, 48px, è cusì), cunsumendu rapidamente megabyte di memoria di texture per una sola tipografia.

Cumu sò generati l'atlasi di font SDF

U pipeline di generazione principia cù un schedariu di fonti vettoriali (TTF o OTF) è produce un atlas di texture più un schedariu di metadati chì descrive a pusizione, a dimensione è e metriche di ogni glifo. Diversi arnesi open-source trattanu stu prucessu, cù msdf-atlas-gen, Hiero(parti di libGDX), è msdfgen sò i più utilizati. U prucessu implica a rasterizazione di ogni glifo à una alta risuluzione, u calculu di u campu di distanza utilizendu algoritmi cum'è a trasformazione di distanza euclidiana sequenziale di 8 punti (8SSEDT), è dopu imballà i risultati in una sola texture.

Ci sò trè varianti principali di SDF chì duvete capisce:

  • SDF Standard (canale unicu): Memorizza un valore di distanza per pixel. Produce curve lisce, ma lotta cù angoli vivi, chì tendenu à arrotondassi à risoluzioni più basse. U megliu per u testu di u corpu è e situazioni induve un ligeru ammollimentu di l'angle hè accettabile.
  • SDF multicanale (MSDF): Aduprà trè canali di culore (RGB) per codificà l'infurmazioni di distanza da diversi segmenti di bordu. Questu conserva anguli affilati è dettagli fini assai megliu cà SDF à un canale, facendu a scelta preferita per a maiò parte di l'applicazioni muderne. Sviluppatu da Viktor Chlumský, MSDF hè diventatu u standard de facto.
  • Multi-canale + True SDF (MTSDF): Aggiunge un quartu canale alfa chì cuntene un campu di distanza vera à fiancu à i trè canali MSDF. Questu furnisce u megliu di i dui mondi - anguli sharp da MSDF è infurmazione precisa di distanza per l'effetti da u veru SDF - à u costu di textures un pocu più grande.

Un cumandamentu tipicu di generazione chì usa msdf-atlas-gen puderia specificà una dimensione di font di 42 pixel, una distanza di distanza di 4 pixel, è una dimensione di texture di 1024x1024. U paràmetru di distanza di distanza cuntrolla quantu luntanu da u bordu di glifi si estende l'infurmazioni di distanza, chì affetta direttamente a qualità massima di contorni, ombre è effetti di luce chì pudete applicà in runtime.

U Fragment Shader: induve a magia succede

U latu di rendering di i fonti SDF hè elegantemente simplice. In u vostru fragment shader, tastà a texture SDF, paragunate u valore di distanza cun un sogliu (tipicamente 0.5 per u glyph edge), è utilizate una funzione di smoothing per antialias a transizione. A logica core in GLSL s'assumiglia à questu: mostra a mediana di i trè canali MSDF, calculà u gradiente di distanza di u spaziu di u screnu per un antialiasing propiu, dopu applicà una funzione liscia per pruduce u valore alfa finali.

U veru putere di i fonti SDF si trova micca solu in l'indipendenza di a risoluzione, ma in u costu triviale di aghjunghje effetti. I contorni, l'ombre di goccia, i bagliori interni, è ancu i biselli 3D ponu esse tutti calculati in u stessu passaghju di sfumatura semplicemente testendu contru à diverse soglie di distanza - senza texture supplementari, senza chiamate extra extra, senza strati di effetti pre-cucinati.

Per un effettu di contornu di basa, pruvate dui soglie: unu per u bordu esterno di u contornu è unu per u riempimentu internu. I pixels chì cadenu trà questi soglie piglianu u culore di cuntorni; i pixels à l'internu piglianu u culore di riempimentu. L'ombre di goccia funzionanu in modu simile - cumpensà e coordenate di texture prima di campionà, applicà un intervallu di lisciamentu più largu, è cumpone l'ombra daretu à u glifo principale. Queste operazioni aghjunghjenu un costu GPU insignificante perchè sò operazioni puramente aritmetiche nantu à u valore di distanza digià campionatu.

L'antialiasing di u spaziu di u screnu merita una attenzione speciale. Una implementazione ingenua usa una larghezza di lisciatura fissa, chì produce un testu chì pare bè à una taglia, ma o troppu sfocata o troppu chjappata à l'altri. L'approcciu currettu calcula a larghezza di liscia da i derivati ​​di u spaziu di u screnu di u campu di distanza (usendu fwidth()in GLSL o ddx/ddyin HLSL). Questu adatta automaticamente l'antialiasing à a dimensione di rendering attuale, producendu bordi sempre croccanti indipendentemente da u livellu di zoom o a distanza di visualizazione.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

Insidie cumuni è cumu evitari

Malgradu a so eleganza, i fonti SDF venenu cun gotchas chì ponu invià ancu i sviluppatori sperimentati. U prublema più cumuni hè una distanza di distanza insufficiente durante a generazione di l'atlas. Se a distanza di distanza hè troppu ristretta, effetti cum'è contorni grossi o grandi ombre si cliparanu bruscamente à u bordu di a gamma codificata. Una bona regula hè di stabilisce a distanza di distanza à almenu duie volte u raghju di l'effettu massimu chì pensa à aduprà, misurata in pixel atlas.

Un altru prublema frequente hè u filtru di texture. Textures SDF deveusà filtru bilineare - u filtru vicinu vicinu distrugge l'interpolazione chì face u travagliu di a tecnica, producendu testu in bloccu, aliased. Tuttavia, duvete disattivà a mipmapping per l'atlas SDF, postu chì i campi di distanza mipmapped producenu risultati sbagliati à livelli mip più bassi induve i bordi di glifi distanti ponu sanguinà l'un l'altru.

Kerning è layout di testu sò ancu spazii induve i sviluppatori spessu taglianu i cantoni. L'atlas SDF gestisce u rendering, ma a forma di testu propiu - spaziatura di caratteri, coppie di kerning, altezza di linea è testu bidirezionale - necessita sempre un mutore di layout. Biblioteche cum'è HarfBuzzo FreeType trattanu questu currettamente. Saltà a forma di testu propiu in favore di una spaziatura simplice di larghezza fissa hè u solu modu più veloce per fà chì a vostra resa di testu pare dilettante, indipendentemente da quantu hè pulita a vostra implementazione SDF.

  1. Generate à una risoluzione generosa. Mentre i fonti SDF scalanu bè, cuminciendu cù una dimensione di glifi di almenu 32-48 pixel in l'atlas conserva i dettagli fini in glifi cumplessi cum'è caratteri CJK o scripts decorattivi.
  2. Utilizà MSDF nantu à SDF unicu-canale, salvu chì ùn avete micca un mutivu specificu per ùn fà. A migliione di a precisione di u cantonu hè drammatica cù un overhead insignificante.
  3. Prova à dimensioni estreme. Rende u vostru testu à 8px è 200px durante u sviluppu. I prublemi invisibili à dimensioni normali diventanu evidenti à l'estremi.
  4. Memoria di texture di prufilu. Un unicu atlas MSDF 1024x1024 (RGB, 8-bit) cunsuma 3 MB di memoria GPU. Hè tipicamenti menu di duie dimensioni di font bitmap à qualità equivalente.
  5. Pre-calculate i quads di glifi in u CPU. U buffer di vertice chì cuntene quads di glifi posizionati cambia solu quandu u cuntenutu di testu cambia, micca ogni quadru. Cache in modu aggressivu.

Fonts SDF in Pruduzzione: Applicazioni in u mondu reale

I mutori di ghjocu anu guidatu l'adopzione di fonti SDF, ma a tecnica si sparghje assai oltre u ghjocu. Google Maps usa etichette SDF-rendered per i so sovrapposizioni di carte, chì permettenu i nomi di i posti per esse leghjite da u zoom à livellu di strada à u livellu di u cuntinente senza rasterizà. Mapbox GL si basa interamente nantu à i glifi SDF per i so mapi resi WebGL, servendu piastrelle di atlas SDF pregenerate da u so CDN. In i dui casi, l'indipendenza di a risoluzione di i fonti SDF elimina una classe intera di bug di rendering à livellu di zoom.

L'applicazioni cummerciale beneficianu ugualmente. Qualchese piattaforma chì rende testu dinamicu in un cuntestu di tela o WebGL - pensate dashboards, visualizazioni di dati, rapporti interattivi, o signalazione digitale - guadagna vantaghji immediati da a rendering SDF. In Mewayz, induve l'imprese gestiscenu tuttu, da a fattura à l'analitiche attraversu 207 moduli integrati, a resa di testu coherente è performante in i dispositi ùn hè micca un lussu - hè un requisitu. Quandu u pruprietariu di un ristorante cuntrolla u so dashboard di riservazione in un telefunu è u so contabile riviseghja i stessi dati nantu à un monitor di 32 inch, u testu deve esse ugualmente leggibile senza spedite fonti separati per ogni densità di schermu.

L'ecosistema WebGL hà resu fonti SDF sempre più accessibili per i sviluppatori web. Biblioteche cum'è three-mesh-uie troika-three-textfurniscenu un rendering di testu MSDF drop-in per scene Three.js, mentre chì i sviluppatori di livellu più bassu ponu implementà un rendering SDF persunalizatu cù menu di 100 linee di codice shader. A tecnica hà ancu truvatu u so modu in u sviluppu mobile nativu attraversu frameworks cum'è Flutter, chì usa un rendering basatu in SDF per u so mutore di testu persunalizatu.

Al di là di u testu: Induve si dirigenu e tecniche SDF

U cuncettu di u campu di distanza si estende assai oltre u rendering di fonti. I diseggiani UI utilizanu tecniche SDF per creà icone indipendenti da a risoluzione, forme vettoriali scalabili, è ancu elementi procedurali di UI cum'è rettanguli arrotondati cù anguli perfetti di pixel. U stessu approcciu basatu in atlas chì rende i fonti SDF efficienti in memoria si applica ugualmente à i set di icone - un unicu atlas SDF 512x512 pò cuntene centinaie di icone chì rendenu perfettamente in ogni dimensione.

In a fruntiera di ricerca, stanu emergenti approcci basati in rete neurale chì imparanu à generà campi di distanza direttamente da i contorni vettoriali, putenzialmente pruducendu risultati di qualità superiore à i metudi algoritmichi tradiziunali. Intantu, u rendering di tracce di larghezza variabile utilizendu texture SDF apre novi pussibulità per effetti di testu calligrafichi è scritti à manu chì prima eranu impraticabili in applicazioni in tempu reale.

Per i sviluppatori chì custruiscenu applicazioni muderne è multipiattaforma, i fonti SDF rapprisentanu una di quelle tecniche rare induve l'investimentu in l'apprendimentu paga dividendi in quasi ogni prughjettu. A qualità di rendering rivali cù i motori di testu nativi, l'impronta di memoria hè una frazione di l'alternative bitmap, è u sistema di effetti basati in shader furnisce una flessibilità creativa chì l'approcci pre-cucinati ùn ponu micca cumparà. Sia chì rende etichette nantu à un globu 3D o assicurendu chì i dati critichi per l'affari si mostranu currettamente in ogni schermu in a vita di i vostri utenti, i fonti SDF sò un strumentu chì vale a pena di maestru.

Domande Frequenti

Cosa sò i fonts SDF è perchè i sviluppatori anu da esse attenti à elli?

I fonti di u Campu di Distanza Firmati guardanu i valori di distanza da ogni pixel à u bordu di glifi più vicinu, chì permettenu a rendering di testu indipendente da a risoluzione. A cuntrariu di i caratteri bitmap tradiziunali chì diventanu sfocati quandu sò scalati, i fonti SDF restanu croccanti à qualsiasi dimensione o livellu di zoom. Questu li rende indispensabili per interfacce responsive moderne, UI di ghjocu, è qualsiasi applicazione destinata à più densità di schermi - da i dispositi mobili à i monitori 4K è oltre.

Cumu si paragunanu i fonts SDF à u rendering tradiziunale di caratteri bitmap è vettoriale ?

I fonti Bitmap necessitanu textures separati per ogni dimensione, cunsumendu una memoria significativa mentre producenu ancu artefatti quandu sò scalati. I fonti vettoriali offrenu una qualità perfetta, ma sò computazionalmente caru per rasterizà in tempu reale. I fonti SDF ghjunghjenu à un equilibriu ideale - una sola struttura compatta rende meravigliosamente in praticamente qualsiasi scala cù una GPU minima, facendu a scelta preferita per l'applicazioni in tempu reale cum'è ghjochi è dashboards interattivi.

Quali strumenti è biblioteche sò dispunibili per generà fonti SDF?

Opzioni populari include msdfgen per a generazione SDF multicanale, Hiero per l'imballaggio di font bitmap cù supportu SDF, è diverse utilità di linea di cummanda open-source. A maiò parte di i motori di ghjocu cum'è Unity è Godot includenu supportu di testu SDF integratu. Per l'imprese chì custruiscenu applicazioni persunalizate, e piattaforme cum'è Mewayz cù u so SO cummerciale di 207 moduli chì partenu da $ 19/mo ponu integrà queste tecniche di rendering in sperienze digitale di marca.

I fonts SDF ponu gestisce effetti speciali cum'è contorni, ombre è testu brillanti ?

Assolutamente - questu hè unu di i più grandi punti di forza di i fonti SDF. Perchè i dati di u campu di distanza sò dispunibuli in u shader, pudete aghjunghje contorni, ombre di goccia, bagliori dolci, è ancu effetti animati solu aghjustendu i valori di soglia. Questi effetti ùn costanu quasi nunda in u rendiment postu chì ùn necessitanu micca una geometria supplementaria o passaggi di texture, dendu à i diseggiani una libertà creativa notevule senza sacrificà i ritmi di frame.

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 6,207+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 6,207+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime