FrazPC.pl - Programy - Pogoda - Gry - Hosting


Aktualno¶ci Programy Artyku³y GSM RTV Board
Intel Pineview | HTC HD2 | Westmere | Profil | Loguj | Stats |


Artyku³y



17-07-2009


Czas 32 nanometrów

Biblioteki graficzne DirectX 10, DirectX 10.1 i DirectX 11

Od dziesi±tki do jedenastki
 
O bibliotekach graficzny DirectX s³ysza³ chyba ka¿dy u¿ytkownik peceta, który choæby w najmniejszym stopniu interesuje siê komputerowymi grami. Bez DX-ów nie obejdzie siê dzi¶ nawet najmniejsza napisana pod Windows aplikacja multimedialna. Mo¿e nie wszyscy o tym wiedz±, ale s± one równie¿ niezbêdne do uruchomienia graficznej pow³oki systemu Windows Vista – interfejsu Aero. W specyfikacjach kart graficznych podkre¶la siê za¶ sprzêtow± zgodno¶æ z tak± czy inn± ich wersj±. Spróbujmy zatem odpowiedzieæ na pytanie, czym s± owe tajemnicze DirectX-y, za co odpowiadaj± one w systemie i co przynios³y ich nowe wersje DX10, DX10.1 oraz czego mo¿na siê bêdzie spodziewaæ po wersji 11?
 
Wraz z rozwojem kart graficznych rozwija³y siê równie¿ biblioteki DirectX. Ich pierwsza wersja pojawi³a siê ju¿ w 1995 roku wraz z debiutem Windows 95. Stanowi³y one wówczas du¿y prze³om u³atwiaj±cy programistom tworzenie aplikacji dzia³aj±cych w ten sam sposób na wszystkich dostêpnych wówczas modelach kart graficznych i to bez potrzeby korzystania ze specyficznego dla ró¿nych producentów akceleratorów 3D kodu.
 
