» »

Čudežno popotovanje skozi grafični cevovod

Trenutno očitno živimo v obdobju, ko razni *PU-ji (Processing Unit) rastejo kot gobe po dežju. Nedolgo tega je tržne police ugledal prvi pospeševalnik fizikalnih izračunov (PPU ali Physic Processing Unit) PhysX podjetja Ageia. In ker to očitno še vedno ni dovolj, se pojavljajo še pospeševalniki za umetno inteligenco in celo mrežne kartice, ki nosijo PU v imenu. Krivec za to poplavo pa je verjetno GPU (Graphics Processing Unit) in ideja o kovanju železa dokler je vroče. Da malce razjasnimo nastalo situacijo ter razložimo zakaj se GPU-ji dejansko obnesejo, pa se bo potrebno spustiti skozi tole zajčjo luknjo...

Modra ali rdeča tabletka?

Še vedno nismo rekli nobene o CPU-ju (Central Processing Unit), ki se danes pojavlja kot osrednja komponenta vsakega domačega računalnika. Ob pojavu prvih osebnih računalnikov so bile grafične kartice izjemno preproste napravice. Sestavljene so bile v bistvu le iz koščka pomnilnika in RAMDAC (Random Access Memory Digital to Analog Converter) vezja. Njihova naloga je bila torej le pretvarjanje slike v pomnilniku v analogni signal, ki ga je prikazoval monitor.

Diagram grafičnega cevovoda nekoč

Če je programer hotel nekaj prikazati na zaslonu je najprej izbral ustrezni način (grafični ali tekstovni) in zapisal željeno sliko v pomnilnik na grafični kartici. RAMDAC nato sliko prebere in izriše na zaslonu. Tukaj se že takoj pojavi vprašanje katero še danes dostikrat udari na dan: "Kako zapisati sliko in koliko podatkov shraniti za posamezno piko?" To se je udejanjilo v kupu različnih standardov: MDA (Monochrome Display Adapter), Hercules, CGA (Colour Graphics Array), EGA (Enhanced Graphics Array), VGA (Video Graphics Array),... Vse te kratice mlajšim bralcem gotovo ne povedo več prav veliko. Kdo se danes še spomni slavnega "Mode 13h," ki je s svojimi 200 vrsticami in 320 pikami v vrstici ter 256 barvno paleto razveseljeval igralce Prehistoric in podobnih?

Tu pridemo še do enega pojma: barvna paleta. Vsi ti starejši grafični načini so paletizirani, kar pomeni, da ima RAMDAC shranjeno neko tabelo, v kateri je za vsak indeks shranjena dejanska barva, ki bo prikazana na zaslonu, če se njen indeks pojavi pri branju slike iz video pomnilnika. Pri 256 barvah je tako vsaka pika na zaslonu velika en bajt v pomnilniku. Tak način je povsem neuporaben za naprimer kakšno obdelavo slike, zato se danes uporabljajo 16 bitni hi colour in 24 ter 32 bitni true colour načini, kjer je posamezna pika sestavljena iz dveh, treh ali štirih zaporednih bajtov in ni več uporabljena paleta. To nam omogoči, da posamezne slike med seboj seštevamo in jih drugače obdelujemo, o čemer bomo več izvedeli prav kmalu.

Voodoo Graphics revolucija

Takšno stanje je vladalo praktično vse do prihoda prvega pravega grafičnega pospeševalnika Voodoo iz legendarnega 3dfx. Do tedaj so se proizvajalci grafičnih adapterjev ubadali predvsem s tem kdo bo imel večjo ločljivost, boljše osveževanje in kako čim hitreje poganjati takratna okna. Profesionalci so že od leta 1991 imeli na voljo standardno OpenGL knjižnico in drage delovne postaje podjetja SGI (še ena legenda). Na trgu osebnih računalnikov pa je vladal kaos in vsem je bilo jasno, da je 3dfx čakalo veliko dela. Najprej je bilo potrebno določiti način, kako bodo programerji dostopali do grafičnega pospeševalnika. Tako se je rodila knjižnica Glide, že obstoječi OpenGL je bil za tisti čas prekompliciran, Direct3D pa... Ah pustimo DirectX na miru še nekaj časa. Kaj je torej bil Voodoo? Dodatna kartica, ki je za delovanje potrebovala signal grafičnega adapterja, imela je 2 ali 4MB pomnilnika za teksture in frame buffer, en pixel pipeline z eno teksturirno enoto in tako je bil čip pri 45MHz sposoben izrisati 45 milijonov teksturiranih pik. Dobrodošli v dirko za čimhitrejše graifčne posepeševalnike, gospodje, poženite motorje.

