Moravské přístroje, a. s., zdroj: https://www.mii.cz/art?id=818&lang=405, vytištěno: 29.03.2024 5:37:59

Hlavní stránkaProduktyProgramový systém Control WebČlánky

Grafika pro novou generaci systému Control Web
 Zatímco zvenku to asi vypadá, že je u nás ticho po pěšině, již dlouho intenzivně pracujeme na nové verzi systému Control Web. Je zde připraveno mnoho nových možností a zajímavých technologií. Dnes se můžeme podívat na nové řešení vykreslování grafiky.

Současná verze programového prostředí Control Web v6 sice obsahuje vedle dnes již letité GDI grafiky také moderní a výkonný 3D vykreslovací stroj s architekturou klient – server.

Je zde ale několik problémů:

  • GDI grafické API systému Windows je již velmi zastaralé, docela dobře vyhovuje pro vykreslování grafického uživatelského rozhraní vývojového prostředí, ale pro efektní vizualizace má podstatné nedostatky:

    • Nelze používat antialiasing.

    • Nejsou k dispozici potřebné funkce pro vektorovou grafiku s cestami a gradienty.

    • Možnosti akcelerace pomocí grafických procesorů jsou zcela minimální

  • Stávající 3D vykreslovací systém neobsahuje veškeré komponenty a virtuální přístroje pro tvorbu grafických uživatelských rozhraní.

  • 2D a 3D grafické panely jsou zcela samostatnými oddělenými světy bez možnosti sdílení virtuálních přístrojů.

  • A v neposlední řadě je postupně stával problémem i poměrně konzervativní a dlouhodobě nezměněný vzhled řady bitmap, ikon i vektorově vykreslovaných virtuálních přístrojů.

Všechny tyto nedostatky jsme se rozhodli v nové verzi odstranit. Navrhli jsme skutečně velkorysý systém, který nejen řeší veškeré výše uvedené problémy, ale přináší spoustu nové funkčnosti a je s rezervou připraven na několik scénářů budoucího vývoje počítačové grafiky.

Objektově orientovaná grafika

Grafické funkce, které používají programové komponenty systému Control Web jsou nezávislé na grafickém API operačního systému. Celé rozhraní na grafické funkce je soustředěno do objektů tzv. vykreslovačů (rendererů). Během kreslení grafiky strukturou komponent protéká událost s vazbou na konkrétní aktivní vykreslovač. Programové komponenty se tedy kreslí stále stejnými postupy nezávisle na grafickém API operačního systému. Externí komponenty vykreslovačů grafiky Počet a druhy vykreslovačů není nijak omezen. Vykreslovače jsou pro systém Control Web externími komponentami v samostatných dynamicky linkovaných knihovnách. Při startu prostředí Control Web jsou vykreslovače dynamicky detekovány a připojeny k systému.

Kombinace 2D a 3D virtuálních přístrojů v jedné scéně

Kombinace 2D a 3D virtuálních přístrojů v jedné scéně

Nyní jsou k dispozici tyto vykreslovače:

  • GDI – vše je kresleno pomocí standardního GDI API systému Windows. Vykreslení některých grafických primitiv může být částečně akcelerováno grafickým adaptérem. Míra akcelerace je ale neznámá a něco o ní ví asi pouze firma Microsoft.

  • GDI offscreen – kreslí se rovněž pomocí GDI, ale obraz vzniká v paměti počítače a zobrazuje se až celý naráz. Tím jsou odstraněny rušivé efekty během vykreslování.

  • GDI+ – využívá se grafické API systému Windows v podobě C++ tříd. Tento vykreslovač má již grafický kontext, jehož obsah se na obrazovku vykresluje bez rušivých efektů. Je zde k dispozici antialiasing, transformace obrazu s plovoucí řádovou čárkou a lepší možnost pro kreslení cest a gradientů. Nevýhodou tohoto vykreslovače je téměř naprostá absence akcelerace pomocí grafických procesorů.

  • D2D – tento vykreslovač využívá API Direct2D. Toto API je k dispozici od operačního systému Windows 7 a je postaveno jako další vrstva nad rozhraním DirectX a Direct3D. Je zde již silně využívána akcelerace grafickými procesory, i když o míře akcelerace jednotlivých funkcí rovněž nejsou dostatečné informace. Tento vykreslovač má již plnou podporu pro vykreslování cest a gradientů. Transformace a souřadný prostor v plovoucí řádovou čárkou je samozřejmostí. Silnou stránkou je rovněž kvalita vykreslování fontů a textů.

  • OpenGL – Tento vykreslovač využívá všech výhod standardu OpenGL, který je nejrozšířenějším grafickým API, používají jej všechny současné operační systémy, jako je Linux, Android, iOS a naštěstí je k dispozici i ve Windows. Implementace tohoto vykreslovače v prostředí Control Web maximálně využívá akcelerace grafických funkcí pomocí grafických procesorů a dosahuje tak vysokého výkonu grafiky. OpenGL vykreslovač dokáže v jednom 2D panelu či 3D scéně propojit možnosti veškerých 2D i 3D virtuálních přístrojů. V běžných panelech mohou být používány 3D virtuální přístroje a naopak v 3D scéně mohou být pro vytvoření grafického uživatelského rozhraní vloženy veškeré existující 2D přístroje.