Gdy Microsoft og³osi³ premierê systemu Windows Vista, do u¿ytkowników trafi³a kolejna, mocno zmodyfikowana wersja DX-ów – DirectX 10. W lutym zesz³ego roku gdy opublikowany zosta³ dodatek Service Pack 1 dla Visty, biblioteki DX zosta³y ponownie uaktualnione. Pierwszymi obs³uguj±cymi sprzêtowo kartami zgodnymi z DirectX 10.1 by³y akceleratory ATI z serii Radeon 3800 HD. Obecnie do grona producentów sprzêtu zgodnego z DX 10.1 do³±czy³a równie¿ Nvidia, która nieca³y miesi±c temu zaprezentowa³a nowe, 40-nanometrowe uk³ady graficzne dla komputerów przeno¶nych. Chodzi tu o ko¶ci GTS 260M, GTS 250M, GT 240M, GT 230M oraz G210M. Tymczasem Microsoft koñczy prace nad kolejn± wersj± bibliotek DirectX. DX 11. Znajd± siê one w nowej ods³onie Windowsa – systemie Windows 7. Co wiêcej, zarówno programi¶ci, twórcy gier komputerowych, jak i producenci sprzêtu ju¿ od kilku miesiêcy mogli skorzystaæ z odpowiedniego pakietu deweloperskiego SDK, który Microsoft udostêpni³ na swoich stronach (http://www.microsoft.com/downloads/details.aspx?FamilyId=5493F76A-6D37-478D-BA17-28B1CCA4865A&displaylang=en).
 
DirectX – a có¿ to takiego
 
Na pocz±tku wyja¶nijmy czym s± w ogóle biblioteki graficzne. Obecnie powszechnie wykorzystywane s± dwa standardy takich graficznych bibliotek – wspomniany DirectX i OpenGL. Obydwie aplikacje to tak naprawdê (z punktu widzenia programisty) modu³y graficznego interfejsu programistycznego API (Application Programming Interface). Jak czê¶æ z Was z pewno¶ci± wie, w dowolnym API zawarte s± wszystkie procedury, funkcje i interfejsy pozwalaj±ce, korzystaj±cej z danego API aplikacji (np. grze lub programowi multimedialnemu), na sprawn± komunikacjê zarówno z systemem operacyjnym, ró¿nego rodzaju bibliotekami systemowymi, jak i sterownikami urz±dzeñ. Innymi s³owy w uproszczeniu, zarówno DirectX, jak i OpenGL po¶rednicz± w wymianie informacji pomiêdzy np. gr±, a sterownikami karty graficznej zainstalowanej w komputerze.


¬ród³o: GameProgramer.org

Nowym, niezale¿nym elementem w API DirectX 10 jest DirectX Graphics Infrastructure (na rysunku: DXGI), który po¶redniczy w wymianie danych miêdzy aplikacj±, a sterownikami. DXGI przej±³ na siebie czê¶æ funkcji realizowanych wcze¶niej przez modu³ Direct3D (na rysunku D3D).

Co wiêcej, DirectX i OpenGL unifikuj± jednocze¶nie przy tym mo¿liwy do wykorzystania zestaw poleceñ, rozkazów i instrukcji oraz wszelkie procedury zwi±zane ze wszystkimi aspektami tworzenia obrazu 3D. Ma³o tego, istnienie takich bibliotek jest bardzo wa¿ne z punktu widzenia programistów przede wszystkim z jednego wzglêdu. Mog± oni skorzystaæ bowiem wy³±cznie z poleceñ zawartych w API i nie musz± wówczas pisaæ kilku niekompatybilnych ze sob± wersji tej samej aplikacji na powiedzmy karty firm Nvidia, AMD/ATI lub uk³ady Intela. Po prostu, wystarczy, ¿e programista pos³u¿y siê poleceniami i formatami danych dopuszczonymi przez dany interfejs API, a wynik na ekranie bêdzie zawsze (przynajmniej w teorii, o czym za chwilê) ten sam, niezale¿nie od typu akceleratora 3D znajduj±cego siê w pececie.


OpenGL i DirectX dzia³aj± na tym samy poziomie i realizuj± zbli¿ony schemat generowania grafiki.
¬ród³o: OpenGL.org

W tym miejscu warto dodaæ, ¿e DirectX jest najpopularniejsz± bibliotek± graficzn± w¶ród twórców gier. Znacznie mniej firm stosuje konkurencyjnego, bazuj±cego na otwartych standardach OpenGL (pe³na nazwa to: Open Graphics Library). Najbardziej znana, pos³uguj±ca siê ni± „growa” firma to id Software, która stworzy³a m.in. legendarnego Quake’a i Dooma. OpenGL jest za¶ znacznie bardziej popularny w zastosowaniach profesjonalnych. Wiêkszo¶æ zaawansowanych aplikacji in¿ynierskich i naukowych, ze wzglêdu na otwarto¶æ standardu i jego obecno¶æ na ró¿nych platformach systemowych, korzysta z OpenGL-a.
 
Sterowniki
 
Jak mo¿na siê domy¶liæ, „po drugiej stronie” bibliotek graficznych takich jak DirectX czy OpenGL znajduje siê sterownik karty. Do zadañ driverów nale¿y przede wszystkim zamiana instrukcji i danych p³yn±cych z interfejsu API na informacje zrozumia³e bezpo¶rednio dla danego urz±dzenia. W wypadku kart graficznych, sterownik powinien zostaæ dostarczony przez producenta procesora graficznego. Wynika to z faktu, ¿e producenci najlepiej wiedz± jak poszczególne funkcje graficzne i dane przetwarzane s± w potoku graficznym, który realizowany jest bezpo¶rednio w GPU. Co wiêcej, ze wzglêdu na bardzo ostr± konkurencjê, nie udzielaj± oni tego typu informacji firmom trzecim. St±d praktycznie nie istniej± tworzone niezale¿nie od producenta sterowniki np. dla systemu Linux, lub s± one nie do koñca tak wydajne i funkcjonalne jak firmowe drivery.


Umiejscowienie sterowników i graficznych API w warstwowym modelu systemu operacyjnego.
¬ród³o: Wikipedia

Z drugiej strony nale¿y pamiêtaæ te¿ o tym, ¿e sterownik powinien mieæ mo¿liwie jak najmniej „do roboty”. Je¶li tylko co¶ siê da bezpo¶rednio lub z jak najmniejsz± ingerencj± driverów przenie¶æ z API do potoku graficznego realizowanego w procesorze graficznym, tym lepiej, poniewa¿ operacje graficzne bêd± przez kartê wykonywane wówczas najszybciej. Wynika to z faktu, ¿e nie trzeba w takim wypadku zbyt mocno anga¿owaæ do transformacji danych i instrukcji jednostki centralnej komputera. Z tego w³a¶nie powodu producenci uk³adów 3D staraj± siê, ¿eby ich ko¶ci by³y jak najbardziej sprzêtowo zgodne z bibliotekami graficznymi DirectX lub OpenGL. Co wiêcej, dobrze zaprojektowane sterowniki potrafi± znacz±co przyspieszyæ dzia³anie karty. Bywa, ¿e kolejna, lepiej zoptymalizowana wersja sterowników mo¿e byæ szybsza od poprzedniej wersji nawet o kilkana¶cie procent! ¬le napisany sterownik potrafi za¶ spowolniæ generowanie grafiki o 30–40%.


¬le pojêta optymalizacja sterowników pod wzglêdem ich wydajno¶ci prowadzi czasem do gubienia czê¶ci efektów 3D. U góry, s³ynna kilka lat temu sprawa, gdy firma ATI w sterownikach do Radeona 8500 wprowadzi³a „optymalizacjê” polegaj±c± na tym, ¿e w grze Quake III celowo zmniejszono dok³adno¶æ filtrowania tekstur po to, aby osi±gn±æ wy¿sz± wydajno¶æ liczon± w fps-ach. Rysunek na dole przedstawia prawid³owo wygenerowan± klatkê obrazu w grze Quake III.

Z powy¿szych powodów in¿ynierowie projektuj±cy uk³ady graficzne, niezale¿nie od tego jak bardzo ich firmy ze sob± konkuruj±, zawsze ¶ci¶le wspó³pracuj± z programistami tworz±cymi taki czy inny API. Wspó³praca ma miejsce zarówno przy tworzeniu OpenGL-a, jak i DirectX-a. Co wiêcej, wspólne, miêdzyfirmowe zespo³y in¿ynierów z Nvidii, AMD/ATI i Intela oraz programistów z Microsoftu i firm tworz±cych gry decyduj± równie¿ o tym, jak bêdzie wygl±da³a kolejna wersja bibliotek DirectX i czy nale¿y wprowadziæ ju¿ do niej nowe efekty graficzne, nowe elementy potoku graficznego, kolejne shadery, rejestry, sposoby kompresji tekstur, algorytmy o¶wietlenia itp. Ma³o tego, w takim gronie zapadaj± te¿ decyzje o tym jak powinny byæ realizowane i z jak± dok³adno¶ci± poszczególne efekty. Oczywi¶cie nikt nie narzuca producentowi uk³adu graficznego drogi realizacji danego efektu. Dlatego na przyk³ad efekty o¶wietlenia sceny mog± byæ realizowane zarówno przez jednostkê T&L (Transform and Lighting), tak jak to mia³o miejsce w starszych kartach, b±d¼ przez Vertex i Piksel Shadery, b±d¼ zunifikowane shadery. Programista pisz±cy grê wydaje komendê zgodn± z API, sterowniki przekszta³caj± j± na ci±g instrukcji odpowiednich dla danej karty, a na wyj¶ciu otrzymujemy za³o¿ony efekt – np. transformacjê piksela.
 
Okre¶lenie dok³adno¶ci realizacji poszczególnych algorytmów wykorzystywanych w API do tworzenia sceny 3D jest istotne przede wszystkim z jednego powodu. Otó¿, jak ju¿ wspomnia³em, szczegó³owa droga do tego, aby na ekranie uzyskaæ odpowiedni efekt graficzny, zale¿y tylko i wy³±cznie od funkcji zaimplementowanych w strukturze danego GPU. Programista w ogóle nie musi wiedzieæ jak realizowana jest w strukturze GPU dana instrukcja i czy dane przetwarzaj± np. modu³y T&L czy jednostki zunifikowane – on programuje element zgodny z API na przyk³ad zaimplementowany w API vertex shader o ¶ci¶le okre¶lonej li¶cie rozkazów i rejestrów, mimo, ¿e karta takowych w ogóle nie musi fizycznie mieæ. To w³a¶nie okre¶lenie dok³adno¶ci realizacji poszczególnych efektów 3D sprawia, ¿e mimo unifikacji wprowadzonej przez DirectX czy OpenGL, obraz wygenerowany przez ró¿ne modele procesorów graficznych, nawet pochodz±cych od tego samego producenta, mo¿e wygl±daæ zawsze nieco inaczej. Ró¿nice te nie s± zwykle du¿e (trudno je czasem wrêcz zauwa¿yæ), ale zawsze musz± mie¶ciæ siê w za³o¿onych przez standard granicach. Oczywi¶cie, projektanci uk³adów graficznych wiedz±c jak ma wygl±daæ dany efekt, d±¿± te¿ do tego, aby to co zobaczymy na ekranie, jak najbardziej zbli¿one by³o do za³o¿onego w specyfikacji wzorca.
 
Co ciekawe, niewiele osób o tym wie, ale czê¶æ funkcji obs³ugiwanych przez biblioteki mo¿e w ogóle nie zostaæ zaimplementowana w danej ko¶ci graficznej. Okazuje siê bowiem, ¿e do osi±gniêcia zgodno¶ci z dan± wersj± bibliotek graficznych wystarczy to, ¿e karta wykonuje przewidziane w specyfikacji podstawowe instrukcje i obs³uguje najwa¿niejsze formaty danych. W takim wypadku, bardziej zaawansowane instrukcje mog± byæ albo pomijane, albo realizowane za po¶rednictwem emulacji efektu w sterownikach, b±d¼ te¿, co ma miejsce najczê¶ciej, zastêpowane s± innymi operacjami, z którymi radzi ju¿ sobie sprzêtowo dany model GPU. Nie trzeba chyba dodawaæ, ¿e w takim wypadku koñcowy obraz nie zawsze wygl±da ju¿ tak dobrze, jak za³o¿yli sobie twórcy gier. Co wiêcej, emulacja efektu w sterownikach trwa zwykle znacznie d³u¿ej ni¿ w wypadku jej sprzêtowej implementacji.


Mimo, ¿e formalnie dana karta graficzna jest zgodna z konkretn± wersj± bibliotek DirectX, to nie musi ona wspieraæ wszystkich efektów. Wówczas wy¶wietlany obraz odbiega od tego, generowanego przez kartê z pe³nym wsparciem dla tej wersji DX-a. Widaæ to wyra¼nie na poni¿szym przyk³adzie. U góry FarCry (DirectX 9.0c) na wbudowanym w chipset Intel 915G module graficznym GMA 900, który teoretycznie jest zgodny z DX 9.0c, ale nie ma dla tych bibliotek pe³nego wsparcia sprzêtowego oraz (u do³u) ta sama scena wy¶wietlana na Radeonie 9800.

Od DX 1.0 do DX 10
 
Jak ju¿ wspomnia³em wcze¶niej, pierwsza wersja bibliotek graficznych DirectX zadebiutowa³a w sierpniu 1995 roku wraz z premier± systemu Windows 95. Najwa¿niejsz±, rewolucyjn±, jak na owe czasy w³a¶ciwo¶ci± DX-ów by³o to, ¿e porz±dkowa³y one sposób wy¶wietlania grafiki w ówczesnych aplikacjach 2D/3D i umo¿liwi³y pisanie gier dla systemu Windows zastêpuj±c przy okazji znany z Windows 3.11 stosunkowo prosty graficzny interfejs 2D o nazwie WinG. Z dzisiejszej perspektywy wydaje siê to dziwne, ale trzeba pamiêtaæ, ¿e ówczesne gry komputerowe korzysta³y z DOS-u i w³asnych, pisanych oddzielnie dla kart ró¿nych producentów, procedur obs³ugi i generowania grafiki 3D.
 
Prze³omem w generowaniu grafiki 3D okaza³y siê jednak biblioteki DirectX 6.1 i 7.0, które pojawi³y siê odpowiednio w lutym i we wrze¶niu 1999 roku. Wprowadzono w nich po raz pierwszy elementy klasycznego ju¿ dzisiaj modelu generowania grafiki, polegaj±cego na obs³udze potoków renderuj±cych (DX 6.1) i sprzêtowego wspomagania operacji geometrycznych i kalkulacji o¶wietlenia T&L (Transform and Lighting) – DX 7.0. Od tego czasu mo¿emy tak naprawdê mówiæ o akceleratorach 3D, w takim znaczeniu jak rozumiemy to obecnie. Karty graficzne przejê³y wówczas od CPU czê¶æ, ale nie wszystkie, g³ównych elementów procesu generowania trójwymiarowej grafiki – wcze¶niej odpowiada³y jedynie za akcelerowanie grafiki 2D, a przy tworzeniu grafiki 3D pe³ni³y jedynie funkcje bufora ramki.
 
Warto w tym miejscu przypomnieæ równie¿, ¿e pierwsz± zgodn± z DirectX 7.0, kart± graficzn± obs³uguj±c± sprzêtowo T&L by³ GeForce 256 (nazwa GeForce to akronim od angielskich s³ów Geometry Force). Wówczas to Nvidia wymy¶li³a te¿ termin GPU (Graphics Processing Unit), analogiczny do skrótowca okre¶laj±cego procesor, CPU (Central Processing Unit). Nazwa GPU mia³a wówczas sugerowaæ u¿ytkownikom pecetów i komputerowym graczom, ¿e uk³ady graficzne s± jednostkami samodzielnie przetwarzaj±cymi wiêkszo¶æ operacji w strumieniu graficznym, co jak siê okaza³o po latach nie by³o wcale dalekie od prawdy, choæ z dzisiejszego punktu widzenia u¿ywanie zadomowionego ju¿ na dobre terminu GPU w stosunku do GeForce’a 256 by³o co nieco naci±gane.


Nvidia GeForce 256 to pierwsza karta z wbudowanym modu³em T&L i pierwszy akcelerator zgodny z DirectX 7.0.
¬ród³o: Asus

W 2000 roku pojawi³a siê kolejna wersja bibliotek DirectX – DirectX 8.0. Wprowadzi³a ona do kart graficznych model przetwarzania grafiki bazuj±cy na cieniowaniu i programowalnych jednostkach Vertex i Pixel Shader. Co ciekawe, DX 8.0 powsta³a przede wszystkim ze wzglêdu na potrzeby pierwszej wersji konsoli do gier Microsoft Xbox. Jednostki Vertex i Pixel Shader mog± w dowolny, wymy¶lony przez programistê sposób modyfikowaæ szkielet sceny, zmieniaæ nak³adane na poszczególne obiekty tekstury, czy przekszta³caæ pojedyncze piksele. Wszystko to odbywa siê ju¿ w trakcie przetwarzania tych elementów w potoku graficznym. Co wiêcej, obiekty te mog± byæ te¿ zmieniane na gotowej scenie 3D. Aby zmodyfikowaæ przetwarzane obiekty programista musi siê tylko pos³u¿yæ krótkimi programami shaderowymi. Za pomoc± tych ma³ych programików (proces programowania shaderowego przypomina proces programowania w jêzyku C) twórca gry mo¿e stworzyæ w³asne, nieosi±galne w inny sposób efekty graficzne – wszystko jest ograniczone tylko umiejêtno¶ciami i fantazj± programisty. Oczywi¶cie, nic nie stoi na przeszkodzie aby ca³y czas korzystaæ z zaszytych w DirectX standardowych funkcji. S± one dostêpne równie¿ w najnowszych bibliotekach DirectX 11 – kolejne wersje bibliotek s± zawsze pod wzglêdem programistycznym, ale niekoniecznie sprzêtowym, kompatybilne wstecz ze starszymi graficznymi API.

Wracaj±c na chwilê do terminu GPU, to tak naprawdê dopiero od chwili pojawienia siê bibliotek DirectX 8.0 i zgodnych z nimi sprzêtowo kart graficznych mo¿na mówiæ o przejêciu wszystkich istotnych funkcji strumienia graficznego przez uk³ad graficzny. Dlatego te¿ z czystym sumieniem mianem graficznego procesora GPU mo¿na nazywaæ tylko te uk³ady, które s± zgodne z t± lub wy¿sz± wersj± graficznego API Microsoftu.

Sukcesywnie pojawiaj±ce siê na rynku nowe wersje bibliotek graficznych DirectX, a wiêc 8.1, 9.0, 9.0a, 9.0b i 9.0c oraz zgodnych z nimi kart, wprowadza³y kolejne ulepszenia i modyfikacje do architektury cieniowania. Pojawia³y siê, co oczywiste, te¿ implementacje nowych funkcji 3D, rozszerzenia rejestrów, rozszerzenia jêzyka shaderowego (np. zwiêkszenie liczby argumentów, pojawienie siê skoków warunkowych, pêtli itp.) – wszystko to po to, aby u³atwiæ programistom tworzenie gier 3D i pozwoliæ na coraz to wiêksze urealistycznienie generowanej przez karty trójwymiarowej grafiki. Nie bêdê tych zmian omawia³ szczegó³owo, gdy¿ artyku³ musia³by siê bardzo mocno rozrosn±æ. Z niektórymi z nich mo¿ecie zapoznaæ siê zerkaj±c do poni¿szej tabelki. Jednak na nastêpn± du¿± zmianê przysz³o nam czekaæ do 30 listopada 2006 roku. Wtedy to oficjalnie zaprezentowano biblioteki DirectX 10, które znalaz³y siê w systemie Microsoft Windows Vista.


Ró¿nice miêdzy API DirectX 9.0c wykorzystywanym w Windows XP (u góry), a API DirectX 10 z Windows Vista (u do³u).
¬ród³o: Microsoft

Tabela 1: Ewolucja modeli cieniowania w bibliotekach DirectX - ¼ród³o: Nvidia

 

DirectX 8.1 (Shader Model 1.1)

DirectX 9.0 (Shader Model 2.0)

DirectX 9.0c (Shader Model 3.0)

DirectX 10 (Shader Model 4.0)

Instrukcje werteksowe

128

256

512

64 000

Instrukcje pikselowe

4+8

32+64

512

Sta³e rejestry werteksowe

96

256

256

16×4096

Sta³e rejestry pikselowe

8

32

224

Tymczasowe rejestry werteksowe

16

16

16

4096

Tymczasowe rejestry pikselowe

2

12

32

Werteksowe dane wej¶ciowe

16

16

16

16

Pikselowe dane wej¶ciowe

4+2

8+2

10

32

Liczba jednocze¶nie renderowanych obiektów

1

4

4

8

Liczba jednocze¶nie pobieranych tekstur przez modu³ Vertex Shader (uwaga: tekstury s± pobierane z pamiêci przez modu³ Vertex)

niedostêpne

niedostêpne

4

128

Liczba jednocze¶nie przetwarzanych tekstur przez modu³ Pixel Shader

8

16

16

Rozmiar tekstur 2D

2000×2000 pikseli

8000×8000 pikseli

Operacje wewnêtrzne

tak

Pêtle wewnêtrzne

tak

Obliczanie pochodnych

tak

tak

Kontrola przep³ywu operacji werteksowych

niedostêpna

statyczna

statyczna lub dynamiczna

dynamiczna

Kontrola przep³ywu operacji pikselowych

niedostêpna

niedostêpna

statyczna lub dynamiczna

dynamiczna

DirectX 10 – przepisane na nowo
 
Biblioteki DirectX w wersji 10, jak zapewne pamiêtacie zosta³y napisane praktycznie zupe³nie od nowa. Projekt ten znany by³y wcze¶niej pod trzema równolegle funkcjonuj±cymi nazwami – Windows Graphics Foundation, DirectX 10 oraz DirectX Next. Ostatecznie przyjêta zosta³a ta druga nazwa, której z przyzwyczajenia u¿ywa³a wiêkszo¶æ osób.

O napisaniu bibliotek od nowa zadecydowa³y przede wszystkim trzy fakty. Po pierwsze by³y one tworzone od pocz±tku wy³±cznie z my¶l± o nowym systemie operacyjny Windows Vista (bibliotek DX 10 i DX 10.1 nie ma dla Widows XP, podobnie nie bêd± dostêpne równie¿ dla tego systemu DX 11). Po drugie, chciano maksymalnie zmniejszyæ narzut interfejsu API na tworzenie grafiki (jest to tzw. API overhead), co w znacz±cy sposób pozwala przyspieszyæ generowanie grafiki. Obs³uga bibliotek graficznych, co oczywiste, wymaga zawsze pewnej mocy obliczeniowej procesora. Jak twierdzi Microsoft, dotychczas narzut na graficzny API zajmowa³ ok. 40 procent cykli procesora przeznaczonych na generowanie grafiki, w DX10 jest to tylko ok. 20 procent.


Narzut ze strony sterownika w DirectX 9 i DirectX 10.
¬ród³o: ATI/AMD

Trzecim istotnym faktem wp³ywaj±cym na to, i¿ postanowiono napisaæ graficzny API Windowsów od nowa by³o to, ¿e chciano siê przy okazji pozbyæ wszystkich kumuluj±cych siê od czasów DirectX 6.1, trudnych do usuniêcia w inny sposób ograniczeñ i ciê¿kich do wykrycia drobnych b³êdów powoduj±cych niedok³adno¶ci i niejednoznaczno¶ci w generowaniu na ró¿nych kartach trójwymiarowego obrazu. Co wiêcej, je¶li chodzi o obs³ugê sprzêtu to DirectX 10 ró¿ni± siê na tyle od swoich poprzedników, ¿e nie zachowano w nim kompatybilno¶ci z poprzednimi bibliotekami graficznymi.
 
No dobrze, to w jaki zatem sposób Windows Vista wspó³pracuj± ze starszymi kartami graficznymi? Problem ten rozwi±zano w najprostszy mo¿liwy sposób. Okazuje siê bowiem, ¿e w Vistê wbudowano specjalne, bazuj±ce na DX 9.0c biblioteki DirectX 9.0L (L od legacy – dziedziczenie), które to w³a¶nie odpowiadaj± za wspó³pracê ze wszystkimi kartami poprzednich generacji. Co wa¿ne, DirectX 9.0L i DirectX 10 nie maj± ze sob± ¿adnych wspólnych elementów. Innymi s³owy, nale¿y je po prostu traktowaæ jako dwa odrêbne interfejsy API – DirectX 9.0L s³u¿y jedynie do obs³ugi starszych kart, a DirectX 10 to API wspó³pracuj±cy tylko i wy³±cznie ze zgodnymi z nim akceleratorami nowej generacji.
 
DX10 – w ¶rodku w zasadzie bez zmian
 
Je¶li chodzi o nowo¶ci wprowadzone przez Microsoft w DirectX 10, to z punktu widzenia programisty mo¿na je nazwaæ kosmetycznymi. Wszystkie efekty realizowane w DX 10 mo¿na bowiem z powodzeniem zrealizowaæ równie¿ korzystaj±c z bibliotek DX 9. Programista musi siê tutaj pisz±c aplikacjê trochê wiêcej napracowaæ. Wymagana jest te¿ niekiedy wiêksza liczba operacji realizowanych przede wszystkim przez CPU. Niemniej uzyskany efekt w DX9 bêdzie dok³adnie taki sam jak w DX10, z t± ró¿nic±, ¿e w tym drugim wypadku gra powstanie znacznie szybciej.
 
Wiêkszo¶æ publikowanych w Internecie i w prasie zrzutów porównuj±cych mo¿liwo¶ci DX10 i DX9 (dwa z nich pokazujemy poni¿ej) nale¿y zatem uznaæ za nieco naci±gane pod wzglêdem marketingowym – podobnie jak porównania DX10 i DX11, o czym nieco dalej. Programy w DX9 i DX10 oferuj±ce podobne efekty bêd± zatem dzia³a³y mniej wiêcej z podobn± wydajno¶ci± (oczywi¶cie, je¶li bêd± uruchamiane na tym samym typie karty zgodnej zarówno z DX9, jak i DX10). Z punktu widzenia u¿ytkownika nie ma zatem ró¿nicy, które biblioteki zosta³y u¿yte. Natomiast du¿e ró¿nice s± w³a¶nie od strony programowej. Po prostu ¿eby uzyskaæ ten sam efekt w DX10, programista musi siê znacznie mniej namêczyæ ni¿ w wypadku DirectX 9. Gra na DX10 powstanie te¿ szybciej. Wyj±tek od tego co napisa³em powy¿ej stanowi± tylko efekty fizyczne realizowane przez pojawiaj±ce siê w DirectX 10 Geometry Shader, o czym za chwilê.


Porównanie efektów graficznych uzyskanych za pomoc± bibliotek DirectX 9.0 i DirectX 10.
¬ród³o: Techland

Najwa¿niejsz± wprowadzon± w programistycznych mechanizmach DirectX 10 zmian± jest wprowadzenie nowych pojemniejszych tablic tekstur (texture arrays), mieszcz±ce do 512 pojedynczych tekstur oraz zaimplementowanie dodatkowych mechanizmów obs³ugi strumienia danych (stream out). Te ostatnie pozwalaj± wys³aæ w dowolnej chwili rezultaty pracy jednostek przetwarzania geometrii wprost do pamiêci karty. Zoptymalizowano równie¿ algorytmy zarz±dzania dostêpnymi równie¿ w DirectX 9 nieco mniej pojemnymi tablicami tekstur (do 128 lub 256, w zale¿no¶ci od formatu), zmieniono i przyspieszono procedury rysowania z wyprzedzeniem (predicated draw) i wysy³ania strumienia danych. Co wa¿ne, wymagaj± one teraz znacznie mniej „obs³ugowych cykli” ze strony jednostki centralnej.


W DirectX 10 niezachowano kompatybilno¶ci sprzêtowo-programowej z wcze¶niejszymi wersjami graficznego API. Wynika to przede wszystkim ze zmienionej architektury systemu Windows Vista. Dziêki temu uda³o siê wyeliminowaæ wiele problemów zwi±zanych z dziedziczeniem b³êdów komunikacyjnych na styku sterowników, API i procedur zarz±dzaj±cych zasobami systemowymi.

We wcze¶niejszych ni¿ DX 10 API obowi±zywa³ te¿, nazwijmy go mo¿e „nieformalnym limitem” liczby obiektów wy¶wietlanych jednocze¶nie na scenie 3D oraz operacji wykonywanych na obrazie, takich jak zamiana tekstur, formatu danych dla jednostek Vertex i Pixel Shader i trybów mieszanych. Istotne jest tutaj to, ¿e za obiekt uwa¿a siê w takim wypadku nie tyle pojedynczy trójk±t, czy wielok±t, ale z³o¿on± z nich wiêksz± bry³ê np. ca³± postaæ lub jej fragment (typu rêka, noga, g³owa), kamieñ, drzewo, samochód, górê, rzekê itp. Wszystko co na scenie 3D mo¿na skalowaæ przesuwaæ i obracaæ, traktowane jest tutaj jako ca³o¶æ. Ka¿dy z tych obiektów mo¿e za¶ sk³adaæ siê z dowolnej, nielimitowanej liczby (przewa¿nie kilkuset tysiêcy lub nawet paru milionów) trójk±tów. Ograniczenie za¶ tych obiektów do podawanej w wielu ¼ród³ach liczby piêciuset, spowodowane by³o tylko i wy³±cznie niewydolno¶ci± procedur komunikacyjnych miêdzy kart± graficzn± i CPU, w których to po¶redniczy³ API. Oczywi¶cie mo¿na by³o wstawiæ na scenê wiêcej obiektów, ale procesor zbyt mocno siê wówczas „przytyka³”. Przepisanie na nowo DX-a wyeliminowa³o ten b³±d i obecnie nie trzeba ju¿ np. tworzyæ gêstego lasu z kilku modeli drzew, kopiuj±c ro¶liny w ró¿ne miejsca, ale ka¿de drzewo mo¿e byæ teraz oddzielnym, niepowtarzalnym obiektem. Jedynym ograniczeniem w tworzeniu liczby obiektów jest obecnie wy³±cznie rzeczywista wydajno¶æ tandemu GPU i CPU, a nie sztuczny limit narzucony przez API.

Shader Model 4.0
 
Wraz z DirectX 10 pojawi³ siê równie¿ nowy model cieniowania – Shader Model 4.0. Przede wszystkim jest on znacznie bardzie elastyczny ni¿ zaimplementowany w bibliotekach DX 9.0. Shader Model 3.0. Programi¶ci tworz±cy programy shaderowe maj± w nim do dyspozycji znacznie wiêcej rejestrów – ich liczba wzros³a z 256 do 65536. Rejestry te zosta³y pogrupowane w bloki 16 buforów z 4096 rejestrami ka¿dy. Wzros³a te¿ liczba rejestrów tymczasowych – z 32 do 4096.
 
Kolejn± modyfikacj± wprowadzon± w modelu cieniowania SM 4.0 jest zwiêkszony rozmiar obs³ugiwanych tekstur. W DirectX 9.0c tekstury mog± mieæ maksymalny rozmiar 4096×4096 pikseli, a w DX10 jest to 8192×8192 punktów. Je¶li chodzi o tekstury to, zwiêkszona zosta³a równie¿ liczba obiektów, które mog± byæ jednocze¶nie renderowane z wykorzystaniem techniki MRT (Multiple Render Targets), polegaj±cej na nak³adaniu tej samej bitmapy jednocze¶nie na wiele obiektów znajduj±cych siê na scenie 3D. W DX 9.0 jedna tekstura mog³a byæ nak³adana jednocze¶nie na cztery obiekty, w DX 10 obiektów mo¿e byæ osiem. W DX 10 wprowadzono te¿ tablice tekstur (texture arrays) mieszcz±ce do 512 pojedynczych bitmap. Wprowadzono równie¿ dwa nowe formaty danych u¿ywanych podczas renderingu HDR (High Dynamic Range). Pierwszy z nich oznaczony symbolem R11G11B10 dostosowany jest do tekstur. W formacie tym barwa czerwona i zielona zapisane s± z 11-bitow± dok³adno¶ci±. Kolor niebiesk± nadal opisany jest z 10-bitow± dok³adno¶ci±. Drugi format HDR jest nieco bardziej skomplikowany w opisie. U¿ywa siê tutaj bowiem u¿ywa cyfr o piêciobitowej dok³adno¶ci, stanowi±cych wyk³adnik potêgi opisuj±cej ka¿dy kolor mantys± o dziewiêciobitowej dok³adno¶ci – uff, brzmi to nieco skomplikowanie :-). Niemniej, w rezultacie oba formaty pozwalaj± na lepsze „kolorowe” odwzorowanie obiektów podczas renderowania sceny z wykorzystaniem techniki HDR.


