De Marcel FOCA
Despre OpenGL se vorbeste mult si poate tocmai de aceea se fac si multe confuzii. Încercam în continuare sa facem putina ordine raspunzând la întrebarile: Ce este OpenGL? Cum se masoara performanta OpenGL?, iar în paralel, un glosar de termeni întâlniti în literatura de specialitate.OpenGL este un set standard de functii grafice 3D.
Acest standard îsi are originile în biblioteca grafica IRIS GL a lui Silicon Graphics Incorporated, fiind un format proprietar si suportat doar de propriile platforme hardware. În urma numeroaselor solicitari venite din partea marilor dezvoltatori de software de a face publica specificatia GL, SGI a trebuit sa rescrie specificatia deoarece în forma originala era prea dependenta de platforma hardware SGI. A rezultat un format nou, de data aceasta fiind asigurata portabilitatea si standardizarea. Noul nume: OpenGL.
Ca un exemplu de standardizare si portabilitate, putem enumera companiile care au achizitionat licenta acestei tehnologii: AT&T, Barco Chromatics, Cirrus Logic, Cray Research, Daikin, DEC, 3Dlabs, Fujitsu, Evans&Sutherland, Harris Computer, HP, Hitachi, Hummingbird Communications, IBM, The Institute for Information Indusrtry, Intel, Intergraph, Kubota Pacific, Media Vision, Microsoft, Miro, Mitsubishi, NEC, Peritek, Portable Graphics, PsiTech, RasterOps, SPEA, Samsung, Siemens-Nixdorf, SGI, Sony, Sun, Template Graphics Software si Univel.
Dintre acestia doar câtiva au implementat OpenGL în produsele lor: DEC, 3Dlabs, IBM, Intergraph, SGI si Sony (doar implementare software).
Specificatia, respectarea specificatiei si dezvoltarea OpenGL este controlata de un comitet numit OpenGL ARB (architectural review board) care cuprinde DEC, Evans&Sutherland, IBM, Intel, Intergraph, Microsoft si SGI.
La elaborarea specificatiei OpenGL au stat la baza urmatoarele doua principii:
În plus, orice implementare a OpenGL trebuie sa fie conforma cu standardul de baza, ceea ce asigura programatorii ca functiile de baza vor fi disponibile pe orice platforma. Fiecare implementator este nevoit sa parcurga un set de teste de conformitate care sa certifice implementarea corecta si compatibilitatea OpenGL.
Dupa cum se poate observa din descrierea de mai sus, OpenGL este proiectat pentru utilizarea în aplicatii tehnice 3D cum ar fi CAD-ul (aplicatii precum Solid Edge, Pro Engineer sau I-DEAS), animatii de calitate (cum ofera Softimage) sau în aplicatii de simulare vizuala (Design Review, GVS, ExoDIS).
Implementarile OpenGL pot fi implementari hardware totale (de exemplu Intergraph, SGI) caz în care se obtin cele mai mari performante, implementari software (de exemplu Sony) sau implementari hardware partiale (de exemplu 3Dlabs/GLiNT) caz în care se obtin acceleratoare grafice ieftine din cauza rabatului de performanta. Cum OpenGL este independent de interfata grafica a sistemului de operare, nu exista o legatura strânsa între acestea doua, fiind suficiente doar câteva functii de legatura, nucleul de baza OpenGL ramânând acelasi indiferent de implementare.
În momentul în care dorim sa achizitionam un accelerator OpenGL sau un sistem complet integrat care sa aiba implementat OpenGL, în mod normal prospectam piata, comparam performante, preturi si servicii. Daca în ceea ce priveste pretul si serviciile totul este clar, stim cum sa facem comparatia, în privinta performantei OpenGL lucrurile nu sunt tocmai simple. Si asta tocmai din pricina furnizorilor si a datelor pe care le ofera. În general se dau cifre care se refera la viteza de afisare a liniilor 2D sau 3D, a triunghiurilor, poligoanelor, suprafetelor etc., dar nu se specifica si conditiile în care au fost facute aceste masuratori. Si ca o ironie, din performantele de afisare a primitivelor nu rezulta performantele care vor fi obtinute în exploatarea reala cu aplicatii si date concrete.
Câteva dintre cele mai frecvent întâlnite metrici sunt:
Pentru a veni în întâmpinarea acestor inadvertente cu care se confrunta consumatorii, a fost elaborat în 1994 un program de test numit Viewperf de catre subcomisia OpenGL Performance Characterization (OPC) care apartine de comisia Graphics Performance Characterization (GPC). OPC este parte componenta a Systems Performance Evaluation Corporation (SPEC) - aceeasi companie care produce larg utilizatele programe de testare a performantelor procesoarelor. Scopul OPC este de a realiza o metoda de comparare a performantelor OpenGL, metoda care sa nu depinda de platforma hardware, sistem de operare, sau interfata grafica. Sistemele de operare includ, dar nu sunt limitate la, OS/2, UNIX si Windows NT. Interfetele grafice includ, dar nu sunt limitate la, Presentation Manager, X si Windows. Intentia OPC este de a testa performantele grafice ale întregului sistem rulând aplicatii si nu doar performantele grafice în sine, dat fiind faptul ca din performantele de afisare a primitivelor nu rezulta performantele care vor fi obtinute în exploatarea reala cu aplicatii si date concrete.
OPC si-a propus urmatoarele obiective:
Primul program de evaluare elaborat de OPC se numeste Viewperf si masoara performantele de rendering 3D ale sistemelor bazate pe OpenGL. Viewperf nu este o aplicatie concreta, în acceptiunea curenta, ci reprezinta o suita de teste bazate pe date reale.
Câteva din caracteristicile Viewperf:
Parametrii masurati de Viewperf:
Ca orice program de test, Viewperf are si el unele limitari. Cele mai importante sunt ca nu poate rula singur fiind nevoie de interventia utilizatorului, nu tine cont de efectele cauzate de schimbarea primitivelor, de modificarile aparute în cadrul unui ciclu, de miscari complexe ale modelelor multiple, de încarcarea CPU în timpul testului, de efectele multi-fereastra si de calitatea vizuala.
Viewperf consta dintr-o suita de 5 teste diferite: Awadvs-01 pentru animatii 3D, CDRS-03 pentru proiectarea industriala, DX-03 pentru vizualizari stiintifice, DRV-04 pentru explorarea machetelor 3D virtuale si Light-01 pentru alte tipuri de vizualizare. Fiecare dintre teste include o serie de sub-teste. Rezultatul final al unui test este o valoare medie a rezultatelor obtinute pentru fiecare sub-test al testului respectiv. Trebuie mentionat ca rezultatele sub-testelor au ponderi diferite în valoarea finala, ponderi care sunt direct proportionale cu gradul de dificultate al sub-testului.
Este un test bazat pe aplicatia Alias|Wawefront Advanced Visualizer pentru animatii 3D. Este o aplicatie high-end folosita în general de profesionisti. Este important de mentionat ca aceasta aplicatie nu este disponibila sub Windows NT, deci acest test nu poate fi folosit pentru comparatia între diferite platforme. Modelul utilizat în aceasta aplicatie este sistemul muscular uman. Aplicatia nu suporta multithreading, deci rezultatele vor fi aceleasi indiferent de numarul de procesoare. Sunt 10 sub-teste, dintre care primul are un grad de dificultate de 41.8% (ponderea în cadrul rezultatului final pe test) si foloseste interpolari triliniare, ceea ce duce la o mare calitate a imaginii obtinute. Acceleratoarele grafice care sunt suplimentate cu procesoare geometrice si cu memorie pentru texturi dau rezultate excelente la acest test.
Aceasta aplicatie, facuta initial de Evans&Sutherland si apoi cumparata de Parametric Technologies, este utilizata în proiectarea industriala, mai ales în industria de automobile la proiectarea de interioare si exterioare. Aplicatia nu suporta multithreading, iar setul de date include si o mica textura (860K). Sporul cel mai mare de performanta la acest test este dat de acceleratorul geometric.
IBM Visualization Data Explorer este o aplicatie de vizualizare si analiza stiintifica. În cadrul testului sunt vizualizate traiectoriile particulelor care strabat un jet de fluid. Date de tipul acesta pot proveni din simularea curgerii unor fluide sub anumite constrângeri. Setul de date este compus în majoritate din primitive de tip retele triunghiulare. Aplicatia nu suporta multithreading, nu include texturi, dar contine o sursa de lumina.
Aplicatia Design Review dezvoltata de Intergraph este folosita la explorarea machetelor 3D virtuale, utilizate în proiectarea obiectivelor industriale (instalatii cu tubulaturi, structuri metalice etc.). Setul de date utilizat reprezinta o parte din modelul 3D al unei platforme de foraj marin construite în Marea Nordului. Testul înseamna explorarea virtuala a platformei utilizând imagini realistice. Aplicatia este multithreading, deci mai multe procesoare înseamna un plus de performanta. Textura folosita este aceeasi cu cea de la testul CDRS, deci memoria pentru texturi (cât mai mare) este foarte binevenita.
Aplicatia se numeste LightScape Visualization System si este dezvoltata de LightScape Technologies. Aplicatia combina algoritmi proprietari de difuzivitate cu diverse procedee de iluminare. Utilizatorii au posibilitatea de a modifica rapid tipul iluminarii si a texturilor pentru a obtine efectul vizual dorit. Setul de date utilizat la test reprezinta un interior dintr-un spatiu arhitectural. Aplicatia nu suporta multithreading si nici nu utilizeaza texturi.
Producatorii care si-au evaluat produsele cu ajutorul lui Viewperf prezinta de obicei valoarea finala la fiecare test. Este posibil ca un utilizator anume sa se confrunte cu o serie de date al caror specific sa nu fie acoperit de cele 5 teste si sa considere ca un subtest se potriveste cel mai bine cu cerintele sale. În acest caz, rezultatele subtestelor pot fi gasite pe Internet la adresa http://www.specbench.org/ gpc/opc.static/index.html.
Glosar de termeni întâlniti în literatura de specialitate24-bit color: sau "true-color", fiecare pixel de pe ecran are culoarea definita cu ajutorul a 24 biti (8 biti pentru rosu, 8 biti pentru verde si 8 biti pentru albastru). 24 biti ofera 16,7 milioane de combinatii posibile de rosu (R - red), verde (G - green) si albastru (B - blue). Desi ochiul uman nu poate distinge 16,7 milioane de culori diferite, numarul mare de culori permite obtinerea de imagini 3D shaded foarte apropiate de realitate. Unele placi video suporta doar culori pe 16 biti, adica 64K combinatii. Utilizarea unei game de culori mai reduse duce la pierderea efectului realistic al modelului afisat pe ecran. Pe de alta parte, cresterea numarului de culori duce la necesitatea cresterii latimii de banda de memorie a subsistemului grafic. De exemplu, afisarea pe 16 biti presupune o latime de banda dubla fata de afisarea pe 8 biti, pentru a afisa la aceeasi viteza. Adâncimea culorii, sau coordonata Z, este o alta informatie critica care trebuie luata în considerare în momentul în care sunt comparate performantele diferitelor acceleratoare grafice. 32-bit color: o alta descriere a lui "true-color" care, în aditie la cei 24 biti descrisi anterior, mai adauga înca 8 biti utilizati la definirea gradului de transparenta al pixelilor. bit-planes: defineste numarul de biti care descriu fiecare pixel de pe ecran. De exemplu, 128 bit planes înseamna ca 128 biti controleaza modul de afisare al fiecarui pixel (pot fi 32 biti pentru controlul culorii, 32 biti pentru adâncime etc.). Memoria video este divizata în planuri de biti (mai multi biti presupun mai multa memorie). double-buffering: majoritatea placilor grafice OpenGL lucreaza cu doua rânduri de imagini, una care este afisata si una care nu. Acestea doua sunt denumite uzual "front-buffer" si "back-buffer". Redarea fara fragmentari a unei animatii 3D presupune utilizarea unui card cu "double-buffering". În timpul în care un cadru aflat în "front buffer" este afisat pe ecran, în "back buffer" este pregatit cadrul urmator, dupa care continutul lui "back buffer" este transferat în "front buffer", concomitent cu aducerea cadrului urmator în "back buffer". Din cauza ca acest procedeu presupune multa memorie video, multe placi OpenGL nu suporta double buffering si/sau 24-bit color. Întrucât double-buffering este indispensabil pentru redarea continua a imaginilor 3D, la aceste placi grafice trebuie sa se faca rabat fie la numarul de culori (trecerea pe 16-bit color), fie la rezolutie (micsorarea acesteia), ambele variante ducând la scaderea calitatii imaginii. frame-buffer: memoria video disponibila pe card pentru stocarea atât a informatiei afisabile, cât si a celei neafisabile (cum ar fi coordonata Z). Furnizorii cu pretentii utilizeaza un bloc contiguu de memorie pentru stocarea tuturor informatiilor, altii utilizeaza memorii VRAM pentru stocarea informatiei afisabile si memorii DRAM pentru informatia neafisabila. Mflops: milioane de operatii în virgula mobila. Algoritmii OpenGL presupun un intens calcul în virgula mobila. Cu cât cardul poate efectua un numar mai mare de operatii în virgula mobila, cu atât mai rapid va fi redering-ul. overlay-planes: multe aplicatii presupun afisarea de vectori peste o imagine rastru, cum sunt aplicatiile GIS (de exemplu desenarea unei linii reprezentând o sosea pe deasupra unei imagini scanate). Utilizarea de planuri suprapuse permite desenarea de vectori fara coruperea imaginii de pe fundal (a rastrului). Aceste planuri suprapuse mai sunt numite si planuri nedistructive si presupun existenta în memoria video a unor biti de control separati de planurile de imagini. Unele placi grafice ofera planuri de suprapunere pentru ambele rânduri de imagini, front buffer si back buffer, asa-numitul "double-buffered overlay planes". stencil planes: mascarea anumitor portiuni din ecran (utilizarea sabloanelor). De exemplu un simulator de tanc poate folosi un stencil-plane pentru definirea unei ferestre care sa reprezinte peisajul exterior care se schimba odata cu deplasarea tancului. Imaginea din fereastra poate fi rapid actualizata, fara a fi nevoie de modificarea întregului ecran, care în cazul de fata reprezinta interiorul tancului. 8 asemenea planuri ofera posibilitatea definirii a 8 ferestre pe ecran. Z-buffer: numarul de biti alocati fiecarui pixel pentru definirea adâncimii (coordonatei Z). Un numar mai mare de biti pentru z-buffer înseamna o mai mare acuratete în determinarea coordonatei z. Majoritate placilor grafice 3D suporta z-buffer doar de 16 biti, uneori de 24 biti. Pentru o calitate minima a imaginii sunt suficienti 16 biti, dar recomandarea este 24 sau 32 biti. În cazul reprezentarii unei instalatii care are o lungime de 500 m, dar care are tevi distantate la doar 5 cm, un z-buffer de 24 biti nu ofera suficienta acuratete pentru a afla care teava este deasupra celeilalte. Cardul video va încerca sa afiseze ambele tevi simultan, ceea ce duce la pâlpâiri deranjante pentru ochi (efect cunoscut sub numele de transpunerea triunghiurilor). Un z-buffer de 32 biti elimina aceste neajunsuri. texture mapping: procesul de aplicare de texturi 2D pe obiecte 3D pentru marirea gradului de realism al obiectului. Fiecare texel (unitatea elementara a unei texturi) este aplicat pe pixelul corespunzator al obiectului. texture fill rate: viteza cu care texelii sunt aplicati peste pixelii obiectului 3D. De exemplu o rata de 38 milioane reprezinta tot atâtia pixeli care au fost acoperiti de textura într-o secunda. Sunt mai multi factori care afecteaza viteza de mapare, dar cei mai importanti sunt modul de filtrare (sau interpolare) si adâncimea culorii texturii (care poate fi de 4, 8, 16 sau 32 biti per texel). Marirea numarului de biti de culoare per texel duce la o crestere semnificativa a calitatii imaginii, dar presupune si o latime de banda mai mare în accesarea memoriei video. Modul de filtrare afecteaza în aceeasi masura calitatea imaginii, dar presupune în plus si un volum de calcul mai mare. De exemplu maparea unei texturi pe 32 biti cu interpolare triliniara presupune, comparativ cu o textura pe 16 biti si interpolare biliniara, o latime de banda de 4 ori mai mare si un volum de calcul de 2 1/3 ori mai mare, în ipoteza ca dorim sa pastram aceeasi viteza de mapare. Atât timp cât nu se cunosc acesti 2 parametri, nu se poate face o comparatie corecta între vitezele de mapare ale diferitelor acceleratoare grafice. texture map interpolation: când texturile sunt aplicate pe un obiect, procesorul grafic trebuie sa determine care texel va fi aplicat pe care pixel. Cum texturile sunt 2D, iar obiectele sunt 3D, nu va exista o corespondenta de 1:1 între texeli si pixeli. Exista 3 tipuri principale de interpolare sau filtrare: metoda celui mai apropiat vecin, interpolare biliniara si interpolare triliniara.
|