Wszystkie tajemnice DirectX 11

Przygotowania do wprowadzenia bibliotek DX 11 idą już pełną parą. Od dłuższego czasu wiadomo, że DirectX 11 znajdzie się w finalnej wersji systemu 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 (http://www.microsoft.com/downloads/details.aspx?FamilyId=5493F76A-6D37-478D-BA17-28B1CCA4865A&displaylang=en). Mało tego, najpóźniej w listopadzie powinny pojawić się na rynku pierwsze akceleratory 3D zgodne z nowym API (Application Programming Interface). Świadczy o tym m.in. fakt, że firma ATI/AMD przedstawiła niedawno szereg dokumentów dotyczących sprzętowej zgodności z nowymi bibliotekami graficznymi Microsoftu, a także czerwcowa konferencja tej korporacji, która odbyła się przy okazji targów Computex 2009. Na niej zaprezentowano pierwsze wafle krzemowe z nowymi układami zgodnymi z DX 11 oraz pokazano teselację na działającej karcie graficznej zgodnej z DirectX 11.
Teselacja realizowana na kartach ATI/AMD
Teselacja realizowana na kartach ATI/AMD

Teselacja

W największym skrócie, teselacja to dzielenie wygenerowanych podczas tworzenia wirtualnej sceny 3D wielokątów na mniejsze fragmenty. Innymi słowy, dzięki teselacji, wyświetlany na ekranie obiekt może być w sposób znacznie precyzyjniejszy narysowany. Co więcej, programista wskazuje tutaj jedynie bryły lub ich fragmenty, które mają być dokładniej podzielone, a resztą zajmują się już sterowniki i karta graficzna. Mówiąc bardziej obrazowo, do teselatora trafia jeden trójkąt, który jest np. fragmentem kuli. Trójkąt ten jest następnie dzielony przez teselator na kilkanaście mniejszych trójkątów. Na podstawie dodatkowych informacji o położeniu obrabianego trójkąta względem innych należących np. do kuli wielokątów, ustala się współrzędne wierzchołków mniejszych trójkątów (będą one wystwać nad powierzchnię dzielonego trójkąta). W fazie nakładania tekstur trójkąty te sprawią, że mapowana tekstura jeszcze bardzie się “zaobli”, znacznie lepiej oddających kształt swojego odpowiednika z rzeczywistego świata.

Co ważne, z dodatkowo uzyskanymi w wyniku teselacji trójkątami nie są powiązane żadne dane w pamięci karty, dzięki czemu nie zwiększa się ilość przesyłanych między pamięcią karty i układem 3D danych. Jednostka cieniowania wierzchołków pobiera zatem tylko dane dla początkowego trójkąta. Co więcej, 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. Oczywiście, teselacja sprawia, że podczas generowania sceny 3D wymagany jest znacznie większy nakład obliczeniowy ze strony układu graficznego.

Teselacja realizowana na kartach ATI/AMD

Teselacja realizowana na kartach ATI/AMD
Return to Castle Wolfenstein – jedna z pierwszych gier wykorzystujących sprzętową teselację.

Return to Castle Wolfenstein – jedna z pierwszych gier wykorzystujących sprzętową teselację.

Dla firmy ATI/AMD zagadnienia związane z teselacją są istotne z jednego względu. Otóż sprzętowy teselator i związana z nim technologia TruForm pojawiła się już w Radeonie 8500 w 2002 roku, jednak przez długi czas nie zyskała 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).

Kolejne wersje technologii TruForm implementowane są we wszystkich kartach ATI/AMD począwszy od Radeonów serii HD 2000. Jednak gry wykorzystujące sprzętową teselację to co najwyżej kilkanaście tytułów (m.in. Counter Strike, Tom Clancy’s Rainbow Six, Soldier of Fortune, Soldier of Fortune II: Double Helix, The Elder Scrolls III: Morrowind, Madden NFL 2004, Bugdom, Return to Castle Wolfenstein, Serious Sam, Unreal Tournament 2003 i 2004, Wolfenstein: Enemy Territory, Command & Conquer: Renegade oraz Neverwinter Nights, przy czym sporo z nich wymaga specjalnych patchy). Powyższe fakty pokazują, że dodanie sprzętowej teselacji do bibliotek DirectX 11 bardzo ucieszyło firmę AMD i potraktowane zostało jako jej sukces. Oczywiście teselację można też zrealizować w sposób programowy,  korzystając z Vertex Shaderów, lub wprowadzonych w DirectX 10 Geometry Shaderów.