Przyk³ad wykorzystania nowy formatów tekstur.
¬ród³o: ATI/AMD

Efekty, efekty, efekty
 
W bibliotekach DirectX 10 pojawi³o siê te¿ kilka nowych efektów 3D. Oczywi¶cie, porównywalne rezultaty osi±gnie siê te¿ innymi metodami np. korzystaj±c z Pixel i Vertex Shaderów, niemniej zaimplementowane w DX10 procedury daj± oczekiwane rezultaty znacznie szybciej i pro¶ciej ni¿ w wypadku korzystania z mechanizmów zawartych w starszych wersjach DX-ów. Lista dodanych efektów nie jest du¿a, omówmy je zatem w ca³o¶ci po kolei.
 
Przegl±d nowych efektów zacznijmy od instancingu, który co prawda pojawi³ siê ju¿ w bibliotekach DirectX 9, ale w DX10 zosta³ znacznie usprawniony. Instancing to nic innego, jak mechanizm pozwalaj±cy na rysowanie obiektów na scenie 3D w za³o¿onych przez programistê lub przypadkowych miejscach przy wykorzystaniu przygotowanych uprzednio obiektów, które mog± byæ zmniejszane, obracane, przechylane itp. Innymi s³owy, wystarczy przygotowaæ sobie np. (patrz: rysunek) jeden obiekt w postaci drzewa, po czym w buforze instancingu zawrzeæ listê zadañ do wykonania, które maj± byæ zrealizowane podczas rysowania ka¿dej kopii tego¿ obiektu na scenie 3D.

