Kvalita písma v grafických kontextech, které používají Microsoftem
oblíbená grafická rozhraní GDI, GDI+ a Direct2D, je velmi vysoká.
Ostatně systém DirectWrite je stále považován za etalon kvality.
Chceme-li ale využívat otevřené a široce multiplatformně rozšířené
grafické API OpenGL, které, korektně řečeno, nemá firma Microsoft v
přílišné oblibě, jsme postaveni před nutnost vyřešit vykreslování
písma v minimálně v takové kvalitě, která je v současnosti všeobecně
očekávána. A zde jsou nám výše jmenované technologie k ničemu, neboť
tvůrce operačního systému Windows je do vykreslovacího systému OpenGL
neimplementoval. Problémem bitmapových fontů pro OpenGL v rozhraní wgl
není ani tak jejich prehistorická kvalita, ale několik závažných chyb
v jejich implementaci, které velmi komplikují až prakticky znemožňují
jejich použití. A vypadá to, že se můžeme spolehnout na to, že tyto
chyby nebudou nikdy opraveny.
OpenGL vykreslovač v systému Control Web si každý font
inicializuje ve dvou provedeních:
Písmo rasterizované do bitových map. Písmo je nejkvalitnější
tehdy, když je vykresleno do výsledných obrazových bodů
zobrazovacího panelu přesně tak, jak bylo do jednotlivých bodů
rasterizováno. Proto každou velikost i deformaci znaků je lépe písmo
rasterizovat samostatně.
Písmo vektorově tesselované do jednotlivých polygonů. Každý
znak je uložen jako sekvence trojúhelníků. Každý vrchol trojúhelníků
je v souřadnicích s plovoucí řádovou čárkou. Písmo tak lze z jedné
podoby tohoto vektorového popisu vykreslovat ve velkém rozsahu
velikostí. Tesselace je sice pomalejší, ale je dělána pouze jednou
při prvotní inicializaci fontu. Písmo se vykresluje vektorově a jeho
výsledná pixelová podoba na obrazovce je dána rasterizerem
grafického procesoru. Písmo je stejně kvalitní ve všech prostorových
transformacích, tj. ve všech velikostech, natočeních
i perspektivních projekcích.
Pro rasterizaci písmen jsme využili systému FreeType. Do této
knihovny byl ve spolupráci firem Google a Adobe vestavěn vyspělý rasterizer a technologie
FreeType je nyní používána v operačních systémech Android, Chrome OS,
iOS, GNU/Linux a v dalších variantách unixových operačních systémů,
jako je např. FreeBSD a NetBSD. Kvalita rasterizace je opravdu vysoká
a rasterizer je také velmi rychlý.
V OpenGL vykreslovači systému Control Web jsou obrazy písmen
uloženy v rychlé paměti grafického procesoru. Vykreslování je pak
nepřekonatelně rychlé a svým datovým tokem nijak nezatěžuje paměť a
CPU.
Vnímání a posuzovaní grafické kvality písma je vždy hodně
subjektivní a je věcí osobních preferencí. Někdo má raději měkčí
okraje znaků. K takovým jedincům patřím i já, nicméně v našem
vývojovém týmu drtivě převažuje poptávka po maximální ostrosti
písma.
Obrázky jsou ve vašem prohlížečí zmenšené a tudíž nepřesné. Je
nutno na ně kliknout, abychom je viděli přesně.

Jeden za základních TrueType fontů v základní velikosti
kontextu, tedy bez zoomu. Ostřejší písmo vlevo je naše nové písmo v
OpenGL kontextu, mírně rozmazanější písmo vpravo je rasterizováno
systémem Microsoft DirectWrite a vykresleno v Direct2D
kontextu.

FreeType písmo může být rovněž libovolně barevné.

Srovnání FreeType písma antialiasovaného do stupňů šedi a
ClearType v GDI využívající vodorovné RGB pořadí barevných
subpixelů.
Dnes se již převážně upouští od antialiasingu, využívající RGB
subpixely. Jednak na vodorovně lineární RGB uspořádání barev
obrazových panelů se již dnes nedá spolehnout a tento systém také není
použitelný při změně pozice obrazovky na šířku a na výšku.

Srovnání OpenGL a Direct2D kontextu se základní velikostí
bez zoomu. Font v OpenGL je rasterizován a pozicován pro maximální
ostrost.
Teď teprve přijdou ty největší potíže. Naše vykreslovací kontexty
musíme plynule, tedy neceločíselně, zvětšovat a zmenšovat, a to i
neproporčně. Přitom žádoucí je udržet maximální ostrost písma. Také
pozice znaků musí plně respektovat bodový rastr zobrazovacího
panelu.

Opět srovnání OpenGL a Direct2D, tentokrát uprostřed v
základní velikosti, nahoře neproporčně zmenšený a rovněž dole
neproporčně zvětšený (rozšířený) kontext.
Při změnách velikosti vykreslovacího kontextu musí být vždy
rasterizována nová podoba písma. Jen tak lze udržet ostrost a bodovou
přesnost.
Ke každému písmu dokáže OpenGL vykreslovač vytvořit jeho variantu
pro obecné prostorové zobrazování. Každý znak je pak vektorovým
modelem se souřadnicemi v plovoucí řádové čárce. Navíc znaku mohou být
i extrudovány do zvolené hloubky a mohou tak lépe vypadat z některých
směrů pohledu.

U vektorových reprezentací znaků je důležitým parametrem i
přesnost tesselace - tedy to, kolika trojúhelníky jsou aproximovány
obrysové křivky.
Prvotní vytvoření objektů znaků je pomalejší, než rasterizace.
Proto je tato varianta písma vytváří až tehdy, kdy bude opravdu
použita. Na druhé straně se tesselace provádí vždy jen jednou -
veškeré velikosti jsou vykreslovány ze stejných objektů uložených v
grafické paměti GPU.

Text je třírozměrný a může podléhat libovolným
transformacím prostoru.

Vektorové obrysové 3D písmo může být použito i u
dvourozměrných grafických objektů
Nové řešení správy písma je jednou z věcí, které jsou připravovány
pro novou generaci systému Control Web, a které se nyní objevují i v
update stávajících verzí tohoto systému.
rc
|