Voodoo Graphics - prvi 3D pospeševalnik

Kako dejansko rišemo

Dobili smo svoj prvi grafični pospeševalnik, toda kaj dejansko počne in kako deluje? 3dfx je bil pri Voodoo Graphics zelo agresiven. Čip je podpiral 16 bitne barve pri renderiranju in teksturah, 256x256 pik velike teksture in predvsem "zastonjsko" bilinearno filtriranje tekstur. V primerjavi s takratno konkurenco, ki je podpirala zgolj minimalne teksture, malo različnih (in uporabnih) formatov za teksture,...

Struktura cevovoda na Voodoo Graphics

Zgornja slika se zelo lepo sklada z sliko same kartice malo višje. Voodoo 1 je imel ločen pomnilnik za teksture in frame buffer. Prav tako sta na kartici dejansko dva čipa, eden je odgovoren za teksturiranje, drugi pa za rasterizacijo. Kaj je rasterizacija? Postopek kako s posameznimi pikami zapolnimo celoten trikotnik. V primeru grafičnih kartic in vprašanja kako dejansko se to naredi pa že naletimo na problem, saj podjetja to zelo rada skrivajo. Saj je iz zaporedja kako se pike izrisujejo mogoče malce povohuniti po tem kako sam čip deluje. Voodoo 1 je izrisoval pike od leve proti desni od zgornjega oglišča trikotnika navzdol črto po črto. Zanimivo je, da prvi pospeševalniki niso zmogli izrisati trikotnika brez ene horizontalne stranice. Naloga gonilnika je bila, da razstavi trikotnik na dva tako, da ustreza temu pogoju. Današnji GPU-ji rasterizirajo v 2x2 blokih zaradi večje učinkovitosti pri predpomnilniku.

Rasterizacija trikotnika - če je središče pike znotraj trikotnika se pika pobarva, sicer ne. Problem?

ROP enota (Raster OPeration) je odgovorna za izris posameznih pik. Pri tem ima na razpolago kos pomnilnika imenovanega frame buffer, iz katerega bo kasneje RAMDAC pobral sliko in jo prikazal na zaslonu. Sedaj imamo že opravka s povsem 3D okolji in grafična kartica mora sama ugotoviti kateri trikotniki so spredaj (vidni) in kateri zadaj (nevidni). To zopet počne ROP enota, ki si v kos pomnilnika imenovan z-buffer zapiše za vsako izrisano piko tudi njeno globino na zaslonu. Če kasneje pride na isto lokacijo še ena pika se njena globina preveri s tisto shranjeno v z-bufferju in, če je nova pika bližje se jo izriše, sicer pa zavrže. Poleg tega je ROP enota odgovorna še za (alpha) blending oziroma kombiniranje slike, ki je že v frame bufferju in nove slike. Na ta način lahko naredimo določene objekte polprosojne ali pa naredimo še en prehod čez celotno sceno, če npr. potrebujemo več tekstur, kot jih je sposoben v enem prehodu obdelati grafični čip.

Teksture so obleke 3D modelov

Teksture so v bistvu zgolj običajne 2D slike ali 3D volumetrične slike. Te slike nalepimo čez naše modele iz trikotnikov in jim s tem dodamo detajle. Seveda lahko čez posamezen trikotnik nalepimo tudi več tekstur, ki jih nato na nek način kombiniramo med sabo in tako pridemo do končne barve pike, ki se jo poda naprej ROP enoti. Teksture je potrebno tudi filtrirati. Lahko imamo naprimer en velik trikotnik z malo teksturo in tako lahko kaj hitro opazimo nadležne kocke na teksturi, ker se posamezne pike iz teksture (teksel) raztezajo čez cel kup pik na igralčevem zaslonu. Za vse to je odgovorna TMU enota. Ta mora najprej prebrati 2x2 blok pik iz teksture in nato iz teh štirih tekslov generirati eno samo barvno vrednost.

Bilinearno filtriranje - dve operaciji horizontalno, ena vertikalno oziroma 9 vektorskih seštevanj in množenj

Tako pridemo do Voodoo 2, ki je v primerjavi z Voodoo Graphics doprinesel možnost multiteksturiranja. Tako da lahko grafična kartica kombinira dve teksturi brez da zapiše rezultat v pomnilnik. Ta kartica je bila sposobna izrisati 90 milijonov pik v sekundi in prebrati 180 milijonov tekslov na sekundo iz tekstur. Kartica je bila predstavljena leta 1998, v naslednjih 8-ih letih bodo te specifikacije presežene za faktor 100.

