NVISION 08 to zorganizowana przez NVIDI-ę, po raz pierwszy właśnie w tym roku, konferencja dotycząca wizualnych aspektów generowania grafiki, mająca w założeniu przypominać targi Intel Developer Forum. Można zatem było spotkać zarówno graczy, który prowadzili swoje rozgrywki, ludzi związanych z demo scene, komputerowych grafików, jak i rzesze deweloperów i osoby współtworzące gry i programy 3D. Na NVISION 08 nie zabrakło oczywiście również prasy i ekipy PCLab.pl. Dzięki temu udało nam się zobaczyć jedną z pierwszych prezentacji dotyczących DirectX 11 (pierwsza miała miejsce na konferencji Gamefest 2008). Prezentację, jak już wspomnieliśmy, prowadził Kevin Gee z Microsoftu. Poniżej przedstawiamy w skrócie najważniejsze zmiany w DirectX 11. Oczywiście, gdy tylko pojawi się więcej informacji na temat nowego graficznego API, przygotujemy obszerniejszy materiał.
DX 11 – odsłona pierwsza
Głównym celem przyświecającym projektantom DirectX 11 było dostarczenie programistom wygodnego narzędzia umożliwiającego wykorzystanie właściwości dostępnego na rynku (teraz i w najbliższej przyszłości) sprzętu, w tym kart i systemów graficznych z wieloma rdzeniami graficznymi, takich jak ATI CrossFire czy NVIDIA SLI, oraz systemów wieloprocesorowych, w taki sposób, aby jak najlepiej wykorzystać ich potencjał obliczeniowy. Według Kevina Gee zestaw nowych funkcji DirectX 11 zapewnia przede wszystkim:
- obsługę sprzętu przez system operacyjny na znacznie niższym poziomie,
- udoskonalenie przetwarzania wielowątkowego,
- nowy, realizowany sprzętowo etap teselacji,
- udoskonaloną kompresję tekstur,
- model cieniowania Shader Model 5.0,
- jednostki obliczeniowe ogólnego zastosowania (ang. Compute Shader).
Ulepszenia dotyczące wielowątkowości zostały wprowadzone zarówno w warstwie sterowników, jak i samego API. Dzięki nim łatwiej będzie programistom zapanować nad przydzielanymi GPU zadaniami w systemach z wielordzeniowymi jednostkami centralnymi, w których poszczególne wątki programu są wykonywane niezależnie na kilku rdzeniach. Pierwszą wprowadzoną w tym celu w DirectX 11 zmianą jest możliwość wywoływania funkcji graficznego API przydzielających zasoby sprzętowe przez wielowątkowy program w sposób asynchroniczny. Drugą modyfikacją jest wprowadzenie rozróżnienia dwóch typów zadań: do natychmiastowego wykonania oraz zadań odroczonych. Te drugie mogą być wykonywane przez GPU później, niemniej przez jednostkę centralną są już przetwarzane „na drugim rdzeniu” i gdy tylko pierwszy z wątków przestaje być wykonywany, są „wpuszczane” do wykonania przez GPU.
Hull i domain shader
Następną istotną nowością są wspomniane zmiany w potoku renderingu. W DirectX 11 wprowadzone zostały trzy nowe, sprzętowo realizowane etapy: hull shader, moduł odpowiedzialny za teselację (teselator) oraz domain shader. Pierwszy, hull shader, przekształca dane wejściowe w taki sposób, że są one traktowane następnie jako siatka powiązanych ze sobą danych wejściowych o różnych częstotliwościach (ang. control mesh frequency). Innymi słowy, ta transformacja zmienia jedną reprezentację powierzchni na drugą, np. z powierzchni opisanej czterowymiarową siatką punktów Catmulla-Clarka na reprezentację opisaną powierzchniami Beziera (ang. Bezier patch) – takie operacje wykonywał dotychczas np. program Blender. Operacja taka pozwala w znacznie bardziej naturalny (realistyczny) sposób przedstawić przedmioty o gładkich, obłych kształtach (tzw. naturalnie gładkie).
Z kolei teselator pozwala na automatyczne – po podaniu odpowiednich wartości – podzielenie danej bryły bądź jej fragmentu (może to być też, rzecz jasna, postać) na mniejszą lub większą liczbę trójkątów. Z im większej liczby trójkątów składa się dany obiekt, tym lepiej jest on odwzorowany. Domain Shader używany jest tylko raz dla każdego generowanego wierzchołka i ustala on dziedzinę argumentów wejściowych dla obliczeń powierzchni parametrycznych.
Kompresja tekstur
Nowe formaty kompresji tekstur BC6 i BC7 zaprojektowane zostały po to, aby poprawić jakość wyświetlanego obrazu HDR (ang. High Dynamic Range) bez spadku szybkości generowania sceny 3D. 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 (ang. Low Dynamic Range). Kompresuje je w proporcji 3:1.
Shader Model 5.0
DirectX 11 wprowadza nowy model cieniowania, Shader Model 5.0. Największą nowością w nim jest to, że używa on pojęć obiektowych i umożliwia wykonywanie obliczeń podwójnej precyzji, co zwiększy dokładność renderingu. Inne nowo wprowadzone kluczowe funkcje SM 5.0 dotyczą wymiany danych między wątkami. Wprowadzono w nim bogaty zestaw wyrażeń pierwotnych, do których można się dostać w sposób losowy (co przydaje się przy losowym generowaniu sceny), oraz zestaw instrukcji odpowiedzialnych za sterowanie strumieniowymi operacjami wejścia-wyjścia. Funkcje te umożliwiają szybsze i prostsze zaimplementowanie wykorzystywanych przy generowaniu scen 3D technik oraz efektów wprowadzanych na etapie postprocessingu, a także pozwalają używać nowych technik, które zostaną zaimplementowane w sprzęcie zgodnym z DirectX 11.
Pierwsze biblioteki SDK DX 11 wraz z obszerniejszą dokumentacją pojawią się w listopadzie. Co ciekawe, NVIDIA zapowiedziała już, że nie będzie wspierać bibliotek DX 10.1, a skoncentruje się wyłącznie na przygotowaniu sprzętu zgodnego z DX 11.