Hull i domain shader

Teselacja to oczywiście tylko jeden z elementów w tzw. potoku renderingu, czyli kolejnych kroków realizowanych podczas generowania przez kartę graficzną sceny 3D. Microsoft zwraca uwagę jeszcze na dwie inne nowością wprowadzone właśnie w potoku renderingu DirectX 11. Są to sprzętowo realizowane etapy: hull oraz domain shader nazywane również czasem po polsku odpowiednio shaderem powłoki i shaderem dziedziny. Nie wdając się w szczegóły, pierwszy z nich przekształca wszystkie dane wejściowe w taki sposób, że są one traktowane następnie jako macierz lub siatka powiązanych ze sobą informacji, co w efekcie pozwala w znacznie bardziej realistyczny sposób przedstawić przedmioty o gładkich, obłych kształtach.

Potok renderingu DirectX 11

Potok renderingu DirectX 11

Z kolei domain shader używany jest praktycznie tylko raz dla każdego wierzchołka na generowanej scenie 3D. Jego zadaniem jest ustalenie dziedziny argumentów wejściowych dla obliczeń wszystkich powierzchni parametrycznych wykorzystywanych na danej trójwymiarowej scenie. Innymi słowy odpowiada on za to, że dany przedmiot na scenie 3D zostanie wygenerowany tylko raz, a wszelkie zmiany w nim zachodzące – np. zgniecenie błotnika wirtualnego samochodu, są tylko uaktualnieniami fragmentów jego bryły, a nie efektem wygenerowania całego obiektu od nowa.

Graficzne karty obliczeniowe

Najważniejszą jednak nowością, wprowadzoną w DirectX 11 jest z pewnością shader obliczeniowy (Compute Shader). Element ten nie jest jednak bezpośrednio wykorzystywany podczas  generowania obrazu. Compute Shader jest bowiem elementem pozwalającym na prowadzenie na karcie obliczeń nie związanych w ogóle z generowaniem grafiki. Innymi słowy jest to jak gdyby wprowadzona do DirectX microsoftowa implementacja obliczeniowych technologii Nvidia CUDA i ATI Stream lub inaczej odpowiednik bibliotek OpenCL. Jego podstawową zaletą jest to, że o ile CUDA i ATI 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. Jest to o tyle ważne, że do tej pory główną barierą rozwoju oprogramowania zgodnego z ATI Stream i CUDA było to, że były to technologie przeznaczone do obsługi sprzętu wyłącznie jednego producenta.

Wykorzystanie Compyte Shadera do obliczeń związanych z fizyką

Wykorzystanie Compyte Shadera do obliczeń związanych z fizyką
Wykorzystanie Compyte Shadera do obliczeń związanych z fizyką

Wykorzystanie Compyte Shadera do obliczeń związanych z fizyką

Shader obliczeniowy będzie w zamyśle twórców DirectX przede wszystkim odpowiedzialny za szeroko pojęte obliczenia związane z fizyką w grach. Z jego pomocą kalkulowane będą między innymi 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.  DX 11 będzie wspomagał także algorytmy sztucznej inteligencji, określające zachowanie postaci w grach. Oczywiście shader obliczeniowy będzie mógł również zostać wykorzystany w programy inżyniersko-naukowych, tak jak ma to miejsce z technologią CUDA.