Voodoo 2 z dodatkom še ene TMU enote

Cevovod na Voodoo 2

GPU je rojen

Kratico GPU prvič uporabi NVIDIA pri predstavitvi svojega novega čipa GeForce 256. Razlog tiči v tem da so s tem procesorjem dosegli funkcionalen nivo profesionalnih grafičnih kartic vsaj kar se klasičnega OpenGL cevovoda tiče. GeForce 256 je tako prvi čip, ki je bil poleg rasterizacije slike sposoben preračunavati še transformacije in senčenje na ogliščih trikotnikov. In to je vse kar bi si človek želel od grafične kartice?

Rojstvo GeForce 256

Dodatek strojnega T&L (transformacij in senčenja)

Kaj se je še spremenilo od prvega Voodoo-ja? Barvna globina tako renderiranja kot tekstur se je povečala iz 16 bitov na 32 bitov, največja dovoljena velikost tekstur se je povečala na 2048x2048 in začelo se je poskušati z bump mappingom (navidezno grbinčenje trikotnikov). In kolikor je razvidno iz sheme cevovoda v primerjavi z Voodoo 2 je očitno tudi to, da je pomnilnik sedaj enoten in ne več ločen na frame buffer in pomnilnik za teksture.

Nekaj o alternativah

Vsi danes razširjeni GPU-ji so tako imenovani "immediate mode renderer"-ji, kar pomeni, da dobijo trikotnike, jih transformirajo in takoj pošljejo naprej na izris. Tako GPU težje profitira od vrstnega reda trikotnikov, oziroma je priporočeno, da se izrisuje objekte, ki so blizu, pred tistimi, ki so bolj oddaljeni. Edina prava alternativa, ki se je pojavila, je Kyro podjetja PowerVR. Kyro ne spada v kategorijo immediate mode renderer-jev saj trikotnikov ne začne izrisovati takoj ampak počaka, da igra pošlje VSE trikotnike, jih uredi po globini in po tem v katero področje padejo. Čip ima vgrajenega dovolj pomnilnika, da lahko hrani 12x12 pik veliko področje frame bufferja kamor izriše trikotnike za to področje. Ko so vsi trikotniki iz trenutnega kvadratka izrisani, se celotno področje zapiše v pomnilnik, čip pa začne z delom na drugem področju. Tak pristop bistveno zmanjša porabo pomnilniške propustnosti z zunanjim pomnilnikom, saj se vsaka pika izriše samo enkrat. Omogoča tudi zastonjsko mehčanje robov, saj se vsi vzorci hranijo v čipu samem in pred izpisom v zunanji pomnilnik skrčijo (t.i. anti aliasing resolve). Nastane pa problem, ko je geometrije veliko, saj poraba pomnilnika strmo naraste. Drugi problem pa je, kako v to arhitekturo vpeljati kakršno koli pospeševanje transformacij geometrije tako kot na GeForce 256. Če se trikotniki obdelujejo na čipu se morajo v tem primeru pred rasterizacijo zapisati nazaj v pomnilnik, ustrezno urediti in potem prebrati nazaj na čip. Podoben pristop uporablja XBox 360, ki ima 10MB zelo hitrega pomnilnika zraven jedra na istem čipu. Kljub na videz veliki količini pomnilnika to še vedno ne zadostuje za ločljivosti (HDTV) in mehčanje robov, ki so danes standard. XBox 360 tako za vsak blok pošlje geometrijo še enkrat skozi cevovod, lahko pa se uporabi t.i. stream out in se zapiše transformirano geometrijo v pomnilnik.

Kyro - edini uspešni upornik

Programabilna revolucija