Karta graficzna automatycznie, zgodnie z zawartymi w buforze instrukcjami np. wygina przygotowane przez nas drzewo, obróci je, zmniejszy, wyd³u¿y, przeskaluje itp. dziêki czemu „za jednym zamachem” mo¿emy rozmie¶ciæ na scenie 3D ca³y las, w którym ka¿de drzewo bêdzie nieco inne. Co wa¿ne, przy u¿yciu instancingu da siê przes³aæ dane dotycz±ce drzewa w jednej paczce, za pomoc± jednego wywo³ania CPU. Procesor graficzny rysuje sobie wówczas nasz przyk³adowy las sk³adaj±cy siê z kilku tysiêcy drzew, sam bez pomocy CPU, który w tym czasie mo¿e zaj±æ siê innymi zadaniami. Znika tu zatem konieczno¶æ oczekiwanie przez procesor komputera na narysowanie ka¿dego obiektu oraz za ka¿dym razem pojedynczego ustawiania parametrów dotycz±cych rysowanego obiektu w karcie graficznej przez procesor. Jest to ogromny zysk. Usprawnienie technologii instancingu w DX10 polega na tym, ¿e do automatycznego rysowania obiektów mo¿na teraz wykorzystywaæ ró¿ne tekstury.


Dzia³anie instancingu. ¬ród³o: Microsoft/Nvidia

Podobnie dzia³a wprowadzony z DirectX 10 mechanizm proceduralnej symulacji wzrostu (Procedural Growth Simulation). Dziêki niemu mo¿na renderowaæ ro¶liny nale¿±ce do wodnych ekosystemów (niestety, wzrost ro¶lin l±dowych jest bardziej skomplikowany i jego symulacja wymaga interwencji CPU) oraz, co wa¿ne, symulowaæ ich wzrost i zachodz±ce w nich zmiany za pomoc± dos³ownie kilku instrukcji obs³ugiwanych przez DirectX 10 bez udzia³u jednostki centralnej komputera – symulacj± zajmuje siê jedynie GPU.


Proceduralna symulacja wzrostu. ¬ród³o: Microsoft

Kolejnym efektem, który znalaz³ siê w bibliotekach DirectX 10 jest punktowe mapowanie przemieszczeñ (Per-pixel Displacement Mapping). Jest to modyfikacja znanego z DirectX 8 mapowania kierunkowego (Parallax Mapping). W pierwszym kroku obliczana jest mapa wysoko¶ci. Obrazuje ona wszystkie nierówno¶ci i chropowato¶æ powierzchni obiektu. Mapê t± ³±czy siê nastêpnie z nak³adan± na przedmiot tekstur±. Punktowe mapowanie przemieszczeñ ró¿ni siê od tradycyjnego mapowania kierunkowego tym, ¿e odwzorowuje nierówno¶ci wy³±cznie w tych miejscach, które s± widoczne dla obserwatora. W ten sposób koñcowy efekt uzyskiwany jest znacznie szybciej, co nie znaczy, ¿e star± technik± nie osi±gniemy porównywalnych efektów koñcowych.


Punktowe mapowanie przemieszczeñ. ¬ród³o: Microsoft

