Jakie są różnice i z których warto skorzystać?

Wraz z debiutem systemu operacyjnego Windows 10 w roku 2015, na rynku pojawił się również DirectX 12. Microsoft, wprowadzając tę nową wersję, zapoczątkował nowy etap w rozwoju gier komputerowych, zarówno dla graczy, jak i dla twórców. DirectX 12 szybko zdobył popularność dzięki swojej zdolności do odciążania procesora, jednocześnie zwiększając wydajność karty graficznej.

Czy jednak przeskok wydajności jest tak prosty, jak zmiana ustawień z DirectX 11 na DirectX 12? Przeanalizujmy kluczowe różnice między tymi dwiema wersjami, aby lepiej zrozumieć temat.

Czym jest Microsoft DirectX?

Jak zostało to omówione w artykule o Microsoft DirectX, jest to zbiór interfejsów programowania aplikacji (API), które służą do obsługi funkcji multimedialnych. W szczególności są one wykorzystywane w programowaniu gier na platformach Microsoft, takich jak Windows i Xbox. W celu lepszego zrozumienia kontekstu, przyjrzyjmy się bliżej, czym są interfejsy API.

API umożliwia komunikację pomiędzy dwoma lub większą liczbą programów. Można to porównać do działania telefonu komórkowego. Gdy otrzymujesz wiadomość SMS z listą zakupów, Twój telefon odbiera te dane i je wyświetla. To jest właśnie przykład działania API.

Jakie są różnice między DirectX 11 a DirectX 12?

Jakie są więc kluczowe różnice pomiędzy DirectX 11 i DirectX 12? Najprościej mówiąc, DirectX 12 to najnowsza generacja tego interfejsu. Jedną z najbardziej istotnych zmian jest sposób interakcji ze sprzętem. Większość gier bazujących na DirectX 11 wykorzystuje zaledwie dwa do czterech rdzeni procesora. Jeden z tych rdzeni zazwyczaj wydaje polecenia karcie graficznej.

Pozostałe rdzenie procesora są z kolei wykorzystywane do obsługi różnych, obciążających CPU elementów, takich jak efekty cząsteczkowe czy zasięg widzenia. W odróżnieniu od tego, DirectX 12 rozkłada obciążenie procesora na wiele rdzeni, umożliwiając każdemu z nich jednoczesną komunikację z kartą graficzną.

DirectX 12 wprowadza również nowe, zaawansowane funkcje. Mowa tu o przetwarzaniu asynchronicznym oraz obiektach stanu potoku (PSO). Obliczenia asynchroniczne pozwalają na lepsze wykorzystanie potencjału karty graficznej, umożliwiając jej pracę z wieloma zadaniami równocześnie. W zasadzie odblokowuje to pełną moc Twojego GPU.

Oprócz renderowania grafiki, karta graficzna wykonuje również inne zadania, takie jak uruchamianie algorytmów uczenia maszynowego. W DirectX 11 karta graficzna może wykonywać tylko jedno zadanie naraz, w ustalonej kolejności. Powoduje to spadek wydajności, ponieważ zasoby GPU nie są wykorzystywane w optymalny sposób.

Można to porównać do pracy kelnera w restauracji. Gdy kelner przyjmuje Twoje zamówienie, najpierw pyta o napoje, a dopiero potem o danie główne. Twoje zamówienie jest realizowane krok po kroku. Kelner nie zapyta o deser przed podaniem dania głównego. Chociaż to działa, nie jest tak wydajne, jak mogłoby być.

W kontekście obliczeń, poszczególne zasoby karty graficznej obsługiwałyby każdy element zamówienia kelnera. Dopóki nie dostaniesz napoju, zasoby GPU potrzebne do przyjęcia zamówienia na danie główne pozostaną bezczynne. Dzięki przetwarzaniu asynchronicznemu w DirectX 12, kelner może przyjąć całe zamówienie od razu, podobnie jak w fast foodzie. Maksymalizuje to wykorzystanie zasobów karty graficznej i zwiększa wydajność w grach.

W DirectX 12 wprowadzono także obiekty stanu potoku (PSO). W DirectX 11, gdy geometria gry jest przesyłana do karty graficznej w celu renderowania, różne ustawienia sprzętowe odpowiadają za interpretację i renderowanie tych danych. Mówimy tu o potoku graficznym, czyli przepływie danych podczas generowania klatek przez kartę graficzną. Potok graficzny w DirectX 11 nie jest jednak idealny.

Ten potok zawiera szereg różnych stanów, takich jak stan rasteryzacji, mieszania czy szablon głębi. W DirectX 11 te stany są od siebie zależne. W konsekwencji, kolejny stan nie może być ukończony, dopóki poprzedni nie zostanie zdefiniowany. Ogranicza to wykorzystanie karty graficznej i zwiększa obciążenie procesora kosztem wydajności.

