Tokom prve polovine devedesetih godina korišćenje 3D grafike kako u igrama tako i u aplikacijama postalo je sve redovnije. Posledica ovog trenda jeste izražena potreba da se posao renderovanja 3D slike u realnom vremenu izmesti sa centralnog procesora računara u neki namenski deo hardvera.
Korišćenje trodimenzionalne grafike u igrama i aplikacijama prilično je stara ideja. Međutim, osnovni problem jeste kako dovoljno brzo obrađivati izuzetno veliku količinu podataka. Kako je izgledao put do današnjih kartica i kako moderne kartice obavljaju ovaj komplikovani zadatak? Prirodan izbor, naravno, bila je grafička kartica. Sredinom devedesetih godina gotovo svi popularni proizvođači grafičkih kartica tržištu su nudili nekakvu varijantu kartica sa 3D mogućnostima. Međutim, prvi veći pomak po pitanju performansi napravila je firma 3dfx Interactive 1996. godine legendarnom karticom Voodoo. Ova kartica predstavlja preteču modernih grafičkih 3D akceleratora. Iako nije imala nikakve 2D mogućnosti i oslanjala se na prisustvo postojeće kartice za ove poslove, Voodoo je nudio znatno veće performanse u odnosu na konkurenciju, tako da je brzo stekao veliku popularnost i postao predmet želja mnogih gejmera. Kasnije verzije ove kartice donele su uspešno sjedinjavanje 2D i 3D kartica, kao i upotrebu tehnologije po imenu Scan-Line Interleave, iz koje su se kasnije razvili nVidijin Scalable Link Interface i ATI-jev Crossfire koji omogućavaju upotrebu dve kartice za renderovanje jedne slike. Pored namenskog hardvera koji je, naravno, glavni razlog uspeha ove familije kartica, 3dfx je uveo i namenski API nazvan Glide koji je zasnovan na OpenGL-u, ali koji koristi redukovani skup funkcija koje su u potpunosti hardverski implementirane, što ga je činilo i krajnje nefleksibilnim. Popularnost Voodoo kartica počela je da opada krajem devedesetih godina pojavom nVidijine kartice TNT i ustoličenjem Microsoftovog DirectX-a, koji je, nakon prvih verzija koje su završile u ćorsokaku, konačno razvijan zajedno sa proizvođačima hardvera i dizajnerima igara. Konačni kraj Voodooa bila je pojava nVidijine kartice GeForce 256, na koju 3dfx uopšte nije računao. Nekoliko poslovnih promašaja koji su se dogodili u tom periodu izazvali su bankrot firme 3dfx kao i njenu akviziciju od strane nVidije, koja se nije zadovoljila idejom jednostavnog kopiranja tehnoloških dostignuća koja čine ove kartice. Prvi GPU Sam termin Graphic Processing Unit izmislila je nVidija da bi opisala svoju karticu GeForce 256. Ova kartica, koja je nVidiji zagarantovala važno mesto u daljem razvoju 3D hardvera, odlikovala se hardverskom implementacijom T&L-a (Transform & Lighting) i drugim mogućnostima koje su garantovale obradu najmanje deset miliona trouglova u sekundi. Takođe, ova kartica je podržavala DirectX 7.0, što joj je osiguralo prednost pored malobrojnih takmaca.Dalji razvoj serije GeForce u osnovi je predstavljao usavršavanje arhititekture izvorne GeForce 256. Kroz razne generacije ove familije kartica performanse su poboljšavane, pre svega kroz korišćenje metoda za povećanje efikasnosti i brže memorije, što je dovelo do pojave kartice poznate po imenu GeForce4 MX 460 koja je po niskoj ceni nudila odlične performanse, kombinujući najbolje osobine serija GeForce2, GeForce3, kao i Geforce4 Ti. U ovoj verziji, nVidijine kartice su već raspolagale naprednim tehnikama za renderovanje slike kao što su verteks i piksel šejderi, kao i hardverski antialiasing, međutim najbitnija stvar koju su prve generacije GeForce kartica donele jeste dobar grafički pajplajn. U vreme pojave kartice GeForce4 pojavile su se i prve konkurentne ATI-jeve kartice iz serije Radeon. Ostali proizvođači grafičkih kartica do kraja 2002. godine u potpunosti su se povukli iz konkurencije za gejmersko tržište, ostavljajući nVidiju i ATI da se bore za prevlast. Grafički pajplajn Grafički pajplajn (graphics pipeline) je, najkraće rečeno, postupak obrade ulaznih podataka u vidu verteksa, tekstura i mapa kako bi se dobio niz piksela (tačaka) poznatijih kao slika. Pajplajn se sastoji od faza koje se mogu izvršavati nezavisno i paralelno, tako da, nakon što jedna faza rezultat svog rada prosledi sledećoj, može odmah započeti obradu novih podataka. Grafički pajplajn pre svega predstavlja logičku podelu posla koji treba obaviti. Međutim, radi efikasnosti, dizajn hardvera grafičke kartice podređen je njegovoj implementaciji. Postupak obrade podataka u pajplajnu najbolje je ilustrovati na pojednostavljenom dijagramu pajplajna koji koristi Direct3D 10 API. U ovom prikazu pajplajn se sastoji iz šest faza.Prva faza jeste asembler ulaza. U ovoj fazi 3D prostor se popunjava objektima i među njima se definišu prostorne relacije. Ova faza obuhvata i konverziju površina višeg reda kako bi se dobila njihova aproksimacija trouglovima i verteksima (temenima). Na izlazu prve faze dobijaju se trouglovi, prave i tačke koji su osnovni elementi 3D scene (grafičke primitive). Sledeća faza pajplajna jeste verteks šejder. U ovoj fazi vrše se transformacije pojedinih verteksa kako bi se postigli efekti morfovanja, pravljenja skinova, kao i osvetljenja pojedinačnih verteksa. Nakon obrade verteks šejderima, podaci se prosleđuju geometrijskom šejderu. U ovoj fazi transformišu se čitave primitive kako bi se postigli efekti dinamičkih sistema čestica, generisanje krzna i peraja, volumetrijskih senki, dodela materijala objektima i sl. Nakon obrade geometrijskim šejderom, scena je „postavljena” onako kako treba da se vidi iz ugla posmatrača. Nakon geometrijskog šejdera, rezultate obrade moguće je proslediti dalje niz pajplajn i upisati u memoriju kartice. Ova mogućnost naziva se izlaz strima (Stream output) i predstavlja veliku inovaciju u odnosu na ranije verzije DirectX-a. Naime, upis podataka u memoriju, nakon što se obrade verteks i geometrijskim šejderima, omogućava njihovo ponovno učitavanje kroz asembler ulaza. Na ovaj način moguće je potpuno hardverski realizovati mnoge efekte kao što su sistemi čestica, krzno, odeća i drugi efekti koji se računaju iterativno (u više prolaza). Mali rečnik 3D grafike | Aliasing u 3D grafici predstavlja pojavu grubih ivica na renderovanoj slici. Ova pojava smatra se nepoželjnom i postoji nekoliko načina njenog uklanjanja. Aliasing se javlja i prilikom obrade tekstura. | Anizotropno filtriranje je slično trilinearnom filtriranju, s tim što daje realnije rezultate na zakrivljenim površinama. Takođe je i najsporiji vid filtriranja tekstura. | Antialiasing je proces koji se u 3D grafici koristi da bi se ublažila ili potpuno eliminisala pojava aliasinga. | API (Application Programming Interface) predstavlja standardizovani skup funkcija koji programerima omogućava da pišu programe ne obazirući se na stvarno funkcionisanje hardvera. | Bilinearno filtriranje je proces kojim se eliminiše aliasing koji nastaje promenom veličine teksture i zasniva se na zamagljivanju teksture (blur). | Crossfire je ATI-jeva varijanta sistema za korišćenje dve grafičke kartice radi renderovanja slike. | Direct3D je deo DirectX-a koji se tiče grafike. U poslednjim verzijama u potpunosti obuhvata i funkcije DirectDraw API-ja. | DirectX je skup API-ja koje je razvio Microsoft. Obuhvata upravljanje grafikom, zvukom, prenosom podataka i ulaznim uređajima. | Eliminacija (culling) je postupak odbacivanja iz procesa obrade onih primitiva koje se iz nekog razloga ne vide u sceni. Na ovaj način štedi se procesorsko vreme kartice. Postoji više kriterijuma za eliminaciju. | Kliping (clipping) se događa kada neka od primitiva samo delimično upada u vidljivi frustrum. Ova pojava zahteva posebnu obradu primitive kako bi ona bila ispravno prikazana. | Mapiranje (mapping) je postupak kojim se tekstura lepi na 3D površinu. Ovaj proces podrazumeva skup operacija kako bi se tekstura ispravno nalepila, uzimajući u obzir oblik površine i perspektivu. | MIP-mapping je postupak eliminacije aliasinga u teksturama korišćenjem različitih verzija teksture koje imaju različite dimenzije. Izbor varijante koja se koristi zavisi od blizine objekta. | Multisampling je tehnika obavljanja antialiasinga. Predstavlja poseban slučaj tehnike koju zovemo supersampling, odlikuje se nešto manjim mogućnostima i većom brzinom. | Površinska normala ili samo normala predstavlja jedinični vektor koji ukazuje na orijentaciju posmatrane primitive. Orijentacija primitive koristi se kako pri senčenju tako i pri određivanju da li primitivu treba obrađivati. | Prava je jedna od primitiva u 3D grafici. Definišu je dva verteksa. | Šejderi su posebni programi koji izvršavanjem na grafičkoj kartici menjaju 3D scenu putem pojedinačnih verteksa, primitiva, ili piksela radi postizanja različitih efekata | Šejderska jedinica, vektorski procesor ili striming procesor predstavlja deo GPU-a koji izvršava šejderski program; može ih biti više. | SLI (Scan Line Interleave, Scalable Link Interface) predstavlja tehniku korišćenja dve grafičke kartice za generisanje slike. Prvi termin koristio se kod Voodoo kartica, dok je drugi skovala nVidia za svoj sistem. | Supersampling je tehnika antialiasinga koja zahteva više memorije i procesorskog vremena, ali nudi bolje rezultate. | Tekstura predstavlja bitmap sliku koja se lepi na 3D površinu kako bi joj se dao određen izgled (boja, reljef, odsjaj i sl.) Teksture mogu biti predefinisane i proceduralne. | Transformation & Lighting predstavlja prvu fazu obrade u grafičkom pajplajnu prvih 3D kartica. Ovaj stepen bio je zadužen za izmene same geometerije scene i određivanje osvetljenosti primitiva. Pošto je korisnicima nudio samo ograničen skup mogućnosti implementiranih u hardveru, u novijim generacijama kartica zamenjen je verteks šejderima. | Trilinearno filtriranje kombinuje bilinearno filtriranje sa MIP-mappingom nudeći linearnu interpolaciju između različitih varijanti teksture. | Trougao je najkompleksnija primitiva u 3D grafici. Definisan je sa tri verteksa, bojom, teksturom i površinskom normalom. | Verteks predstavlja tačku u prostoru kojoj su pored koordinata pridruženi i sledeći podaci: boja, parametri refleksije, tekstura i površinska normala. Verteks je osnovna primitiva u 3D grafici. | Vidljivi frustrum određen je vidnim poljem zamišljene kamere, a predstavlja četvorostrani rogalj koji s jedne strane ograničava ravan monitora a s druge ravan kojoj pripada najdalji vidljivi objekat. | Vidno polje u 3D grafici predstavlja oblast 3D scene koja se vidi na monitoru. Vidno polje definisano je četvorostranom zarubljenom piramidom koju nazivamo vidljivi frustrum. |
| | Sledeća faza se ukratko naziva rasterizacija. Osnovni zadatak ove faze jeste pretvaranje 3D scene u 2D sliku. Da bi se to efikasno obavilo, potrebno je izabrati koji se delovi scene zaista vide. Kriterijumi koji se ovde koriste jeste da li se deo scene nalazi u vidnom polju posmatrača, kao i to da li je zaklonjen nekim drugim delom scene koji nije providan, a postoje i mnogi drugi. Nakon rasterizacije dobijamo dvodimenzionalni pogled na scenu.Piksel šejder predstavlja pretposlednju fazu u pajplajnu. U ovoj fazi određuje se boja svakog piksela slike. Neki od zadataka koje piksel šejder obavlja jesu: Phong senčenje, efekti anizotropnog osvetljenja, volumetrijski efekti, lepljenje reljefnih tekstura, kao i generisanje proceduralnih tekstura i mnogi drugi. Piksel šejderi obavljaju najveći deo posla u renderovanju 3D scene. Formiranje izlaza jeste poslednja faza pajplajna. U ovoj fazi dovršava se isecanje objekata koji pripadaju slici (clipping) na osnovu „dubine” objekta u sceni, kao i na osnovu predefinisanih šablona (stencils). U ovoj fazi primenjuju se tzv. efekti frejmbafera kao što su magla, sjaj i sl. Nakon faze formiranja izlaza, slika je spremna za slanje na monitor. Kako to izgleda u hardveru Najbitniji deo savremene grafičke kartice je njen procesor. S obzirom na to da je trodimenzinalna grafika izuzetno pogodna za paralelnu obradu, grafički procesori odavno su počeli da primenjuju višejezgarnu arhitekturu i istovremeno izvršavanje više tredova. Međutim, od čega se zapravo sastoji savremeni procesor? Da bismo pojasnili ovu oblast, uzećemo kao primer pojednostavljeni dijagram nVidijinog procesora G92 koji se nalazi u najnovijim karticama ovog proizvođača. Osnovna jedinica koja obrađuje podatke naziva se striming multiprocesor (SM). Svaki od ovih procesora sastoji se od osam procesorskih jezgara, upravljačkog dela i nešto lokalne memorije za keširanje podataka. Striming multiprocesori organizovani su u teksturne procesorske klastere (texture processing cluster, TPC). Svaki TPC sadrži tri SM-a, osam procesora za filtriranje tekstura i L1 keš memoriju. TPC predstavlja osnovnu organizacionu jedinicu u procesoru. S jedne strane, TPC-ovi razmenjuju podatke sa memorijom kartice i u tu svrhu koriste L2 keš. S druge strane, TPC-ovi komuniciraju sa ostatkom grafičkog procesora od kojeg dobijaju instrukcije. Pored raspoređivanja TPC-ova radi što efikasnijeg izvršavanja kako šejdera tako i ostalih operacija grafičkog pajplajna, grafički procesor obavlja i inicijalnu pripremu scene kroz asembler ulaza, rasterizaciju, kao i komunikaciju sa samim računarom. Ovakva organizacija grafičkog procesora G92 stavlja mu na raspolaganje čak 240 procesorskih jezgara. Kada se tome dodaju napredni algoritmi za upravljanje radom ovih jezgara, dobija se sistem koji može efikasno paralelno da izvršava nekoliko hiljada tredova, što je neophodno za generisanje dovoljnog broja frejmova u sekundi čak i u vizuelno najkompleksnijim igrama. • • • Veliki broj namenskih procesorskih jezgara sposobnih da velikom brzinom obavljaju izuzetno komplikovane matematičke operacije čine prosečnu grafičku karticu neuporedivo jačim procesorom i od najmodernijih Intelovih i AMD-ovih procesora. Primena grafičkih kartica van oblasti grafike još je u povoju, ali u skorijoj budućnosti možemo očekivati veliki napredak u ovom pogledu. Hardver postoji, kao i prve verzije softverskih rešenja koja ga iskorišćavaju. Nadamo se da smo u ovom i prethodnom tekstu uspeli da opišemo kako sam razvoj grafičkih kartica tako i da razjasnimo neke od najbitnijih koncepata koji stoje iza ovih izuzetno moćnih uređaja, koje samo zbog nekoliko semantičkih začkoljica i definicija ne možemo nazvati punopravnim računarima. |