Ostatnim z wprowadzonych w DX10 efektów jest Alpha to Coverage. Metoda ta jest wykorzystywana do wyg³adzania krawêdzi drobnych obiektów znajduj±cych siê wewn±trz pó³przezroczystych tekstur. Tego typu pó³przezroczyste tekstury wykorzystuje siê do rysowania siatek ogrodzeñ, ró¿nych wisz±cych oraz drobnych ro¶lin, takich jak na przyk³ad ¼d¼b³a trawy. Alpha to Coverage pozwala bardzo szybko wyg³adziæ krawêdzie wspomnianych obiektów bez anga¿owania du¿ej mocy obliczeniowej. Co wa¿ne, wyg³adzanie obiektów znajduj±cych siê wewn±trz tekstury wykonywane jest przed na³o¿eniem ich na scenê 3D. Dziêki temu, antyaliasingowane pó³przezroczyste tekstury z ma³ymi obiektami mog± byæ wielokrotnie nak³adane na scenê lub, dziêki umieszczaniu ich w pamiêci karty, u¿yte do mapowania kolejnych scen.


Przyk³ad wykorzystania techniki Alpha to Coverage na krawêdzi kory drzewa.
¬ród³o: Nvidia

Clou programu – zunifikowane shadery i shadery geometrii
 
Jedn± z najwa¿niejszych zmian wprowadzonych w bibliotekach graficznych DirectX 10 jest mo¿liwo¶æ optymalnego wykorzystania architektury kart graficznych bazuj±cych na zunifikowanych shaderach (Unified Shaders). Zunifikowane shadery mog± wykonywaæ, w zale¿no¶ci od potrzeb, zarówno operacje przetwarzania wielok±tów, jak i pikseli, które realizowane do tej pory by³y przez jednostki Vertex i Pixel Shader. Innymi s³owy operacje werteksowe i pikselowe w bibliotekach graficznych DirectX 10 po³±czono w jedn± fazê przetwarzania sceny 3D. Nie znaczy to jednak, ¿e programista pisz±c grê czy inn± aplikacjê „widzi” zunifikowane jednostki. Przy programowaniu korzysta on dalej z tradycyjnego modelu Vertex i Pixel Shaderów, za¶ o wykonywaniu danej zunifikowanej jednostki do obróbki werteksów czy pikseli decyduje sterownik karty i mechanizmy przydzia³u zadañ zawarte bezpo¶rednio w graficznym procesorze.


Idea wykorzystania zunifikowanych shaderów.
¬ród³o: Nvidia

W tym miejscu warto dodaæ, ¿e nie ka¿da karta graficzna zgodna z DX10 musi koniecznie korzystaæ ze zunifikowanej architektury shaderów. Bez problemu mo¿e ona byæ wykonana w tradycyjnej architekturze z oddzielnymi jednostkami Vertex i Pixel Shader. W takim wypadku za rozseparowanie ci±gu operacji geometryczno-pikselowych odpowiadaæ sterownik urz±dzenia. Niestety wi±¿e siê to z dodatkowym obci±¿eniem CPU, który te¿ bêdzie musia³ emulowaæ operacje wykonywane na shaderach geometrii, o których za chwilê.
 
Architektura zunifikowanych shaderów zadebiutowa³a wraz z GeForce’m 8800. Owa architektura to nic innego jak architektura i jednocze¶nie technologia CUDA (Compute Unified Device Architecture), w której to wykorzystuje siê znajduj±ce siê w GPU specjalne jednostki obliczeniowe Je¶li chodzi o karty AMD/ATI to podobne rozwi±zanie o nazwie Unified Shaders znalaz³o siê po raz pierwszy w Radeonie HD 2900 XT. W sumie, zdecydowana wiêkszo¶æ wspó³czesnych kart graficznych, nawet tych zgodnych tylko z bibliotekami graficznymi DirectX 9.0 korzysta z technologii zunifikowanych shaderów. Mo¿na powiedzieæ, ¿e DirectX 10 usankcjonowa³ tylko to rozwi±zanie technologiczne.
 
Jednak DX 10 to nie tylko zunifikowane shadery zastêpuj±ce we wnêtrzu uk³adu graficznego Vertex i Pixel Shadery. Jak siê okazuje biblioteki DirectX 10 wymagaj± jeszcze bowiem dodatkowych jednostek cieniowania, zaimplementowanych w GPU. Zgodnie ze specyfikacj± nowego DX-a, w potoku graficznym miêdzy Vertex a Pixel Shaderem musi siê znale¼æ modu³ obliczeñ geometrycznych – Geometry Shader. Ta nowa jednostka obliczeniowa odpowiada m.in. za ³±czenie wierzcho³ków, a tak¿e mo¿e scalaæ szereg tworz±cych scenê 3D trójk±tów w pasy (lub bardziej skomplikowane struktury), a nastêpnie przeprowadzaæ obliczenia fizyczne zwi±zane z ich ruchem. Takie po³±czone ze sob± paski mog± zostaæ np. wykorzystane do odtworzenia falowania trawy, zachowania siê w³osów, tkanin, powiewania flag na wietrze, uk³adania siê dymu itp. Shadery geometryczne odpowiadaj± te¿, ¿e generowanie tzw. cieni szablonowych (Stencil Shadow). Wszystkie wymienione powy¿ej operacje wykonywane by³y dot±d, czyli np. w wypadku kart zgodnych z DX 9.0c na CPU. Dziêki Geometry Shaderom znacznie ³atwiejsze (i szybsze) sta³o siê odwzorowanie przemieszczeñ (Displacement Mapping), wyt³aczanie cieni szablonowych (Stencil Shadow Extrusion) czy tworzenie obiektów „duszków” (point-sprite).


Potok graficzny w DirectX 10. ¬ród³o: Nvidia

Oczywi¶cie, symulacja Geometry Shadera przez sterowniki i procesor komputera jest jak najbardziej mo¿liwa – w zasadzie operacje geometryczne w bibliotekach DirectX 9 w ten sposób s± ca³y czas realizowane, ale przy bardziej skomplikowanych grach czy programach pisanych ju¿ pod DX10, emuluj±c operacje geometryczne na procesorze mo¿e siê bardzo szybko okazaæ, ¿e zabraknie nam po prostu mocy obliczeniowej CPU do wykonywania innych zadañ.
 
In¿ynierowie zajmuj±cy siê kartami graficznymi i twórcy bibliotek DirectX 10, podkre¶laj± dwie zalety po³±czenia w jedn± fazê obliczeniow± wszystkich kalkulacji geometrycznych i operacji prowadzonych na pikselach (patrz: powy¿sze schematy). Okazuje siê bowiem, ¿e w dotychczasowym modelu generowania sceny 3D bardzo czêsto wszystkie jednostki Vertex Shader by³y zajête obliczeniami, a Pixel Shadery bezczynnie przez kilkana¶cie cykli zegarowych oczekiwa³y na potrzebne dane geometryczne. Zdarzaj± siê te¿ sytuacje odwrotne, gdzie na informacje czekaj± jednostki werteksowe. W zunifikowanej architekturze shaderów, teoretycznie nie powinno byæ tego typu przestojów, gdy¿ ka¿da jednostka w GPU w zale¿no¶ci od potrzeb mo¿e zaj±æ siê jednym lub drugim typem obliczeñ. Dziêki temu w prosty sposób zwiêksza siê nie tylko sumaryczna wydajno¶æ ca³ego procesora graficznego, ale równie¿ drastycznie maleje liczba pustych przebiegów.
 
