» »

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 je Microsoft v novembersko izdajo DirectX SDK vklju─Źil tudi beta oziroma "tech preview" razli─Źico prihajajo─Źega DirectX 11.

Torej, kaj je novega?

Za─Źnimo z o─Źitnim... DirectX 10 je povsem prekinil kompatibilnost za nazaj. Samo povsem DirectX 10 GPU-ji lahko uporabljajo DirectX 10 knji┼żnico. Prej┼ínje verzije DirectX so vsebovale mehanizem, preko katerega so grafi─Źne kartice lahko sporo─Źale svojo funkcionalnost aplikacijam, ki je bil zarad svoje zapletenosti umaknjen iz DirectX 10. Poleg tega je bila umaknjena vsa stara funkcionalnost, ki je bila ┼że na DX8 in DX9 grafi─Źnih karticah implementirana preko shaderjev s strani grafi─Źnega gonilnika. Torej iz knji┼żnice so se poslovile vse funkcije, ki so bile ┼że v DirectX 7 in preko katerih se je konfigural cevovod na starih GPU-jih.

Kombinatorična eksplozija, vertikala različne funkcije in omejitve, horizontala različne grafične kartice

Kombinatorična eksplozija, vertikala različne funkcije in omejitve, horizontala različne grafične kartice

DirectX 11, tako kot ┼że DirectX 10, zaradi prenovljenega modela gonilnikov v Visti ne bo na razpolago na Windows XP. Bo pa za razliko od predhodnje verzije podpiral starej┼ío strojno opremo vse do osnovnih razli─Źic DirectX 9 GPU-jev. DirectX 11 uvaja razli─Źne nivoje funkcionalnosti (ang. feature level), ki zajemajo cele sklope razli─Źnih funkcij oziroma omejitev DirectX 9 GPU-jev. Nivojev je trenutno 6:

  1. 9.1 - zajema vse osnovne DirectX 9 grafi─Źne kartice npr. GeForce FX in nekatere S3 kartice
  2. 9.2 - vsebuje funkcionalnost na nivoju Radeon 9800, Radeon X800 GPU-jev
  3. 9.3 - zadnja generacija DirectX 9.0 GPU-jev s podporo t.i. shader model 3.0, kot so GeForce 6800 in kasnejše ter Radeon X1800
  4. 10 in 10.1 - ki zajemata dana┼ínje DirectX 10 grafi─Źne kartice
  5. 11 - kompletna funkcionalnost nove razli─Źice DirectX
Namesto vseh mogočih kombinacij imamo vso funkcionalnost združeno v 3 nivoje

Namesto vseh mogočih kombinacij imamo vso funkcionalnost združeno v 3 nivoje

Vsak naslednji nivo striktno vsebuje vse prej┼ínje. Zakaj se to vpeljuje ┼íele sedaj? Ob prihodu DirectX 10 in tudi ┼íe danes morajo programerji tako ali tako ┼íe vedno podpirati DirectX 9 API zaradi kompatibilnosti z Windows XP in to, da bi lahko v Visti do DX9 GPU-jev dostopali tudi preko DX10, ne bi spremenilo ni─Źesar. Ta poteza je dejansko usmerjena v ─Źas, ko bodo programerji za─Źeli opu┼í─Źati podporo za Windows XP. Seveda brez ustrezne podpore s strani gonilnikov ne bo ┼ílo. In ker je nov model gonilnikov mo─Źno optimiziran za DirectX 10/11 nivo GPU-jev bodo nekatere stvari na DirectX 9 grafi─Źnih tekle po─Źasneje, kot ─Źe bi bila uporabljena starej┼ía DirectX 9 knji┼żnica.

WARP 10 engage!

