Gry będą działać szybciej na tym samym sprzęcie dzięki nowej wersji DirectX 12
Microsoft zapowiedział właśnie uaktualnienie swoich multimedialnych API, słusznie kojarzonych głównie z tworzeniem gier. DirectX 12 otrzymał obsługę techniki variable shading rate, co w teorii zmniejszy wymagania sprzętowe gier.
Shadery to relatywnie proste programy, którymi posługuje się karta graficzna podczas generowania klatki obrazu. Opisują one właściwości pikseli i wierzchołków wieloboków, pozwalając przez pewne uproszczenia na uzyskanie znacznie bardziej realistycznych efektów niż tradycyjne – i możliwe do zastosowania w kartach graficznych o dzisiejszej mocy obliczeniowej – metody polegające na tradycyjnym generowaniu geometrii sceny i jej oświetlaniu.
Shadery przetwarzają każdy piksel na ekranie, by określić jego kolor wynikowy. Ze względów wydajnościowych, pracują one często w innych rozdzielczościach niż sam obraz. Parametr ten nazywa się shading rate. Im wyższy, tym obraz końcowy jest wyższej jakości, ale też stanowi większe wyzwanie dla procesora graficznego. I, rzecz jasna, odwrotnie.
Shading rate to sztywny parametr. DirectX 12 to zmieni.
Zapowiedziana przez Microsoft nowość umożliwia twórcom gier na selektywne determinowanie shading rate na poszczególnych obszarach obrazu. Inżynierowie Microsoftu wyszli z całkiem słusznego założenia, że – tu cytat z bloga firmy – piksel pikselowi nierówny. Wyższa rozdzielczość działania shaderów jest absolutnie zbędna w miejscach, w których gracz i tak nie dostrzeże żadnej różnicy.
Programiści mogą więc definiować obszary, na których z powodzeniem można obniżyć wartość shading rate a także odwrotnie: znacząco zwiększać dokładność shaderów w miejscach, gdzie to ma sens. Efektem tego działania ma być ta sama lub nawet wyższa jakość obrazu przy zauważalnie niższym obciążeniu dla procesora graficznego.
No dobrze, a jak to wygląda w praktyce? Ile wydajności zyskamy dzięki DirectX 12 Varable Shading Rate?
Wiele zależy od implementacji. Deweloperzy mogą, w zależności od potrzeb i sprzętu pod który projektowana jest gra, stosować kilka wersji tego triku (przy czym poszczególne jego implementacje można stosować równolegle), co ze szczegółami Microsoft opisuje na swoim blogu.
Microsoft za przykład podaje grę strategiczną Civilization 6 studia Firaxis, uruchomioną na układzie graficznym GeForce RTX 2060 w rozdzielczości 4K. Bez implementacji obsługi VRS w jej kodzie źródłowym, gra działała w okolicach 53 klatek na sekundę.
Implementacja VRS w formie, która skutkuje nieznacznymi spadkami w jakości obrazu osiągnięto 20-procentowy wzrost wydajności. Dla porównania, lewa strona ekranu to gra przed implementacją VRS, prawa wykorzystuje VRS.
Tu widzimy z kolei VRS bez dostrzegalnych różnic w jakości ekranu (dla zmyłki, odwrotnie, tym razem to lewa strona ekranu przedstawia grę z włączonym VRS). Tym razem osiągnięto 14-procentowy wzrost wydajności.
Na implementacje w grach musimy jeszcze poczekać. Chociażby z uwagi na sprzęt, jaki posiadają gracze.
DirectX 12 VRS na razie jest obsługiwany wyłącznie przez sprzęt Nvidii. Ma też się pojawić w układach graficznych Intela przewidzianych na ten rok. Co ciekawe, Microsoft nie wspomina nic o układach graficznych firmy AMD, obecnych w kartach graficznych Radeon oraz konsolach z rodziny Xbox i PlayStation. Poprosiłem firmę AMD o komentarz, czekam na odpowiedź.
Sam pomysł wydaje się jednak dobry. Podobnie uważają studia deweloperskie, które już zapowiedziały implementację DirectX 12 VRS do swoich produktów. Należą do nich Unity, Activision, Ubisoft, Epic Games, 343 Industries, Massive Entertainment, Playground Games, Stardock, IO Interactive i Turn 10.