» »

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 velika večina le-teh povezana z grafiko. Razen pohitritev komponent DirectSound in DirectMusic, izboljšane združljivosti za DirectInput in nekaj malenkosti v DirectPlay (sedaj je možno to komponento uporabljti tudi na Pocket PCjih), se večina sprememb nahaja v komponentah Direct3D in DirectShow.


Novi formati podatkov

Da bi lahko zares izkoristili vse, kar nam prinašajo novi pixel shaderji, je bilo potrebno uvesti tudi nove, bolj natančne formate za teksture. Tako DirectX 9.0 sedaj ponuja 16 in 32-bitne 1D (torej 16 ali 32 bitov za vsak točko), 2D (32 ali 64 bitov za vsak točko) in 4D (64 ali 128 bitov za vsak piksel) formate s plavajočo vejico in 16 bitne 2D (32 bitov za vsako točko) in 4D (64 bitov za vsak točko) fiksne formate, ki jih lahko uporabimo za teksture, na njih pa lahko tudi renderiramo. Glavna prednost formatov s plavajočo vejico je, da lahko z njimi opišemo tudi števila, ki so večja od 1 in manjša od -1 (kar se imenuje high dynamic range, oziroma po slovensko visokodinamičen obseg), kar omogoča HDRI (High Dynamic Range Images) učinke, tone mapping in podobno. 16-bitni 2D in 4D fiksni formati pa so namenjeni za stvari, ki potrebujejo veliko natančnost, ne potrebujejo pa velikih obsegov števil, torej normal mape in ostalo, kar potrebujemo za izvedbo bump mappinga. Vsi ti formati lahko uporabljajo tudi filtriranja, vendar je običajno linearno filtriranje na teksturah s plavajočo vejico praktično neuporabno.

Novi formati so vpeljani tudi za vertex bufferje (pomnilnik, kamor se shranjujejo podatki o geometriji). Ker je namreč geometrije vedno več in tako zaseda vedno več prostora, lahko sedaj za določene stvari uporabljamo tudi 16 bitne 4D formate s plavajočo vejico -- do sedaj so bili namreč na razpolago le 32 bitni 4D formati s plavajočo vejico -- in nekaj formatov s fiksnimi števili.


Povpraševalni mehanizem

Microsoft je v DirectX 9.0 vpeljal tudi povsem nov asinhron mehanizem za pridobivanje podatkov iz grafične kartice. Dosedaj so bili ti mehanizmi sinhroni, kar pomeni, da je morala CPE vedno čakati, da ji je grafična kartica vrnila rezultat. Ker pa so grafične kartice zelo paralelizirane in tako običajno opravljajo več zahtevnih opravil istočasno, pa je bilo potrebno na rezultat čakati kar precej časa. To je pomenilo, da se je CPU vrtel v zanki in ni počel nič pametnega, torej tudi ni mogel grafični kartici pošiljati novih ukazov za izrisovanje (in v boju, da čim več iztisnemo iz grafične kartice, je to zelo slab znak). Ker je nov mehanizem asinhron, to pomeni, da CPEju in s tem aplikaciji ni več treba čakati na rezultat. Aplikacija tako samo pošlje zahtevo po določeni informaciji in nato normalno nadaljuje z delom. Ko aplikacija željeno informacijo potrebuje, vpraša za rezultat. Če je le-ta že na voljo, ga uporabi, sicer pa lahko ali čaka na rezulzat ali pa na zahtevo kar pozabi in nadaljuje z delom.

Tako je sedaj tudi v DirectXu možna uporaba "vidljivostnih zahtevkov" (occlusion query), ki jih podpira že kar veliko kartic (od GeForce 3 in Radeona 8500 naprej) in omogočajo aplikacijam, da vprašajo grafično kartico, koliko pik bo določen objekt dejansko zasedel na končni sceni, kar igram omogoča, da na grafično kartico ne pošiljajo odvečne geometrije. Poteza je logična. Zakaj bi, recimo, na grafično kartico pošiljali 10000 trikotnikov, če bosta na koncu vidni samo dve piki? Z uporabo vidljivostnih zahtevkov je možno narediti tudi različne optične trike, kot so močne luči ter Sonce, brez precej kompleksnih izračunov na centralnem procesorju.