Ne, ne ni─Ź ne bo z zvezdnimi stezami! WARP 10 je kratica za Windows Advanced Rasterizer Platform 10. Gre za hitro in optimizirano softwaresko implementacijo celotne DirectX 10.1 knji┼żnice, ki te─Źe na centralnem procesorju. "Celotne" pomeni, da podpira tudi do 8x meh─Źanje robov (antialiasing) in anisotropno filtriranje tekstur (anisotropic filtering). "Hitro in optimizirano" pa pomeni, da je ta softwareska implementacija dovolj hitra za uporabo v interaktivnih okoljih.

Kljub temu, naj se vam ne mudi preve─Ź z metanjem va┼íih grafi─Źnih kartic skozi okno! WARP 10 je sicer res za faktor 1000 hitrej┼íi od obstoje─Źe neoptimizirane razli─Źice "reference rasterizer"-ja, vendar je ┼íe vedno bistveno po─Źasnej┼íi od najcenej┼íih DirectX 10 grafi─Źnih kartic. Pri Microsoftu so testirali WARP 10 v igri Crysis, kjer je na najni┼żjih nastavitvah in pri lo─Źljivosti 800x600 dosegel povpre─Źno 7.36 FPS na procesorju Core i7 pri 3GHz. 2.6GHz Core 2 Duo je zmogel povpre─Źno le 2.83 FPS. GeForce 8400 GS in Radeon 2400 PRO sta oba dosegla povpre─Źje okrog 30 FPS.

Za igre WARP 10 torej ne bo uporaben in dejansko, ─Źe ga bodo igre hotele uporabljati, bodo morale zanj eksplicitno zaprositi. Tudi v primeru da v sistemu ne bo DX 10 grafi─Źne kartice. Ker pa bo Microsoftov prihajajo─Źi operacijski sistem Windows 7 za grafi─Źni vmesnik uporabljal DirectX 10, vam je verjetno jasno kaj je glavni namen WARP 10.

Compute!

Hitro pove─Źevanje ra─Źunskih zmogljivosti GPU-jev in predvsem njihove vse ve─Źje programabilnosti nas je privedlo do tega, da se z grafi─Źnimi procesorji danes spogleduje vse ve─Ź ra─Źunsko zahtevnih aplikacij. Fizikalni izra─Źuni v igrah (PhysX), kompresija tekstur (NVIDIA Texture Tools 2), raziskave na podro─Źju proteinov (Folding@home),... danes izkori┼í─Źajo ra─Źunsko mo─Ź GPU-jev. General Purpose GPU (GPGPU) ima seveda svoj set problemov. Da vam ilustriram: ─îe postavite neki skupini ljudi, recimo tehni─Źno dobro podkovanih programerjev, nalogo se┼íteti dve tabeli nekih ┼ítevil, koliko jih bo pri┼ílo na dan z "┼Że vem! Spakirajmo obe tabeli v dve teksturi, potem pa izri┼íemo dva trikotnika, ki bosta zajela celotni teksturi in naredimo se┼ítevanje v pixel shaderju!" Nih─Źe ne razmi┼ílja tako! Vender, ko se je GPGPU za─Źel razvijat je bilo potrebno razmi┼íljat to─Źno tako: programiralo se je splo┼íne probleme, ─Źez knji┼żnico namenjeno grafiki (Direct3D ali OpenGL). Da se je kaj izra─Źunalo, je bilo potrebno ─Źez pipeline pognati nekaj trikotnikov.

Compute funkcionalnost je zunaj klasičnega cevovoda

Compute funkcionalnost je zunaj klasičnega cevovoda

To se je seveda zelo hitro popravilo, ko je je NVIDIA pri┼íla na dan z Compute Unified Driver Architecture (CUDA) in ATI z Compute Abstraction Layer (CAL). Zaradi splo┼íne uporabnosti pa je Microsoft tudi v DirectX 11 vklju─Źil t.i. compute shaderje, ki so semanti─Źno zunaj grafi─Źnega cevovoda. To ima dve veliki prednosti pred CUDA in CAL. Prva je o─Źitna: en jezik in en API (DX 11) na vseh grafi─Źnih karticah (ATI, NVIDIA, Intel,..). Druga pa se skriva v tem, da ko postanejo compute shaderji del DirectX-a dobijo tudi direkten dostop do vseh sredstev, s katerimi DX upravlja. Tak┼íne in druga─Źne teksture, geometrija,... vse je dostopno brez dodatnega kopiranja po grafi─Źni kartici.

