Oprogramowanie

Ograniczenia DirectX 9

Zanim zaczniemy mówić o nowościach w DirectX 10, powinniśmy zrozumieć na czym polega i jak działa DirectX 9. Mimo, że DirectX 9 stanowił olbrzymi krok naprzód w porównaniu do 'ósmeki', wciąż miał swoje ograniczenia.

Jednym z największych i najbardziej dotkliwych ograniczeń jest API 'object overhead' (narzut obiektów API). W rzeczywistości twórcy gier są ograniczani przez owy narzut. Spośród wszystkich poprawek i udoskonaleń, które mogły być wprowadzone do DirectX 10, sprawą najwyższej wagi dla większości producentów gier było zmniejszenie 'object overhead'.

Przez API 'object overhead' rozumiemy proces, w którym API wykorzystuje cykle procesora, aby wykonać zadania wymagane do renderowania zanim zostaną one przesłane do karty wideo i narysowane. Zanim API w ogóle wejdzie w interakcję z GPU karty graficznej podczas renderowania gry, aplikacja musi najpierw odwołać się do API, a ten do sterowników. Wszystkie te odwołania obsługiwane są przez CPU przy wykorzystaniu cennych zasobów co wywołuje potencjalne spowolnienie procesu.

czas wykonania w przypadku DirectX 9


i czas wykonania w przypadku DirectX 10

W skład tych procedur wchodzą ograniczenia dotyczące liczby obiektów, które mogą być wyświetlone równocześnie w jednej klatce na ekranie. W grze obiekt może stanowić cokolwiek. Może to być postać lub na przykład drzewo. Obecne ograniczenia przewidują do 500 obiektów w jednej klatce. Jeśli limit ten zostanie przekroczony będziemy mieli do czynienia z poważnym korkiem. Twórca musi zręcznie żonglować obiektami w grze, tak aby ich limit nie został przekroczony i nie zostały one zahamowane przez ograniczenia w oprogramowaniu i procesorze.

Niesie to ze sobą szerokie limity w doznaniach oferowanych przez grę. Weźmy pod lupę dla przykładu drzewa. W chwili obecnej większość drzew tworzy się poprzez kopiowanie przykładowego egzemplarza; możliwa jest też zmiana jego koloru i liczby liści. Tak tworzy się lasy. Ograniczeniem w tym momencie jest fakt, że nie da się wyświetlić tysięcy różnych drzew w jednej klatce w czasie rzeczywistym. DirectX 10 zniesie to ograniczenie.

przykładowy poziom ilości obiektów w jednej scenie, w nadchodzącej grze zgodnej z DX10 - World in Conflict

Na ilustracjach poniżej można zobaczyć w jaki obiekt jest przekazywany z aplikacji do API, a następnie do sterownika.

W czasie swojej podróży niesie on ze sobą pewien narzut (overhead). Narzut ten wydłuża czas wykonania, co w praktyce oznacza mniejszą wydajność. Problem ten jest potocznie zwany 'Small Batch Problem', czyli problemem małych porcji.

Ograniczenia architektury ustalonego przetwarzania potokowego shadera

Kolejnym ograniczeniem związanym z DirectX 9 i obecnymi procesorami graficznymi, jest natura ustalonych ścieżek przetwarzania potokowego. W GPU przetwarzanie vertexów i pikseli jest oddzielone za pomocą odkreślonej liczby procesorów przeznaczonych dla obu. Dla przykładu, w obecnej technologii X1900 XTX jest 8 ustalonych jednostek vertex i 48 ustalonych jednostek przetwarzania pikseli. W przypadku tej architektury można popaść w tarapaty w scenach, które wymagają dużej mocy obliczeniowej dla vertexów, szczególnie jeżeli ma się do dyspozycji tylko 8 jednostek.

tradycyjny GPU z ustalonymi jednostkami Vertex i Pixel Shader:
czasami może 'marnować' się moc jednostek Pixel, a czasami nie są wykorzystywane wszystkie jednostki Vertex Shader

Powszechnym zjawiskiem we współczesnych grach staje się takie konstruowanie poszczególnych scen, aby miały one duże wymagania przetwarzania pikseli i vertexów. Przy obecnych ograniczeniach sprzętu, silnik vertex może być niemiłosiernie obładowany (w obszernych w vertexy sceneriach) podczas gdy procesory pixel shader będą bezczynne. Może też mieć miejsce odwrotna sytuacja, w której scena wymaga wielu obliczeń pixel shader, a jednostki vertex nie mają nic do roboty. Powstaje przez to niewyważony silnik przetwarzania. Nadchodzące tytuły będą miały coraz więcej scen, które wykorzystują dużą liczbę przetwarzania zarówno vertex shaderów jak i pixel shaderów.