Dinamično odmikanje ogljišč

V DirectX 9.0 se je znašel tudi "displacement mapping" (odmikanje ogljišč glede na višino, ki jo preberemo iz višinske mape). Sicer ne samo ena metoda, ampak kar tri. Najenostavnejša metoda uporablja vnaprej vzorčeno višinsko mapo (pre-sampled displacement mapping), le-to podpira Radeon 9700. Pri tej metodi moramo vsakem oglišču že ob izdelavi modela določiti, kateri teksel z višinske mape bo uporabljen za odmik te točke. Ravno zato ne moremo uporabljati nobenega filtriranja višinske mape. Bolj napredna metoda je podprta na Matroxovi Parhelii in omogoča tudi filtriranje višinske mape ter hkrati omogoča še uporabo adaptivne teselacije, kar pomeni, da grafična kartica generira samo toliko dodatnih trikotnikov, kot jih je potrebno glede na globino objekta. Obe metodi se zanašata na n-zlepke (n-patche), nam znane iz ATIjevega TruForma, ki generirajo dodatne trikotnike, ki jih potem z displacement mappingom odmaknemo za vrednost iz višinske mape v smeri normale.

Klasičen demo iz SDKja sedaj poleg enivronment bump mappinga omogoča tudi displacement mapping

Najnaprednejša od vseh treh metod pa je metoda z uporabo vertex shaderjev 3.0. Na ta način ni mogoče doseči samo displacement mappinga, ampak še precej drugih stvari, saj imajo vertex shaderji 3.0 neposreden dostop do štirih različnih tekstur, s katerimi lahko programerji počnejo karkoli hočejo. Pri tej metodi pa mora aplikacija sama zagotoviti dovolj gosto mrežo trikotnikov (bodisi s strojno teselacijo, bodisi s programskim dodajanjem trikotnikov). Displacement mapping je s stališča programiranja zelo podoben environment bump mappingu (se še spomnite Matrox G200?). Pri environment bump mappingu gre predvsem za to, da je grafična kartica sposobna iz ene teksture prebrati teksel in barvo teksla uporabiti za odmik koordinat pri branju naslednjega teksla. Na ta način je možno narediti še marsikaj drugega kot le enivronment bump mapping. Enako velja danes za displacement mapping, kjer gre v osnovi za to, da je enota grafičnega čipa za osenčevanje oglišč sposobna vzorčiti teksture.


Novosti za profesionalno rabo

Da pa DirectX ni namenjen samo za igričarje, dokazuje predvsem DirectShow, ki se sicer v DirectX 8.x ni kaj bistveno spremenil, in nekatere funkcije v Direct3Dju. DirectX tako sedaj končno zna risati tudi mehke črte in podpira scissor test (pravokotnik, zunaj katerega se ne renderira), tako da se programerjem za doseganje teh učinkov ni več potrebno zatekati k raznim trikom. Večjih novosti pa je bil deležen DirectShow, ki ga je Microsoft marketinško poimenoval kar Microsoft TV Technologies in nakazuje Microsoftovo željo, da bi se DirectX začel uporabljati tudi na televizijkem področju. Ena izmed najpomembnejših novosti je tako nov Video Mixing Renderer (VMR), ki omogoča odkodiranje videa (bodisi iz datotek, DVDja ali neposredno iz digitalne kamere) neposredno na teskture Direct3D, kar omogoča, da grafične kartice prevzamejo precejšnje breme raznoraznih televizijskih efektov (zamenjava enobarvnih ozadij za osebami s 3D animacijo ali kakšnim drugim videom).