Ob prihodu DirectX 8.0 in kasneje z DirectX 9.0 se je v 3D pospešenem svetu prvič pojavila programabilnost. Pixel shaderji nadomestijo klasično multiteksturiranje, vertex shaderji nadomestijo fiksno ožičeno logiko za transformacijo in senčenje ogljišč. Poglejmo si sedaj kako izgleda sodoben grafični cevovod. V video pomnilniku se nahajajo podatki o trikotnikih: ogljišča so shranjena v vertex bufferjih, podatki katera ogljišča sestavljajo posamezni trikotniki so shranjeni v index bufferjih. Prav tako so tukaj že omenjene teksture ter pixel in vertex shader programska koda. GPU najprej s pomočjo index bufferja prebere ustrezna ogljišča iz vertex bufferja v prepomnilnik. Sedaj se deli ogljišč iz predpomnilnika prenesejo v ustrezne registre vertex shader enot glede na semantiko podatkov (pozicija ogljišča, kooridnate za teksture, normale,...). Sedaj se izvede vertex shader program, oziroma zaporedje ukazov, ki ogljišče z vsemi pripadajočimi podatki transformirajo iz nekega 3D prostora v prostor na zaslonu (in zasloni so še vedno 2D) in njegovi rezultati se zapišejo v drug predpomnilnik. Tipično lahko GPU na tej točki drži 16 ali več različnih ogljišč neodvisno od njihove velikosti. GPU tudi ve kateremu indeksu posamezno ogljišče pripada in če se isti indeks pojavi večkrat (več trikotnikov si deli isto ogljišče) se uporabi rezultat v tem predpomnilniku in ni potrebno ogljišča še enkrat pošiljati čez vertex shader. Sedaj pride na vrsto triangle setup enota. Ta najprej ugotovi ali je trikotnik obrnjen proti opazovalcu (je viden) ali pa je obrnjen stran (in torej neviden) in se ga lahko zavrže. Če je trikotnik viden se začne njegova rasterizacija. GPU sedaj pripravi vhodne podatke za pixel shader in dodeli pixel shader enoto, ki bo izvedla senčenje te pike z točno določenim položajem na zaslonu. V OpenGL terminologiji se uporablja izraz fragment in ne pika, saj na tej točki načeloma ne vemo ali bo pika sploh vidna (lahko je zavrnjena pri z testiranju). Ko je tudi to končano, piko, načeloma samo barva in podatek o globini, prevzame ROP enota. Ta lahko piko zavrne iz različnih razlogov. Pika je lahko nevidna in pade na z testiranju, vendar so sodobni GPU-ji dovolj pametni, da take fragmente zavrnejo še pred (potencialno zelo dragim) pixel shader programom. Tega seveda ne morejo storiti, če pixel shader program spremeni globino pike in v tem primeru je pač potrebno počakati, da se izvede tudi pixel shader. Naslednja točka na kateri lahko posamezna pika pade je alpha testiranje. Tu se lahko zavrnejo pike glede na njihovo alpha komponento. Tipičen primer tega so npr. žičnate ograje v igrah. Če pa pika pride tudi čez to prepreko, pa jo ROP enota končno zapiše v pomnilnik - frame buffer.

Splošna struktura cevovoda današnje grafične kartice

Če ste spremljali opis cevovoda vsaj malček pozorno ste gotovo ugotovili, da se na nobenem koraku ne moremo vprašati: "Kaj se dogaja s sosednjim ogljiščem ali sosednjo piko?" To dejstvo je zelo pomembno za hitrost GPU-jev saj omogoča paralelno procesiranje. XBox 360 tako hkrati poganja vertex shader na 64 ogljiščih in pixel shader na 64 pikah. Če se izvajanje kakšnega bloka ustavi npr. zaradi čakanja na teksture, lahko GPU zaustavi celoten blok in začne izvajati drug blok. XBox 360 ima tako kar 24576 splošnih registrov, podobno število pa jih najdemo tudi na PC GPU-jih. Ti registri omogočajo odlaganje izvajanja, njihovo število pa določa koliko pik in ogljišč (niti) lahko GPU hkrati obdeluje. Se še spomnite polomije imenovane GeForce FX? Pomanjkanje registrov je v praksi pomenilo, da če je kakšen pixel shader imel več kot 2 aktivna regsitra je bil pritisk že tako velik, da GPU ni bil več sposoben odlagati dela in je enostavno moral čakati na teksturirno enoto. Od tu izvira večji del obsedenosti s polovično natančnostjo pri NVIDI-ji v tistem času. Polovična natančnost namreč pomeni dvakrat večje število razpoložljivih registrov. Tudi pri današnji generaciji ima GeFroce 7900 GTX (G71 jedro) še vedno manj registrov kot Radeon X1800 (R520) in Radeon X1900 (R580) iz kanadskega ATI-ja.

Naslednje dejstvo, ki je danes vse bolj očitno je to, da so pixel shaderji vedno daljši in bolj komplicirani. Rezultat tega je, da pixel shaderji potrebujejo vedno več ciklov za dokončanje posamezne pike. To pomeni, da lahko ločimo pixel shader enote od ROP enot, saj bi sicer slednje bile neizkoriščene. G71 jedro ima tako 16 ROP enot in 24 pixel shader enot, R580 pa gre pri tem še dlje z 16 ROP enotami in 48 pixel shaderji.