W celu rozwiązania tego problemu, w DirectX 12 wprowadzono PSO, czyli obiekty opisujące stan całego potoku graficznego. Obiekty PSO są jak butelka zawierająca różne stany i elementy potrzebne do stworzenia obrazu. Pozwala to karcie graficznej wstępnie przetworzyć każdy zależny stan, zamiast ciągłego przeliczania stanów w oparciu o aktualny potok graficzny.

Zmniejsza to obciążenie procesora, które było obecne w DirectX 11 i poprawia wydajność. Jak to się przekłada na konkretne rezultaty? Według Microsoftu, DirectX 12 redukuje obciążenie procesora nawet o 50% i zwiększa wydajność karty graficznej nawet o 20%. Choć są to znaczące ulepszenia, nie oznacza to, że każdy użytkownik odnotuje takie same wyniki.

Dlaczego przejście z DirectX 11 na DirectX 12 nie jest proste?

DirectX 11 został udostępniony po raz pierwszy dla systemu Windows Vista 27 października 2009 roku. Między premierą DirectX 11 a DirectX 12 w roku 2015 minęło więc sześć lat. W tym okresie powstały tysiące gier, które wykorzystywały DirectX 11. Niestety, migracja z DirectX 11 na DirectX 12 nie jest łatwa.

DirectX 11 to API wysokiego poziomu. W uproszczeniu, API wysokiego poziomu są łatwiejsze w użyciu dla programistów. Rezultatem są gry stabilne, dopracowane i grywalne. Z kolei DirectX 12 to API niskiego poziomu i zupełnie inna platforma niż DirectX 11. Daje on programistom możliwość dokładnego dostrajania optymalizacji na poziomie szczegółowym, ale jego obsługa wymaga znacznie większej wiedzy.

Gra, która jest stworzona w DirectX 12, może finalnie działać gorzej, w zależności od tego, jaką wiedzę posiada deweloper na temat tego API. Chociaż DirectX 12 oferuje wiele usprawnień, ich wdrożenie zależy od umiejętności programisty. Z tego powodu wielu twórców gier preferuje korzystanie z API wysokiego poziomu, takiego jak DirectX 11.

DX 11 kontra DX 12: Który wybrać?

Odpowiedź na to pytanie jest zależna od kilku czynników, takich jak gra, którą chcesz uruchomić. Na przykład, Guild Wars 2 korzysta z DirectX 11. Nawet jeśli Twój system operacyjny i sprzęt obsługują DirectX 12, nie będziesz miał możliwości wyboru DirectX 11 w Guild Wars 2, ponieważ gra tego nie obsługuje. Jest to decyzja wyłącznie dewelopera, firmy ArenaNet.

Źródło obrazu: Martin Kerstein/Wojny Gildii 2

ArenaNet potrzebowało aż dziewięciu lat, aby przejść z DirectX 9 na DirectX 11. Niektóre gry obsługują jednak zarówno DirectX 11, jak i DirectX 12, w tym między innymi Fortnite, Battlefield 5, czy Shadow of the Tomb Raider. Użytkownicy tych gier mogą przełączać się pomiędzy tymi wersjami w ustawieniach gry.

Fakt, że niektóre gry obsługują obie wersje, może wzbudzać pytania o ich wydajność. Czy wybór DX 11 lub DX 12 przekłada się na lepsze osiągi w grach? Poniższy film przedstawia porównanie DirectX 11 i DirectX 12 w różnych grach, analizując parametry, takie jak średnia liczba klatek na sekundę, użycie procesora, karty graficznej, i inne. Testy zostały przeprowadzone na komputerze z procesorem AMD Ryzen 3600, kartą graficzną Nvidia GeForce RTX 3060 Ti i 16 GB pamięci RAM DDR4.

Wyniki są zaskakujące pod wieloma względami. Czasem nie widać znaczącej różnicy wizualnej pomiędzy DX 11 i DX 12, pomimo wielu lat, które dzielą obie te technologie. Można zauważyć różnice w obciążeniu procesora i karty graficznej pomiędzy tymi wersjami DirectX. W większości przypadków, gry w wersji DX 12 zużywają mniej zasobów niż te same tytuły w starszej wersji DX 11.

Oprócz wsparcia w grze, wybór pomiędzy DirectX 11 a DirectX 12 zależy również od posiadanego sprzętu. Niemal wszystkie nowoczesne karty graficzne obsługują DirectX 12, czego nie można powiedzieć o starszych modelach, takich jak Radeon HD 4870. Ta karta graficzna, która została wydana w 2008 roku, obsługuje jedynie DirectX 10. Oznacza to, że nie jest w stanie uruchomić większości współczesnych gier, które działają na DirectX 11 lub DirectX 12.

Czy DirectX 12 jest dla Ciebie odpowiedni?

Podsumowując, przejście z DirectX 11 na DirectX 12 nie jest tak oczywiste, jak mogłoby się wydawać. Wiele zależy od czynników, takich jak sprzęt, oprogramowanie, system operacyjny i to, czy gra w ogóle obsługuje obie wersje. Wszystkie te kwestie należy wziąć pod uwagę przed podjęciem decyzji. Ten sam problem będzie prawdopodobnie dotyczył również kolejnych generacji DirectX.