Kaj to prinese v igri─Źarsko prakso? Mo┼żnost implementacije fizike na grafi─Źnih karticah tako na NV kot ATI GPU-jih z eno samo fizikalno knji┼żnico. Precej se bo poenostavilo tudi post processing filtre, kjer je potrebno za vsak pixel na zaslonu izvesti neko procesiranje. Lep primer so tudi HDR u─Źinki, za katere je obi─Źajno potrebno zreducirati sliko v lo─Źljivosti ekrana (naprimer 1920x1200) v eno samo to─Źko, da ugotovimo kak┼ína je trenutna osvetlitev slike. To se danes izra─Źunava s postopnim zmanj┼íevanjem lo─Źljivosti, kar nas stane nekaj pomnilnika in preklapljanje med razli─Źnimi render targeti (teksture v katere renderiramo). Enostavneje bo tudi programirati razne u─Źinke z delci (particle systems) npr. dim, megla, teko─Źine,... Obenem pa to omogo─Źa tudi bolj eksoti─Źne pristope kot so renderiranje s pomo─Źjo sledenja ┼żarku (ray tracing), voxel rendering,...

Compute shaderji (4.0 in 4.1) bodo dostopni na vsaj nekaterih DirectX 10 grafi─Źnih karticah z ustreznimi DX11 gonilniki. DirectX 11 GPU-ji bodo seveda podpirali ┼íe nekoliko ve─Ź (5.0 compute shaderji).

Teselacija

Krivulje in ukrivljene ploskve so vro─Ź kostanj med grafi─Źnimi karticami ┼że leta in prakti─Źno vsaka generacija GPU-jev je imela svoje poskuse v to smer. GeForce 3 je svoj ─Źas podpiral RT zlepke, konkuren─Źni Radeon pa N zlepke oziroma marketin┼íko imenovano TruForm. Nobena od obeh metod se ni prijela in strojna podpora je bila umaknjena po hitrem postopku. Naslednji poskus je sledil s strani kanadskega ATI, ki je v Xenos ─Źipu (GPU na XBox 360) implementiral teselator pred vertex shaderjem in ker je bila ta funkcionalnost poceni s stali┼í─Źa tranzistorjev so jo vklju─Źili v svoje DirectX 10/10.1 grafi─Źne kartice. Ponovno pa je funkcionalnost na PC-jih ostala neuporabljena in niti ni del DirectX standarda. DirectX 10 je sicer prinesel geometry shaderje s katerimi je mo┼żno nekoliko potipati v to smer, niso pa niti pribli┼żno namenjeni temu opravilu.

Teselacija nam omogoča, da prestavimo triangulacijo ploskev iz namenskih orodij (Maya, Lightwave,...) na GPU

Teselacija nam omogoča, da prestavimo triangulacijo ploskev iz namenskih orodij (Maya, Lightwave,...) na GPU