Cevovod G70 (GeForce 7800GTX)

Cevovod R580 (Radeon X1900) - TMU enote povsem ločene od pixel shaderjev

Prihodnost je sedaj

Nova generacija grafičnih kartic je pred vrati, Microsoft pripravlja nov operacijski sistem Windows Vista, ki bo prišel na dan z novo grafično knjižnico Direct3D 10. Čaka nas tako cel kup sprememb, za katere je precej težko ugotoviti kako bodo vplivale na hitrost in kaj vse bodo programerji poskusili z novo funkcionalnostjo. Prihajajo geometry shaderji, za katere nimamo nobene podobne funkcionalnosti v današnjih GPU-jih. Novost je tudi že omenjeni "stream out", ki omogoča zapis že obdelane geometrije v pomnilnik in njeno nadaljno obdelavo. Sprememb pa je še cel kup in vsaka po malem bo pripomogla k večji svobodi programerjev. Za običajnega uporabnika pa bo vidno predvsem to, da bo novi Direct3D za delovanje nujno potreboval tudi nov operacijski sistem in da današnje grafične kartice niso sposobne poganjati niti najbolj preprostih Direct3D 10 aplikacij.

Splošna struktura cevovoda prihajajočih GPU-jev

Zanimivo je tudi to, da se je Microsoft odločil odstraniti vso staro navlako vseh dosedanjih Direct3D knjižnic. Tako bo tudi za najbolj preproste stvari potrebno napisati shader, saj ne bo več nobene emulacije npr. multiteksturiranja ali transformacij in senčenja iz Direct3D 7. To je s tehničnega stališča čisto logična odločitev, saj sodobne grafikulje že lep čas te stvari emulirajo s shaderji. Edini problem je, da zna to biti za začetek malce nadležno. Nova knjižnica ima še eno veliko prednost: DrawPrimitive klici so bistveno pohitreni. To pomeni, da bo CPU potreboval veliko manj ciklov za pripravo posamezne sličice v igri in ker je večina iger omjena s strani centralnega procesorja, lahko že zaradi tega pričakujemo višje hitrosti. Dobrodošlo je tudi to, da so sedaj specifikacije do potankosti določene. Izdelovalci grafičnih čipov imajo tako točno določeno kaj je potrebno podpreti, da bo GPU kompatibilen z D3D10. Obenem pa tudi ne omogoča več zaobhajanja specifikacij s pomočjo katerih sta NVIDIA in ATI pretihotapila marsikatero novost v svojih čipih v D3D (strojno podporo za senčne mape, kompresiranje normal map,...). Se pa Microsoft namerava odkupiti s pogostejšim posodabljanjem knjižnice. Striktne in poenotene specifikacije s seboj prinesejo tudi idejo o poenotenju logike na strojnem nivoju. Današnji GPU-ji imajo nekaj logike za vertex shaderje in nekaj povsem ločene logike za pixel shaderje. Če preveč obremeniš ene, bodo drugi ostali neizkoriščeni. Te težave se znebimo s poenotenjem shaderjev (t.i. Unified Shaders) na strojnem nivoju. Dodeljevanje posameznih shader enot med različna "senčilna" opravila lahko z istim številom enot doseže veliko večjo hitrost in posledično izkoriščenost, saj se razmerje med obremenitvijo lahko močno spreminja že znotraj posamezne renderirane slike. ATI je tako že dostikrat dal vedeti, da bo njihova naslednja generacija kartic imela poenotene shaderje.

Kaj pravi kristalna krogla?

Kljub temu, da na policah trgovin še vedno ne moremo najti grafičnih kartic z D3D 10 podporo, pa se že lahko zazremo malo v prihodnost. Vista bo v 3D svet prinesla marsikaj novega, ne bo pa popolna. Še vedno nam manjka možnost generiranja velike količine geometrije na GPU-ju, s čimer bi lahko v igrah začeli uporabljati ukrivljene ploskve. Prihajajo sicer geometry shaderji, vendar so glede tega precej omejeni. Dostopajo lahko samo do neposrednih sosedov trikotnika (t.i. first tier vertices), kar je premalo za kakršen koli uporaben algoritem, ki bi reprezentiral krivulje s trikotniki. Poleg tega so geometry shaderji precej omejeni s številom ogljišč, ki jih lahko generirajo. Obeta se nam še en shader - tesselation shader, ki bo skrbel ravno za to. Imel bo dostop do večjega števila sosednjih ogljišč in trikotnikov, ter manj restrikcij pri količini generiranih podatkov.