Panel s GDI vykreslovačem

Panel s GDI vykreslovačem

Panel s GDI+ vykreslovačem

Panel s GDI+ vykreslovačem

Panel s D2D vykreslovačem

Panel s D2D vykreslovačem

Panel s OpenGL vykreslovačem

Panel s OpenGL vykreslovačem

Nové vykreslovače pro vektorovou grafiku a standard SVG

Ve 3D grafice máme v prostředí systému Control Web již nějakou dobu vše, co jen můžeme potřebovat – pomocí třírozměrných modelů, textur, shaderů, mlhy, stínů, zdrojů světla a postprocesových efektů můžeme zobrazit téměř cokoliv v prakticky fotografické kvalitě. Ve 2D grafice potřebujeme pro grafické rozhraní dokázat vykreslit základní grafická primitiva, jako je čára, obdélník vyplněný buď plnou barvou nebo barevným přechodem, bitmapa a fonty. Pro škálovatelnou vektorovou grafiku je to ale nedostatečné. Zde musíme kvalitně a rychle vykreslovat libovolné spojité křivky a tvary ohraničené těmito křivkami je nutno vyplňovat lineárními i radiálními barevnými přechody. To vše je nutno dělat v souřadnicích s plovoucí řádovou čárkou.

SVG obrázek vykreslený tesselovaný do grafických primitiv a vykreslený s fragmentovou přesností pomocí systému NVidia Path Rendering.

SVG obrázek vykreslený tesselovaný do grafických primitiv a vykreslený s fragmentovou přesností pomocí systému NVidia Path Rendering.

Znázornění tesselace čárovou grafikou, obrázek vytvořený pomocí NVPR čarami vykreslit nelze.

Znázornění tesselace čárovou grafikou, obrázek vytvořený pomocí NVPR čarami vykreslit nelze.

Právě tyto vlastnosti přinášení nové vykreslovače GDI+, D2D a OpenGL. Nové funkce vykreslovačů nám umožňují vytvořit lépe vypadající virtuální přístroje. Nyní máme k dispozici virtuální přístroje, které mohou načítat a zobrazovat škálovatelné vektorové kresby ve formátu SVG (Scalable Vector Graphics). Tento formát je otevřeným všeobecně přijatým standardem. Jeho podstatnou předností je to, že se jedná textový XML dokument, který je čitelný i pro člověka.

SVG grafická data lze v prostředí systému Control Web pomocí několika komponent:

  1. Virtuální přístroj svg – tento přístroj funguje ve všech vykreslovačích, tedy i v základním GDI. Kvalita kresby je omezena vlastnostmi jednotlivých grafických rozhraní.

  2. Virtuální přístroj gl_drawing – tento přístroj může být umístěn do 3D scény, 3D panelu nebo i do 2D panelu s OpenGL vykreslovačem. Vektorové grafické prvky jsou tesselovány a jejich vykreslování je akcelerováno pomocí grafického procesoru. Radiální barevné gradienty jsou vytvářeny fragmentovým shaderem.

    Anisotropní multibarevný radiální gradient ...

    Anisotropní multibarevný radiální gradient ...

    ... je možno v prvotřídní kvalitě vykreslovat i v tesselovaných obrazech, vpravo vykreslený pomocí NVPR

    ... je možno v prvotřídní kvalitě vykreslovat i v tesselovaných obrazech, vpravo vykreslený pomocí NVPR

  3. Virtuální přístroj gl_gpu_draving - tento přístroj může být rovněž umístěn do 3D scény, 3D panelu a do 2D panelu s OpenGL vykreslovačem. Grafická karta musí podporovat OpenGL rozšíření NVidia Path Rendering. Vektorová grafika je v tomto případě dynamicky generována grafickým procesorem s přesností na jednotlivé pixely. Toto řešení zajišťuje maximální možnou kvality výsledného obrazu při minimální zátěži CPU počítače. Většina grafických dat je v podobě objektů uložena v grafické paměti. Rychlost je zajištěna vysokým masivně paralelním výkonem současných GPU.