DirectX 11 prina┼ía tri nove stopnje v grafi─Źni cevovod, ki so namenjene to─Źno za generiranje trikotnikov iz kupa kontrolnih to─Źk. Najprej bo na potezi hull shader, ki bo pripravil kontrolne to─Źke in dolo─Źil koliko trikotnikov naj se generira. Teselator je nova fiksna enota, ki bo iz kontrolnih to─Źk generirala trikotnike. Sledil pa bo ┼íe domain shader, ki bo generirane trikotnike lahko ┼íe dodatno obdeloval. Recimo displacement mapping ali pa ┼íe kaj bolj inovativnega. Omeniti je potrebno, da vhodni podatki za te tri stopnje niso nujno trikotniki ampak kontrolne to─Źke zlepkov. In ker imajo modelerji obi─Źajno opravka z zlepki lahko prestavimo pretvorbo v trikotnike iz orodij kot so Maya in 3DStudio MAX neposredno na GPU. Ob tem pa se izognemo ┼íe generiranju ve─Źih razli─Źic istega modela z razli─Źnim ┼ítevilom trikotnikov (t.i. LOD oziroma Level Of Detail), saj bo GPU lahko sam generiral optimalno ┼ítevilo trikotnikov glede na oddaljenost modela.

Tri nove stopnje za delo z zlepki

Tri nove stopnje za delo z zlepki

Odprejo pa se ┼íe druge mo┼żnosti. Animacije karakterjev se lahko poenostavijo, saj se animirajo le kontrolne to─Źke zlepka in ne nekaj 1000 trikotnikov. Ker trikotnike generira GPU lahko tudi zelo natan─Źno kontroliramo koliko trikotnikov bomo sploh generirali. ─îe imamo na ekranu v nekem trenutku 300 ljudi, bomo za vsakega generirali recimo 100 trikotnikov, ─Źe imamo pa na ekranu samo en lik pa si jih bomo privo┼í─Źili npr. 30000. Ob vseh teh prednostih pa lahko ┼íe prihranimo kar znatno koli─Źino pomnilnika na grafi─Źni kartici (in seveda samega bandwidtha ob renderiranju) saj zlepki zasedejo bistveno manj prostora, kot ┼że triangulirani modeli.

Multi-threading

Vedno ve─Ź uporabnikov se odlo─Źa za ve─Źjedrne procesorje, kar ima za posledico potrebo po ve─Źnitnem programiranju (multi-threading) iger. Po┼íiljanje ukazov iz ve─Źih niti, ki te─Źejo na ve─Źih jedrih, sicer deluje ┼że v dosedanjih razli─Źicah DirectX knji┼żnice. Vendar se prakti─Źno vsak posamezen ukaz znotraj Direct3D sinhronizira in u─Źinek ni kaj prida. Aplikacije oziroma igre, ki razbijejo delo tako da ena nit obdeluje fiziko, druga umetno inteligenco in recimo tretja grafiko so povsem vredu, dokler recimo grafika ne za─Źne blokirat celotnega procesorja.

Grafika lahko komunicira samo v eni niti, ki lahko hitro postane osko grlo

Grafika lahko komunicira samo v eni niti, ki lahko hitro postane osko grlo

DirectX 11 pa po drugi starni omogo─Źa, da vsaka nit sestavi svojo listo ukazov za grafi─Źno kartico. Vse skupaj ┼íe vedno mora biti sinhronizirano, vendar je postopek bistveno enostavnej┼íi, saj lahko DirectX samo zlepi liste ukazov iz ve─Źih niti skupaj. Namesto sinhronizacije za vsak ukaz posebej imamo tako sinhronizacijo samo za vsake 100 ali 1000 ukazov, kar pomeni bistveno manj medsebojnega ─Źakanja med jedri centralnega procesorja.

To mo┼żnost bo mogo─Źe uporabljati na vseh grafi─Źnih karticah, za katere bodo napisani DirectX 11 gonilniki in bo upajmo izbolj┼íala izkoristek ve─Źjedernih procesorjev.

Kaj je še novega?

Poleg vsega ┼że omenjenih novosti DirectX 11 dodaja ┼íe dva nova kompresirana formata tekstur, k ┼że obstoje─Źim petim. Prvi je namenjen teksturam v HDR formatih, drugi pa klasi─Źnim LDR formatom.

BC6 je namenjen HDR teksturam

BC6 je namenjen HDR teksturam