Naslednja ideja je dostop do trenutne vrednosti pike v frame bufferju iz pixel shaderja. To je ena izmed precej lepih in logičnih lastnosti, ki pa se jo proizvajalci strojne opreme vztrajno otepajo. Razlog tiči v tem, da se izgubi nekaj maneverskega prostora pri določanju kdaj se pike dejansko zapišejo v pomnilnik. Namreč GPU končane pike v danem bloku spravi v predpomnilnik, od koder jih kasneje kasneje zapiše v video pomnilnik. Tu imamo sedaj namesto točno določene točke, kjer se mora prejšnja pika prebrati nazaj v GPU (ROP enota, ko je aktiven blending), opravka s potencialno precej naključno točko v pixel shaderju, kdaj bo potrebna vrednost prejšnje pike, lahko hitro izgubimo konsistentnost (branje pike še preden se je vrednost zapisala v pomnilnik). GPU-ji pa so predvsem hitri in stvari, ki lahko povzročijo take zaplete, enostavno ne delujejo, dokler se ne najde poti okrog.

Nekoč pa bo prišel tudi čas, da se naredi programabilen še zadnji; največji kos trdo ožičene logike na grafičnih karticah - teksturirne enote. Eventuelno bi želeli programirati svoje bolj kvalitetne filtre za filtriranje tekstur, namesto da se uporablja le linearna interpolacija v vseh svojih oblikah (bilinearno, trilinearno in anisotropično filtriranje). To pa je eden bolj zahtevnih in dragih pristopov in se znamo še precej načakati.

Še vedno pa ni konca luknje...

Toliko o sami zgradbi sodobnega GPU-ja. Še vedno pa ostane precej detajlov in nekaterih sploh še nismo omenili (recimo mehčanje robov, kaj vse se da narediti z različnimi shaderji,...). Več o teh temah pa si bomo bolj podrobno ogledali naslednjič.

Čudežno popotovanje skozi grafični cevovod II

Čudežno popotovanje skozi grafični cevovod II

V prvem delu smo si ogledali strukturo sodobne grafične kartice. Med drugim smo omenili shaderje, ki so zaradi svoje programabilnosti, nekakšno srce in duša sodobnih GPU-jev. Različni shaderji so odgovorni za različne strukture v grafiki (v Direct3D 10 so to oglišča, ...

Preberi cel članek »

Test 7800 GTX

Test 7800 GTX

GeForce napada v sedmo Po napetem tekmovanju za najhitrejši grafični procesor med NVIDIO in ATI-jem se razvoj novih grafičnih kartic kot kaže umirja. Od splavitve GeForce 6800 je minilo že dobro leto in kljub pritisku ATI-ja v obliki X850 sta oba proizvajalca nekako ostala v pat poziciji. NVIDIA je ...

Preberi cel članek »

DirectX 9.0 - Izboljšave knjižnice

DirectX 9.0 - Izboljšave knjižnice

V prejšnjem delu smo si ogledali novosti in izboljšave, ki so doletele programabilnost grafičnih kartic, torej osenčevalnike točk ter oglišč. Seveda pa novi pixel in vertex shaderji niso edina novost v DirectX 9.0. Novosti je še kar nekaj, vendar je res, da je ...

Preberi cel članek »

Nova bitka v vojni grafičnih kartic

Nova bitka v vojni grafičnih kartic

Da je računalništvo hitro se razvijajoča panoga čivkajo že vrabčki na vejah. Da se grafične kartice razvijajo še hitreje od ostalih področij znotraj računalništva, je takisto lahko jasno vsakemu, ki vsaj vsake toliko preleti kakšen cenik ...

Preberi cel članek »

Kaloričen zajtrk: milijarde trikotnikov in sodobni GPU-ji

Kaloričen zajtrk: milijarde trikotnikov in sodobni GPU-ji

Spletni forumi so dandanes polni razglabljanj na temo poÄasnega napredovanja grafike v PC igrah. VeÄina komentatorjev se obiÄajno obdregne ob konzole, katerih zmogljivosti so fiksirane Ĺže vse od njihovega izida in poslediÄno viĹĄjih stroĹĄkov razvoja iger, v primeru dodatnih grafiÄnih izboljĹĄav ...

Preberi cel članek »