Drug± przyczyn± wprowadzenia, i usystematyzowania zunifikowanej architektury shaderów jest mo¿liwo¶æ wykorzystania niezale¿nie programowanych i uniwersalnych jednostek do zaawansowanych obliczeñ w ogóle nie zwi±zanych z grafik± – patrz: artyku³ o technologii CUDA (http://www.frazpc.pl/artykuly/704/Technologia/Obliczenia/prowadzone/za/pomoca/kart/graficznych).


Przyk³ad wykorzystania zunifikowanych shaderów do obliczenia fizyki zachowania siê wody (u góry) i dymu (u do³u).
¬ród³o: Nvidia

Czas DirectX-a 10.1
 
Po tym obszernym omówieniu bibliotek DirectX 10, przejd¼my teraz do przedstawienia ich nowszej wersji. Pojawi³a siê ona na rynku wraz z Service Packiem 1 do systemu Windows Vista. Uprzedzaj±c pytania, DirectX 9.0L nie uleg³ przy tym ¿adnym modyfikacjom. Pierwszymi kartami graficznymi zgodnymi sta³y siê DX 10.1 akceleratory 3D firmy ATI/AMD z serii Radeon 3800 HD. Nvidia bardzo d³ugo „broni³a siê” przed nowym standardem, dopiero, jak wspomnia³em na pocz±tku nowe graficzne uk³ady mobilne GTS 260M, GTS 250M, GT 240M, GT 230M oraz G210M s± z nimi kompatybilne. Kolejne, nowe rodziny uk³adów zarówno Nvidii, jaki i ATI/AMD, jak te¿ ko¶ci Larrabee Intela maj± byæ ju¿ zgodne wy³±cznie z nowym API – DirectX 11, który, wszystko ju¿ na to wskazuje, zadebiutuje tegoroczn± jesieni±.
 
Wróæmy jednak do obowi±zuj±cego obecnie standardu DX 10.1. Patrz±c na dokumentacjê, wyra¼nie widaæ, ¿e wprowadzone zmiany mia³y u¶ci¶liæ precyzjê realizowanych przez API funkcji i obliczeñ, udoskonaliæ operacje cieniowania i nak³adania tekstur oraz usprawniæ procedury antyaliasingu. Co wa¿ne, w nowej rewizja bibliotek graficznych DX 10.1 okre¶lono spor± listê funkcji, które w DX 10 karty graficzne mog³y dot±d obs³ugiwaæ opcjonalnie, a teraz musz± byæ one zaimplementowane obowi±zkowo.
 
Precyzja obliczeniowa
 
Najwa¿niejsz± zmiana dotycz±c± precyzji wykonywanych przez kartê graficzn± obliczeñ podczas generowania sceny 3D, jest to wprowadzenie zmiennoprzecinkowego filtrowania 128-bitowych tekstur przy wykorzystaniu 32-bitowej dok³adno¶ci. W DX 10 stosowana jest precyzja 16-bitowa. Kolejnym zwiêkszeniem dok³adno¶ci jest wprowadzenie 16-bitowej precyzji przy okre¶laniu przezroczysto¶ci pikseli opisanych 64-bitowymi liczbami ca³kowitymi. Taka dok³adno¶æ, w bibliotekach DX 10 by³a w³a¶ciwo¶ci± tylko opcjonaln±.
 
Wa¿nym zwiêkszeniem precyzji obliczeñ realizowanych przez karty graficzne zgodne z DX 10.1 jest zwiêkszenie we wszystkich operacjach zmiennoprzecinkowych takich jak dodawanie, odejmowanie, mno¿enie i dzielenie dok³adno¶ci zaokr±gleñ ostatniego miejsca po przecinku o pó³ warto¶ci w górê. S± to operacje 0.5 ULP (Unit in the Last Place), których wymaga uzyskanie zgodno¶ci z normami IEEE dotycz±cymi dok³adno¶ci obliczeñ numerycznych realizowanych na procesorach obliczeniowych. Zgodno¶æ t± wprowadzono ze wzglêdu na coraz czêstsze stosowanie kart graficznych w obliczeniach nie zwi±zanych z grafik±.
 
Z precyzj± obliczeniow± zwi±zane s± te¿ nowe algorytmy wyg³adzania krawêdzi. Karty graficzne zgodne z DX 10.1 musza obowi±zkowo obs³ugiwaæ antyaliasing wykonywany metod± multipróbkowania MSAA (Multi-Sample Anti-Aliasing) pobieraj±c przynajmniej cztery próbki warto¶ci s±siednich pikseli przypadaj±ce na jeden wyg³adzany punkt obrazu. Obliczenia te musz± byæ prowadzone niezale¿nie, czy piksele s± zapisane z 32-, czy z 64-bitow± precyzj±. Zestandaryzowane zosta³y te¿ szablony s³u¿±ce do próbkowania punktów wykorzystywanych przy pe³noekranowym antyaliasingu (FSAA – Full Scene Anty-Aliasing). Szablony te obowi±zuj± w trybach FSAA 2x, 4x, 8x i 16x. Dziêki temu wyg³adzanie powinno wygl±daæ teraz tak samo niezale¿nie od modelu z DX 10.1 realizuj±cego je uk³adu graficznego.


Zwiêkszona dok³adno¶æ antyaliasingu. ¬ród³o: ATI/AMD

W tym miejscu trzeba te¿ wspomnieæ o tym, ¿e w bibliotekach graficznych DirectX 10.1 wprowadzono trzy nowe funkcjonalno¶ci zwi±zane z atyaliasingiem. Pierwsz± z nich jest bufor zapisu/odczytu danych przy wyg³adzaniu krawêdzi wykorzystuj±cego multipróbkowanie. Pozwala on na przechowywanie indywidualnych warto¶ci odczytanych dla ka¿dego punktu. W kartach graficznych zgodnych z DX 10 przechowywana by³a jedna warto¶æ ¶rednia otrzymana dla wszystkich próbkowanych pikseli. Drug± jest funkcj± Pixel Coverage Masks. Ma ona za zadanie pomóc programi¶cie w stworzeniu w³asnych metod antyaliasingu, które bêd± realizowane przez Pixel Shadery. Podobn± funkcje maj± do spe³nienia szablony u¿ywane przy antyaliasingu, które programista sam mo¿e w dowolny sposób stworzyæ i modyfikowaæ. Funkcja ta nazywa siê Programmable Anti-Aliasing Sample Patern. Dziêki niej osoba programuj±ca shadery uzyskuje ca³kowit± kontrolê nad próbkowaniem punktów wykorzystywanych do wyg³adzania krawêdzi.
 
Shader Model 4.1
 
Jak mo¿na siê domy¶liæ, w DirectX 10.1 pojawi³ siê te¿ nowy model cieniowania – Shader Model 4.1. Spo¶ród wprowadzonych w SM 4.1 funkcji wymieniæ nale¿y przede wszystkim Cube Map Arrays (macierz map kubicznych), która pozwala nanie¶æ w jednym przej¶ciu wiele kubicznych map. Mapy kubiczne to nic innego, jak specjalne przygotowywane w trakcie generowania obrazu 3D tekstury powstaj±ce z po³±czenia pierwotnie nak³adanej na obiekt tekstury z mapami ¶rodowiska (np. odbiciami ¶wiat³a od przedmiotów). Nowa realizowana sprzêtowo funkcja ma, oczywi¶cie za zadanie przyspieszyæ generowanie sceny 3D.
 
Funkcja przyspieszaj±c± generowanie grafiki jest te¿ mo¿liwo¶æ okre¶lanie przezroczysto¶ci punktów w trybie MRT (Multiple Render Target) osobno dla ka¿dego obiektu na scenie 3D, dla którego nak³adana jest ta sama tekstura. Przy jej wykorzystaniu nie trzeba zmieniaæ przezroczysto¶ci w kilku krokach ju¿ po na³o¿eniu tekstur na obiekty na scenie 3D, po prostu tekstury o ju¿ odpowiednio ustalonej przezroczysto¶ci od razu nak³adane s± na obiekty w jednym przebiegu procesu renderingu.
 
Jedn± z najwa¿niejszych zdaniem Microsoftu wprowadzonych cech w SM 4.1 jest funkcja obliczeniowa Gather4. Pozwala ona na wprowadzenie niefiltrowanych bloków tekstur o wymiarach 2×2 teksele (teksel to punkt tekstury) do obliczeñ filtrowania dwuliniowego. Co wiêcej obliczenia te dokonywane s± z wyprzedzeniem na podstawie zaimplementowanych algorytmów przewiduj±cych operacje w potoku graficznym. Na poprawê szybko¶ci wykonywania programów shaderowych wp³ywaj± te¿ ulepszone algorytmy wprowadzania danych wej¶ciowych i odbierania danych wyj¶ciowych do/z Vertex Shadera. Wedle zapewnieñ, maj± one dwukrotnie przyspieszaæ szybko¶æ przep³ywu informacji 16, 32 i 128 bitowych danych. Ostatni± modyfikacj± wprowadzon± do SM 4.1 jest dodanie instrukcji LOD (Level Of Detail). Pozwala ona programi¶cie okre¶liæ szczegó³owo¶æ filtrowania tekstur. Dziêki ³atwiej bilansowaæ realistyczno¶æ odwzorowania obiektów wzglêdem wymaganej szybko¶ci generowania sceny.


Przyk³adowa demonstracja firmy ATI/AMD dotycz±ca wykorzystania modelu cieniowania SM 4.1 do uzyskania efektu globalnego o¶wietlenia.
¬ród³o: ATI/AMD

Oprócz wspomnianego wcze¶niej zwiêkszenia precyzji i powtarzalno¶ci obliczeñ zwi±zanych z antyaliasingiem, w bibliotekach DirectX 10.1 wprowadzono trzy nowe cechy funkcjonalne zwi±zane z popraw± wyg³adzania krawêdzi. Pierwsza z nich to wprowadzenie obs³ugi bufora zapisu/odczytu danych przy wyg³adzaniu krawêdzi wykorzystuj±cego multipróbkowanie. Bufor ten pozwala na przechowywanie indywidualnych warto¶ci odczytanych dla ka¿dego punktu (a nie jak dotychczas jednej warto¶ci ¶redniej dla wszystkich próbkowanych pikseli) i pozwala na bezpo¶redni dostêp do tych danych programom shaderowym (wykonywanym przez Pixel Shader).
 
Ciekaw± funkcj± jest Pixel Coverage Masks, która za zadanie pomóc programi¶cie w stworzeniu w³asnych metod antyaliasingu, które bêd± realizowane przez Pixel Shadery. Podobn± funkcje maj± do spe³nienia szablony u¿ywane przy antyaliasingu, które programista sam mo¿e w dowolny sposób stworzyæ i modyfikowaæ (Programmable Anti-Aliasing Sample Patern), Dziêki temu uzyskuje on ca³kowit± kontrolê nad próbkowaniem punktów wykorzystywanych do wyg³adzania krawêdzi.
 
Czekaj±c na DirectX 11
 
Jak widaæ, wprowadzone w DX 10.1 nie wyró¿niaj± siê niczym szczególnym. Co prawda usprawniaj± one obliczenia wykonywane przez kartê podczas generowania sceny 3D, ale nie wnios³y jaki¶ szczególnie istotnej nowej funkcjonalno¶ci. Du¿e zmiany Czekaja nas dopiero w przygotowywanych w³a¶nie bibliotekach DirectX 11, które mog± wywo³aæ znacznie wiêksz± rewolucjê w procesie tworzenia trójwymiarowej grafiki, ni¿ pojawienie siê bibliotek DirectX 10, które do dzi¶ przez wielu programistów s± traktowane z pewna rezerw± i wola oni wci±¿ korzystaæ z wersji 9.0c.


Porównanie mo¿liwo¶ci DirectX 10 i DirectX 11. ¬ród³o: Microsoft


Gra Assassin’s Creed w wersji dla DX10 (u góry) i DX 11 (na dole)

Jak ju¿ wspomina³em na pocz±tku artyku³u, biblioteki DirectX 11 znajd± siê w finalnej wersji systemu Windows 7, ale, na szczê¶cie, bêd± równie¿ dostêpne dla Windows Vista. Co wiêcej, zarówno programi¶ci, twórcy gier komputerowych, jak i producenci sprzêtu ju¿ od kilku miesiêcy mogli skorzystaæ z odpowiedniego pakietu deweloperskiego SDK (http://www.microsoft.com/downloads/details.aspx?FamilyId=5493F76A-6D37-478D-BA17-28B1CCA4865A&displaylang=en).


DirectX 11 dostêpne s± ju¿ w pakiecie SDK dla developerów.
¬ród³o: Microsoft

Jak zapowiada firma ATI/AMD ju¿ w listopadzie powinny pojawiæ siê na rynku pierwsze akceleratory 3D zgodne z nowym API. Przedstawiciele tej firmy twierdz±, ¿e pod tym wzglêdem wyprzedz± Nvidiê, która swoje produkty zgodne z DX 11 poka¿e na rynku znacznie pó¼niej – có¿, po¿yjemy, zobaczymy.
 
Nacisk na teselacjê
 
W czerwcu firma ATI/AMD przedstawi³a szereg dokumentów dotycz±cych nowych bibliotek graficznych Microsoftu. Podczas tej, odbywaj±cej siê na targach Computex 2009 konferencji zaprezentowano te¿ pierwsze wafle krzemowe z nowymi uk³adami zgodnymi z DX 11. zaprezentowano te¿ algorytmy teselacji na dzia³aj±cej karcie graficznej zgodnej z DirectX 11, na któr± to funkcjê najwiêkszy nacisk po³o¿yli w³a¶nie przedstawiciele ATI/AMD – i nie ma co siê im dziwiæ. Sprzêtowy teselator i zwi±zana z nim technologia TruForm pojawi³a siê w kartach ATI/AMD w 2002 roku, a konkretnie w Radeonie 8500. Niestety, przez d³ugi czas nie zyska³a ona wiêkszego uznania. Do najbardziej znanych, pierwszych gier korzystaj±cych z technologii TruForm nale¿y „Return to Castle Wolfenstein” (od wersji z patchem 1.33).


Return to Castel Wolfenstain – jedna z pierwszych gier wykorzystuj±cych teselacjê.

Teselacja to etap, który w potoku graficznym 3D zwi±zany z dzieleniem wygenerowanych podczas tworzenia wirtualnej sceny 3D wielok±tów na mniejsze fragmenty – nie by³ on do tej pory obowi±zkowy. Dziêki teselacji generowany wy¶wietlany na ekranie obiekt mo¿e byæ automatycznie, bez du¿ego udzia³u programisty, znacznie bardziej precyzyjnie narysowany. Programista wskazuje jedynie bry³y lub ich fragmenty, które maj± byæ dok³adniej podzielone, a za pozosta³e dzia³ania odpowiadaj± ju¿ sterowniki i karta graficzna. Wskazany obszar, fragment bry³y, lub wielok±t jest nastêpnie dzielony przez teselator na kilkana¶cie mniejszych trójk±tów. Co wiêcej, na podstawie dodatkowych informacji o po³o¿eniu obrabianego trójk±ta wzglêdem innych nale¿±cych do tego obiektu, np. do kuli, wielok±tów, ustala siê wspó³rzêdne wierzcho³ków mniejszych trójk±tów. Chodzi o to, aby wystawa³y one nad powierzchniê dzielonego trójk±ta tak, aby by³ on bardziej g³adki i ob³y, dziêki czemu mapowane tekstury znacznie lepiej oddadz± jego kszta³t. Przy automatycznej teselacji z uzyskanymi dodatkowo trójk±tami nie s± powi±zane ¿adne dane w pamiêci karty. To sprawia, ¿e, ilo¶æ przesy³anych miêdzy pamiêci± karty i uk³adem 3D danych nie zwiêksza siê i nie obci±¿a dodatkowo magistrali danych i pamiêci. Okazuje siê te¿, ¿e niektóre animacje, np. falowanie wody czy miêcie tkaniny, mog± byæ tworzone wy³±cznie na podstawie bazowej siatki sk³adaj±cej siê ze stosunkowo niewielkiej liczby wielok±tów.


TruForm – Teselacja realizowana na kartach ATI. ¬ród³o: ATI/AMD

Hull i domain shader
 
Analizuj±c dokumenty Microsoftu i prezentacje firmy ATI/AMD widaæ wyra¼nie, ¿e bardzo istotnymi zmianami w DirectX 11 jest wprowadzenie kolejnych modyfikacji do modelu cieniowania realizowanego przez kartê graficzn± i jednocze¶nie do potoku renderingu. S± to sprzêtowo realizowane etapy: hull oraz domain shader nazywane równie¿ czasem po polsku odpowiednio shaderem pow³oki i shaderem dziedziny. Uwaga, poni¿ej trudny fragment :-).
 
Hull Shader przekszta³ca wszystkie dane wej¶ciowe w taki sposób, ¿e s± one traktowane podczas numerycznych obliczeñ jako siatka (macierz) powi±zanych ze sob± danych wej¶ciowych o ró¿nych czêstotliwo¶ciach – jest to tak zwana siatka typu control mesh frequency. Taka matematyczna transformata zmienia jedn± reprezentacjê (czyli jej matematyczny opis – np. do opisania po³o¿enia w przestrzeni 3D punktu potrzebne s± jego trzy wspó³rzêdne X,Y,Z lub np. promieñ i kat wektora wodz±cego (r,f) – to jest inna reprezentacja tego¿ punktu) powierzchni na drug±. W grafice 3D stosuje siê zamianê powierzchni opisanej czterowymiarow± siatk± punktów Catmulla-Clarka na powierzchniê, a raczej jej reprezentacjê opisan± powierzchniami Bziera (tzw. Bezier patch). W taki sposób operacje dotycz±ce zamiany matematycznej reprezentacji wykonywa³ dotychczas na potrzeby generowania grafiki 3D miêdzy innymi program Blender. Transformata z normalnej przestrzeni na przestrzeñ opisana powierzchniami Beziera pozwala w znacznie bardziej naturalny (realistyczny) sposób przedstawiæ przedmioty o g³adkich zaoblonych kszta³tach. Takie powierzchnie nazywa siê w literaturze zwi±zanej z generowaniem obrazów 3D powierzchniami naturalnie g³adkie.


Potok renderingu w DirectX 11. ¬ród³o: Microsoft

Nieco inne zadanie ma domain shader. Ten shader u¿ywany jest praktycznie tylko raz dla ka¿dego wierzcho³ka na generowanej scenie 3D. Domain shader ustala dziedzinê argumentów wej¶ciowych (tzw. domenê) dla obliczeñ wszystkich powierzchni parametrycznych wykorzystywanych na danej trójwymiarowej scenie. Mówi±c pro¶ciej, odpowiada on za to, ¿e ka¿dy obiekt na scenie 3D zostaje wygenerowany tylko raz, a wszelkie zwi±zane z nim zmiany – np. zgniecenie b³otnika wirtualnego samochodu, s± tylko uaktualnieniami fragmentów jego bry³y, a nie efektem wygenerowania ca³ego obiektu od nowa.


Zmiany w DirectX 11. ¬ród³o: Microsoft

Shader Model 5.0
 
DirectX 11 nie by³by kolejn± wersj± bibliotek graficznych gdyby nie wprowadzono w nim, kolejnego tym razem ju¿ pi±tego modelu cieniowania. Shader Model 5.0 zosta³ zaprojektowany tak by jeszcze bardziej ni¿ SM 4.1 u³atwiæ pracê programistom. Najwa¿niejsz± jego cech± jest wykorzystanie obiektowego modelu programowania, wzorowanego na C++. SM 5.0 pozwala te¿ na wykonywanie obliczeñ podwójnej precyzji, co w efekcie zwiêksza dok³adno¶æ renderingu. Pozosta³e nowe funkcje SM 5.0 dotycz± przede wszystkim wymiany danych miêdzy poszczególnymi przetwarzanymi przez uk³ad w±tkami.
 
Istotn± nowo¶ci± w Shader Model 5.0 jest równie¿ zestaw instrukcji odpowiedzialnych za sterowanie strumieniowymi operacjami wej¶cia-wyj¶cia. Funkcje te w systemie Windows 7 wykorzystano przede wszystkim do zarz±dzania multimediami. W Windows 7 pojawi siê multimedialny mechanizm drag&drop, który pozwoli na to, ¿e po pod³±czeniu do komputera przeno¶nego urz±dzenia takiego jak odtwarzacz MP4, konsola PSP, czy telefonu komorkowego i wybraniu w eksploratorze Windows znajduj±cego siê na dysku komputera materia³u wideo i przeci±gniêciu go do mobilnego urz±dzenia spowoduje, ze automatycznie rozpocznie siê proces transkodowania filmu na odpowiedni dla mobilnego sprzêtu format danych wideo. Transkodowanie to wykorzystuje procesor graficzny i strumieniowe operacje wej¶cia-wyj¶cia zaszyte w SM 5.0.


Transkodowanie materia³ów wideo z pomoc± DirectX 11
¬ród³o: ATI/AMD

Kompresja tekstur
 
W DirectX 11 pojawi± siê te¿ dwa nowe formaty kompresji tekstur. S± to formaty BC6 oraz BC7. Pierwszy stworzono w celu znacz±cej poprawy jako¶æ wy¶wietlanego obrazu HDR (High Dynamic Range) bez zauwa¿alnego spadku szybko¶ci generowania obrazu 3D. Z kolei format BC7 powsta³ do obs³ugi 8-bitowych tekstur LDR (Low Dynamic Range) przy zachowaniu ich wysokiej jako¶ci. Format ten kompresuje teksturu w proporcji 3:1, a BC6 pozwala na skompresowanie tekstur w stosunku 6:1.


Nowe formaty tekstur obs³ugiwane przez DX 11.
¬ród³o: Microsoft

Shadery obliczeniowe
 
Moim zdaniem najwa¿niejsz±, rewolucyjn± zmian±, której konsekwencji nie jeste¶my jeszcze w tej chwili sobie nawet do koñca sobie obecnie u¶wiadomiæ jest wprowadzenie w DirectX 11 shaderów obliczeniowych (Compute Shader). Element ten nie jest jednak bezpo¶rednio wykorzystywany podczas generowania obrazu, dlatego do¶æ czêsto jest w wielu opracowaniach pomijany. Compute Shader jest bowiem elementem pozwalaj±cym na prowadzenie na karcie obliczeñ nie zwi±zanych w ogóle z generowaniem grafiki – jest to rozwiniêcie opisanej wcze¶niej przy opisie DX 10 architektury zunifikowanych. Powiem wiêcej, tak naprawdê jest to wprowadzona do DirectX implementacja obliczeniowych technologii Nvidia CUDA i AMD Stream! (patrz: http://www.frazpc.pl/artykuly/704/Technologia/Obliczenia/prowadzone/za/pomoca/kart/graficznych). Lub jeszcze inaczej Microsoftowi odpowiednik bibliotek OpenCL – podobnie jak DirectX jest odpowiednikiem OpenGL-a.

No dobrze, ale co w nim tak naprawdê takiego rewolucyjnego. Otó¿ podstawow± zalet± modelu Compute Shader jest to, ¿e o ile technologie CUDA i AMD Stream nie s± ze sob± kompatybilne, o tyle Compute Shader bêdzie, podobnie jak OpenCL, wspólny dla wszystkich platform sprzêtowych wykorzystuj±cych do obliczeñ karty graficzne. Konsekwencje tego faktu naprawdê trudno w tej chwili przeceniæ. Do tej pory g³ówn± barier± rozwoju oprogramowania zgodnego z CUDA i AMD Stream by³o to, ¿e by³y to technologie przeznaczone do obs³ugi sprzêtu wy³±cznie jednego producenta, teraz gdy karty graficzne chc±c uzyskaæ zgodno¶æ z DX 11 bêd± musia³y byæ te¿ zgodne z Compute Shader, co sprawi, ¿e obliczenia nie zwi±zane z grafik± wykonywane na kartach graficznych zagoszcz± na dobre w naszych pecetach przyczyniaj±c siê do znacznego przyrostu mo¿liwej do wykorzystania mocy obliczeniowej.


Wykorzystanie Compute Shadera do obliczeñ zwi±zanych z fizyk±. Na rysunku bêd±cym fragmentem wiêkszej animacji, dziêki szaderom obliczeniowym niemu uzyskano realistyczny efekt falowania wody.
¬ród³o: Nvidia

Jak mo¿na wyczytaæ w dostêpnej dokumentacji Microsoftu, shader obliczeniowy bêdzie przede wszystkim odpowiedzialny za szeroko pojête obliczenia zwi±zane z fizyk± w grach. Z jego pomoc± obliczane maj± byæ takie zjawiska fizyczne jak: interakcja przedmiotów, trajektoria ruchu, eksplozje, zachowanie siê dymu (efekty cz±steczkowe), falowanie i przep³yw cieczy, zachowanie siê tkanin i ubrañ, fizyka cia³ miêkkich itp. Ma³o tego, planuje siê te¿, ¿e DX 11 bêdzie wspomaga³ algorytmy sztucznej inteligencji (AI) w grach, co pozwoli na bardziej realne zachowanie siê postaci, którymi steruje komputer. Oczywi¶cie, shader obliczeniowy bêdzie móg³ równie¿ zostaæ wykorzystany w programy in¿yniersko-naukowych, tak jak ma to obecnie miejsce w wypadku CUDA i AMD Stream.
 
Pojawienie siê Compute Shadera w DX 11 mo¿e moim zdaniem mieæ jeszcze jedn± powa¿n± konsekwencjê, tym razem dla firmy Nvidia. Zintegrowany z DirectX shader obliczeniowy pozwoli twórcom gier na przeniesienie znacznej czê¶ci obliczeñ z procesora na kartê graficzn±, a jednocze¶nie kalkulacje te nie bêd± ju¿ wiêcej ograniczone do sprzêtu tylko jednego producenta. Promowana przez Nvidiê technologia CUDA, chodz±ca jedynie na kartach Nvidii, zaczyna wiêc dla twórców oprogramowania traciæ powoli racjê bytu. Ma³o tego, wkrótce pojawi siê równie¿ nowa wersja silnika efektów fizycznych – Havok. Ten tworzony jest z kolei z my¶l± o równie¿ uniwersalnym ¶rodowisku OpenCL, co stawia pod du¿ym znakiem zapytania dalsz± egzystencjê promowanej przez Nvidiê technologii PhysX. Nale¿y zatem zastanowiæ siê, który z twórców gier bêdzie chcia³ korzystaæ z rozwi±zania technicznego przeznaczonego tylko dla sprzêtu jednego producenta? DirectX 11 i nowy Havok mog± wiêc wpêdziæ Nvidiê, je¶li nie zmieni ona swojej polityki dotycz±cej systemów CUDA/PhysX, w powa¿ne k³opoty i zepchn±æ do defensywy – czy tak bêdzie, wkrótce siê o tym przekonamy.
 
Wró¿enie z fusów, czyli co nas czeka w przysz³o¶ci
 
Jak widaæ, biblioteki DirectX 10 i DirectX 11 konsekwentnie przenosz± coraz wiêksz± cze¶æ obliczeñ z procesora do karty graficznej. Windows 7 ma byæ te¿ pierwszym systemem operacyjnym integruj±cym i w sposób p³ynny wykorzystuj±cym moc obliczeniow± procesora i procesora graficznego. Programistom Microsoftu tworz±cym biblioteki DirectX 11 przy¶wieca³a bowiem chêæ, dostarczenia wraz z Windows 7 wygodnego ¶rodowiska umo¿liwiaj±cego jednolite wykorzystanie w³a¶ciwo¶ci ca³ego dostêpnego w systemie komputerowym sprzêtu w taki sposób, aby jak optymalnie wykorzystaæ ich potencja³ obliczeniowy. DirectX 11 ma zapewniæ przede wszystkim obs³ugê sprzêtu przez system operacyjny na znacznie ni¿szym poziomie i w znacznym stopniu udoskonaliæ sposoby przetwarzania wielow±tkowego. Co wa¿ne ju¿ wkrótce pojawi± siê pierwsze karty graficzne zgodne z DX 11.


Zapowied¼ pierwszych uk³adów graficznych zgodnych z DirectX 11.
¬ród³o: ATI/AMD

Pierwszy krok zosta³ zrobiony – model cieniowania Shader Model 5.0 w znacznym stopniu wykorzystuje ju¿ programowanie obiektowe i obliczeniowe jednostki karty graficznej do kalkulacji nie zwi±zanych z grafik±. Windows 7 ma maksymalnie korzystaæ z ujednoliconego ¶rodowiska GPU + CPU. Co wiêcej, jego nastêpca bêdzie traktowa³ wszystkie dostêpne w pececie uk³ady obliczeniowe (a wiêc np. procesor d¼wiêkowy, czy np. dodatkow± kartê obliczeniow±) w ten sam jednolity sposób. Za kilka lat programista pisz±c grê nie bêdzie siê przejmowa³ na czym bêdzie siê ona wykonywaæ, czy uruchomiona zostanie na CPU czy GPU.


Przyk³adowa scena otrzymana przy wykorzystaniu DirectX 11.
¬ród³o: Microsoft

Jednolity model programowania i ¶rodowisko programistyczne sprawi±, ¿e osoba pisz±ca aplikacjê wykorzystuj±c procedury zawarte w przysz³ym API (jak wynika z bardzo nieoficjalnych zapowiedzi Microsoftu mo¿e ju¿ chodziæ nawet o DirectX 12) bêdzie mog³a stworzyæ uniwersalny program, w którym przydzia³em dostêpnej mocy obliczeniowej bêdzie siê zajmowa³ wy³±cznie system operacyjny. Sprzêt stanie siê dla programistów ca³kowicie „przezroczysty”. Czy tak siê stanie, trudno w tej chwili oceniæ. Dysponujemy w tej chwili zbyt ma³a ilo¶ci± informacji, przez to przewidywanie przysz³ych posuniêæ Microsoftu dotycz±cych mo¿liwych scenariuszy w rozwoju API, w tym DirectX-a oraz rozwoju systemów operacyjnych staje siê raczej zajêciem dla futurologów i przys³owiowym wró¿eniem z fusów.

Autor: Marcin Bieñkowski

Komentarze (139)





Podobne Artyku³y/Recenzje

29-01-2010 - SAPPHIRE RADEON HD 5670 1024MB - DIRECTX 11 nie do koñca dla mas (15%)
02-01-2010 - Dirt 2 - jazda w stylu DirectX 11 (15%)
15-05-2009 - Technologia: Obliczenia prowadzone za pomoc± kart graficznych (5%)
23-09-2009 - ATI Radeon 5870 / 5850 - Technologia (5%)
12-03-2010 - Technologia druku komputerowego (5%)
11-03-2009 - RFID - miniaturowy szpieg (3%)
06-07-2009 - INTEL: Czas 32 nanometrów (3%)
24-04-2006 - PureVideo - technologia przysz³o¶ci (3%)
04-01-2010 - Technologie: 32 nanometrowe procesory Intela (3%)
09-02-2010 - Technologie: NVIDIA Fermi GF100 (3%)
18-09-2009 - Produkcja procesorów i pó³przewodników - od piasku do procesora (3%)
22-12-2009 - Intel Single-chip Cloud Computer (3%)
18-01-2010 - Technologie: Architektura Fermi - NVIDIA GF100 (3%)
12-01-2009 - Technologia vPro - zarz±dzanie na odleg³o¶æ (3%)
29-05-2009 - Przydatne serwisy i us³ugi online - Wszystko na chmurce (3%)
06-12-2001 - 3D za bezcen (1%)
18-04-2002 - 3D za Bezcen II (1%)
08-02-2002 - 2x GeForce2 Ti / MX400 (1%)
09-06-2002 - Recenzja 3xGeforce4 TI (1%)
17-07-2002 - Recenzja KYRO 2 SE (1%)

___________________________
Wiêcej artyku³ów



Redakcja serwisu FrazPC.pl nie ponosi odpowiedzialno¶ci za ewentualne szkody powsta³e
w wyniku u¿ytkowania jakichkolwiek materia³ów ukazuj±cych siê na ³amach FrazPC.pl.
Copyright © FrazPC.pl 1997-2010
| Online: 3074 | Online w dziale: 179 | Ods³ony: 609,577,512 | Czas generacji strony: 0.0226 s |