Obstoje─Źi kompresirani formati imajo kar nekaj problemov in razultati so vse preve─Ź kockasti. Nova formata omogo─Źata ve─Ź barvnih klju─Źev znotraj posameznega bloka, kar ob─Źutno zmanj┼ía napake v primerjavi z obstoje─Źimi formati. Na ┼żalost pa bo za ta dva formata potrebno imeti DirectX 11 GPU. Obenem pa se za kompresirane formate po novem zahteva do bita natan─Źno sledenje specifikacijam pri dekodiranju.

BC7 občutno zmanjša kockastost dosedanjih formatov (BC3 = DXTC3)

BC7 občutno zmanjša kockastost dosedanjih formatov (BC3 = DXTC3)

Glede tekstur je tukaj ┼íe nekaj dodatnih sprememb, kot je pove─Źanje najve─Źje dovoljene velikosti tekstur na 16384 x 16384 in zahteva za 8 bitno filtriranje. Za primerjavo najve─Źja dovoljena velikost tekstur v DirectX 10 je 8192 x 8192 in na zadnjih DirectX 9 GPU-jih 4096 x 4096. Skladno s tem se pove─Źa tudi omejitve velikosti posameznih sredstev, kot so teksture in geometrija na ve─Ź kot 4GB.

Precej┼ínje spremembe so tudi na nivoju programiranja shaderjev oziroma HLSL prevajalnika.Ker jasno ni vsa strojna oprema enako hitra, morajo programerji za razli─Źno hitre grafi─Źne kartice pisati razli─Źno kompleksne shaderje. Danes obstajata dve mo┼żnosti: Ali programerji napi┼íejo vsak posamezen shader v celoti (kar postane problem za vzdr┼żevanje), ali pa napi┼íejo en sam "uber" shader, ki izklaplja posamezne u─Źinke ali zni┼żuje njihovo kvaliteto (kar postane problem za optimizacijo, ker mora GPU vedno alocirati registre za najslab┼íi mo┼żni primer). DX 11 dodaja nekaj bolj objektnih mo┼żnosti, ki zdru┼żujejo prednosti obeh pristopov.

Potem pa je tukaj ┼íe zajeten kup─Źek manj┼íih sprememb in dodatkov. Shaderji lahko uporabljajo dvojno natan─Źnost, kar bo pri┼ílo do izraza predvsem za compute funkcionalnost. Pixel shaderji, ki bodo spreminjali globino pixla, bodo lahko sporo─Źili mejo za koliko bodo vrednost spremenili, tako da spremembe globine ne bo ve─Ź nujno pomenile izklopa lepega dela Fast Z-Cull/HyperZ optimizacij na grafi─Źnih karticah. Nova je tudi podpora za t.i. neurejene poglede, pri katerih nas ne zanima vrstni red elementov in jih zato lahko GPU obdeluje kakor se mu zljubi. Torej, ─Źe nas ne zanima ali bo pixel kon─Źal v desnem zgornjem ali v levem spodnjem kotu zaslona, samo da se bo nekje izrisal, potem bomo lahko uporabili neurejen pogled na neko teksturo in pixli bodo padali nanjo tako kot padajo iz cevovoda.

Za konec

Trenutno na trgu ┼íe ni iger, ki bi zahtevale DirectX 10 za svoje delovanje, niti ni iger, ki bi dodobra izkoristile vse kar DirectX 10 ponuja. Vseeno pa DirectX 11, predvsem s podporo obstoje─Źe strojne opreme, daje slutiti, da se bo prijel precej hitreje kot njegov predhodnik. Po┼żivitev DX10 GPU-jev s compute shaderji pa je pravtako dobrodo┼íla in glede na precej dolg ─Źas razvoja novih iger, lahko razvijalci melce bolj oddaljenih iger mirno preklopijo na nov API.

Čudežno popotovanje skozi grafični cevovod

Č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, ...

Preberi cel članek »

Č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 »

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 »

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 »

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 »