Nov Video Mixing Renderer (VMR) omogoča izrisovanje videa neposredno na Direct3D teksture.

Posledica tega je, da lahko že povsem normalen osebni računalnik z niti ne tako močno grafično kartico opravlja studijske naloge. Obenem pa večino dela še vedno prevzema grafična kartica in ne obremenjuje centralnega procesorja.

Izrisovanje prosojnega teksta neposredno na video s pomočjo grafične kartice.

Kljub temu, da je ravno DirectShow ena izmed stvari, v kateri je ostalo še veliko nedokončanega (torej bomo lahko o tem zopet pisali, ko bo predstavljen DirectX 10) pa gre nedvomno za zanimivo tehnologijo, za katero se že ogrevajo tako TV hiše kot tudi razvijalci programske opreme.

Premiki med dvema različnima videoma na kakršenkoli način je sedaj možno izvajati s pomočjo grafičnih kartic.


Zaključek

Tako, pa smo se prebili čez večino novosti, ki jih ponuja DirectX 9.0. Kljub temu, da je kar nekaj novosti nove knjižnice že nekaj časa podprtih v strojni opremi (Radeon 9700) in da so pred vrati grafične kartice, ki podpirajo še več novih funkcij (GeForce FX), pa bomo morali še nekaj časa počakati, da bo na voljo tudi programska oprema (igre), ki bodo uporabljale novo knjižnico. Kljub temu pa je potreno vedeti, da bodo igre začele izkoriščati bombončke novih grafičnih kartic bistveno prej kot jih bodo začele zahtevati, ter da je prehod iz DirectX 8.1 na DirectX 9.0 precej enostavnejši, kot je bil prehod iz DirectX 7.0 na DirectX 8.0. Če bi DirectX 8.0 igre hotele zares izkoristiti programabilnost grafičnih kartic, ki jih je omogočil DirectX 8.0, in ob tem še vseeno normalno delovati tudi na grafičnih karticah brez pixel shaderjev in vertex shaderjev, bi to pomenilo, da bi morale igre pisane za dva precej različna koncepta (kar poleg komplikacij v pogonih pomeni tudi bistveno večjo količino tekstur na CDjih). Če pa sedaj hočeš izkoristiti nekaj, kar ti ponujajo novi pixel shaderji 2.0, pa pač samo napišeš še en shader in ga uporabiš takrat ko ga je grafična kartica sposobna izvajati.

You can't bend the spoon, it's impossible. You must realise the truth. What truth? That the spoon will be bent later on an SGI workstation.

DirectX 11

DirectX 11

Dve leti že mineva od Microsoftove razgrnitve novega operacijskega sistema Windows Vista, skupaj s katerim je luč sveta ugledala tudi zadnja različica multimedijskih knjižnic DirectX 10. Po rutinskih posodobitvah vsake dva-tri mesece, ki so večinoma posodabljale zgolj HLSL prevajalnik za shaderje, pa ...

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 »

Novosti DirectXa 9 - 1. del

Novosti DirectXa 9 - 1. del

No pa smo vendarle dočakali novo, dolgo pričakovano, različico knjižnice DirectX, ki jo je zlobni Microsoft, bolj ali manj skrbno skrival pred radovednimi očmi javnosti. V približno enaki tajnosti sta nastala tudi ta dva članka, ki vam bosta, vsaj upam tako, uspela ...

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 »

ATI Radeon 9700 - Nov kralj v grafični deželi

ATI Radeon 9700 - Nov kralj v grafični deželi

Če ne živite ravno v kakšnem zakotnem pragozdu ter lahko berete ta članek, potem ste gotovo že slišali, da je ATi izdal nov grafični čip R300, ki so ga poimenovali Radeon 9700. Kot verjetno že veste, novi Radeon s precejšjno lahkoto pomete z vso konkurenco ...

Preberi cel članek »