Zintegrowany z DirectX shader obliczeniowy pozwoli twórcom gier na przeniesienie znacznej części obliczeń z procesora na kartę graficzną, jednocześnie kalkulacje te nie będą ograniczone do sprzętu tylko jednego producenta – musi być to jednak sprzęt zgodny z DirectX 11. Dodatkowo pojawienie się nowej wersji silnika efektów fizycznych Havok powstającego z myślą o środowiski OpenCL, stawia pod dużym znakiem zapytania dalszą egzystencję promowanej przez Nvidię technologii PhysX. Który z producentów gier będzie chciał bowiem korzystać z rozwiązania technicznego przeznaczonego tylko dla sprzętu jednego producenta?

Kompresja tekstur i Shader Model 5.0

To jeszcze nie wszystkie nowości zapowiedziane w DirectX 11. Microsoft postanowił do DX 11 wprowadzić dwa nowe formaty kompresji tekstur. Są to dormaty BC6 oraz BC7. Pierwszy znacząco poprawia jakość wyświetlanego obrazu HDR (High Dynamic Range) bez zauważalnego spadku szybkości generowania. Format BC6 pozwala uzyskać wysoką jakość tekstur przy skompresowaniu ich w stosunku 6:1. Z kolei system BC7 zapewnia obsługę 8-bitowych tekstur LDR (Low Dynamic Range), zachowując jednocześnie ich wysoką jakość, kompresując je w proporcji 3:1.

Kompresja tekstur w DirectX 11

Kompresja tekstur w DirectX 11
Transkodowanie materiału wideo

Transkodowanie materiału wideo

Wraz z DirectX 11 zadebiutuje także nowy model cieniowania – Shader Model 5.0. Ma on w znacznym stopniu ułatwić pracę twórcom gier i aplikacji, gdyż wykorzystuje on model programowania obiektowego. Co więcej, SM 5.0 umożliwi wykonywanie obliczeń podwójnej precyzji, co w efekcie zwiększy dokładność renderingu. Inne kluczowe funkcje SM 5.0 dotyczą przede wszystkim wymiany danych między poszczególnymi przetwarzanymi przez układ wątkami.

W Shader Model 5.0 wprowadzono też zestaw instrukcji odpowiedzialnych za sterowanie strumieniowymi operacjami wejścia-wyjścia.  Co ciekawe, funkcje te w systemie Windows 7 do zarządzania multimediami. Wprowadzony w nowym systemie operacyjnym Microsoftu multimedialny mechanizm drag&drop pozwala na to, że po podłączeniu do komputera przenośnego urządzenia takiego jak odtwarzacz MP4 czy konsoli Sony PSP i wybraniu w eksploratorze Windows znajdującego się na dysku komputera materiału wideo i przeciągnięciu go do urządzenia spowoduje rozpoczęcie transkodowania filmu na odpowiedni format. Transkodowanie to wykorzystuje procesor graficzny i strumieniowe operacje wejścia-wyjścia z SM 5.0.

Nadchodzi czas DX 11 i Windows 7

Głównym celem przyświecającym programistom Microsoftu tworzącym biblioteki DirectX 11 było dostarczenie 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. Jak podkreślają przedstawiciele Microsoftu, zestaw nowych funkcji DirectX 11 zapewnić ma przede wszystkim obsługę sprzętu przez system operacyjny na znacznie niższym poziomie. Co więcej, DirectX 11 w znacznym stopniu udoskonala również algorytmy przetwarzania wielowątkowego, czego dowodem mają być wprowadzone model cieniowania Shader Model 5.0 oraz jednostki obliczeniowe ogólnego zastosowania (ang. Compute Shader). Ciekawie zapowiadają się też realizowany sprzętowo etap teselacji i nowe algorytmy kompresji tekstur.

Windows 7 ma maksymalnie korzystać z ujednoliconego środowiska GPU + CPU. Jednak, aby skorzystać z całego potencjału potrzebne będą nowe karty graficzne. Na szczęście, Microsoft jednak zapowiedział, że wszystkie gry napisane pod DX 10 oraz 10.1 będą prawidłowo działać w najnowszym środowisku graficznym. Kiedy pojawia się aplikacje dla nowego API – zobaczymy. Sądząc, po tym, ile czasu zajęło przygotowanie programów dla DirectX 10, przypuszczać można, że nie pojawią się one wcześniej jak w połowie przyszłego roku.