Architektura objektů grafických vykreslovačů je navržena s ohledem na maximální možnosti optimalizace a akcelerace grafiky při využívání jednotlivých grafických rozhraní:

  • Vykreslovače podporují veškeré stávající bezprostřední grafické příkazy pro vykreslování prvků uživatelských rozhraní

  • Jsou k dispozici grafické objekty, které lze jednou vytvořit a opakovaně používat.

  • Vykreslovače mohou tyto objekty tesselovat do základních akcelerovaně vykreslovaných primitiv.

  • U některých grafických rozhraní lze objekty nebo skupiny objektů uložit do rychlé paměti grafických karet pro maximálně rychlé a efektivní vykreslování.

  • Barvy, fonty, šířky čar, barevné přechody atd. jsou ukládány do objektů barev, které lze mezi grafickými objekty sdílet.

  • Vykreslovače jsou otevřené externí dynamicky linkované komponenty, které jsou připraveny pro libovolné budoucí grafické standardy a potřeby.

Spojení 2D a 3D světa

Způsoby vykreslování 3D a 2D grafiky se značně odlišují. Zatímco v trojrozměrném obrazu je viditelnost každého bodu definována jeho hloubkou v prostoru scény a jeho případným překrytím bližšími body (bude-li bod vykreslen se řeší testem jeho hloubky – bližší body překrývají vzdálenější a vzdálené nejsou kresleny), pro kreslení dvourozměrných obrazů je používán tzv. malířův algoritmus, kdy se jednotlivé vykreslované body neustále přepisují novým obsahem a nakonec zůstane viditelné to, co bylo nakresleno jako poslední. OpenGL vykreslovač dokáže tyto rozdílné mechanismy vytváření grafiky spojit do jediného obrazu. Konečně již tedy nenarážíme na bariéru mezi prostorem 3D scény a plochou panelu.

SVG obrázek a 2D přístroje vložené do 3D scény.

SVG obrázek a 2D přístroje vložené do 3D scény.

Ukázka tesselace SVG grafiky i 2D a 3D přístrojů.

Ukázka tesselace SVG grafiky i 2D a 3D přístrojů.

Nyní můžeme:

  1. Používat veškeré existující 3D virtuální přístroje mezi ostatními přístroji v běžném panelu. 3D modely jsou zobrazovány v orthografické kolmé projekci a mohou být rovněž libovolně natočeny pomocí parametru ortho_rotate. V panelu také fungují všechny animace i částicové efekty, jako je kouř, oheň, jiskry atd.

    Standardní 2D panel s OpenGL vykreslovačem

    Standardní 2D panel s OpenGL vykreslovačem

  2. Používat veškeré existující 2D virtuální přístroje mezi ostatními přístroji v prostoru 3D scény. 2D přístroje se vykreslují na stejné pozici, jako by byly umístěny v 2D panelu. Při pohybu kamery ve scéně zůstávají stále na své pozici a pohybuje se prostor scény za nimi.

    2D přístroje ve 3D scéně

    2D přístroje ve 3D scéně

Obecné neomezené možnosti zvětšování a zmenšování grafiky její přizpůsobení libovolnému monitoru

Vývoj výpočetní techniky přináší grafické zobrazovací panely se stále vyšším bodovou hustotou. Tzv. retina displeje v telefonech, tabletech a přenosných počítačích vyžadují takové aplikace, které nejsou vytvořeny pro nějakou pevnou pixelovou velikost obrazovky. Obrazovky se liší jak poměrem stran, tak hustotou obrazových bodů. V současnosti jsou běžné displeje 2560  ×  1440 a 3200  ×  1800 bodů a postupně se objevují 2840  ×  2160 a 5760  ×  3210 bodů.

Ve Windows je možnost, a u obrazovek s vysokým rozlišením i nutnost, nastavit si DPI obrazovky (počet bodů na palec). Toto nám umožní zvětšit si písmo a prvky uživatelského rozhraní abychom pro práci nepotřebovali lupu, ale pro řešení problému libovolného rozlišení a poměru stran obrazovky je toto nedostatečné. Proto vykreslovače systému Control Web, které již dokážou pracovat se souřadným systémem v plovoucí řádové čárce, umožní každý panel aplikace libovolně zvětšit či zmenšit. Při těchto změnách velikosti vykreslovaného obrazu může být zachována původní proporce mezi šířkou a výškou virtuálních přístrojů. U vektorových kreseb není změnou velikosti téměř nijak poznamenána kvalita obrazu. Pro zachování kvality bitmapových obrázků systém dokáže pracovat s několika velikostmi každé ikony a tyto velikosti zdrojových bitmap volit podle míry zvětšení či zmenšení.

Při zvětšování a zmenšování mohou být buď zachovány proporce grafiky ...

Při zvětšování a zmenšování mohou být buď zachovány proporce grafiky ...

...nebo může být obraz i zužován ...

...nebo může být obraz i zužován ...

... či rozšiřován.

... či rozšiřován.

Architektura grafických vykreslovačů překovává veškerá minulá omezení a je dobře připravena na budoucnost.

Roman Cagaš