artykuły

Variable Rate Shading – zgrubne cieniowanie w DirectX i nowych konsolach

31
16 kwietnia 2020, 14:01 Mateusz Brzostek

VRS w nowych procesorach graficznych i nowych API

Zgrubne cieniowanie można zrealizować sposobami programowymi. Inżynierowie Intela eksperymentowali ze zgrubnym cieniowaniem za pomocą MSAA i specjalnych shaderów w 2014 roku, używając API DirectX 11 i układów graficznych Gen8 (Haswell, Broadwell)Jednymi z pionierów i autorami kilku patentów w dziedzinie zgrubnego cieniowania są pracownicy centrum badawczego Intela w Gdańsku.. VRS daje najlepsze efekty i wymaga najmniejszych zmian programistycznych, jeśli jest wspomagane sprzętowo i dostępne za pośrednictwem jednego z nowych interfejsów programistycznych (API).

VRS jest jedną z funkcji sprzętowych dostępnych za pośrednictwem DirectX 12. Urządzenie kompatybilne z API DirectX 12 może przedstawiać się jako zgodne z:

  • VRS, poziom 1 – zgrubne cieniowanie poszczególnych draw calli – każde polecenie rysowania ma określoną rozdzielczość cieniowania.
  • VRS, poziom 2 – zgrubne cieniowanie w trybie mapy ekranu, dla każdego polecenia rysowania lub dla każdej bryły osobno – te tryby mogą być łączone.

Oba poziomy wymagają tylko zgrubnego cieniowania o połowie (1×2 lub 2×1) i jednej czwartej (2×2) rozdzielczościWłaściwie wymagane jest tylko, żeby procesor graficzny przyjmował od API prośby o cieniowanie w niskiej rozdzielczości – nie musi ich realizować. Nie ma to praktycznego znaczenia, bo wszystkie znane nam GPU z dowolnym poziomem VRS obsługują wszystkie rozdzielczości cieniowania.. Dodatkowe opcjonalne funkcje DirectX 12 określają, czy GPU obsługuje jeszcze mniejsze rozdzielczości cieniowania: jeden raz na osiem (2×4 lub 4x2) albo na szesnaście (4×4) pikseli. 

Najbardziej uniwersalną i najbogatszą funkcjonalność VRS oferują procesory graficzne Nvidia Turing. VRS można na nich wykorzystać w DirectX 12 za pomocą uniwersalnego, nie przywiązanego do żadnego producenta GPU rozszerzenia, a w DirectX 11, OpenGL i Vulkan – za pomocą NVAPI i działających tylko na GPU Nvidii rozszerzeń API.

VRS określone osobno dla każdego polecenia rysowania obsługują również układy graficzne Intel Gen11, czyli te wbudowane w procesory Ice Lake. Są zgodne z VRS poziomu 1 i obsługują wszystkie zmniejszone rozdzielczości cieniowania od 1×1 do 4×4. 

Nadchodzące procesory graficzne i API

Oczekujemy, że wszystkie nadchodzące architektury pecetowych układów graficznych będą obsługiwały VRS poziomu 2:

  • AMD RDNA2 – oczekiwane wsparcie w ramach DirectX 12
  • Intel Xe – oczekiwane wsparcie w ramach DirectX 12
  • Xbox Series X – oczekiwane wsparcie
  • PlayStation 5 – oczekiwane wsparcie

Oczywiście wsparcie VRS w nowych konsolach będzie możliwe za pośrednictwem właściwych dla nich API.

Pozostałą niewiadomą jest dodanie VRS do standardu Vulkan. Najnowsza wersja – Vulkan 1.2 – zawiera tylko zaproponowane przez Nvidię rozszerzenia VRS, działające wyłącznie na sprzęcie Nvidii. Spodziewamy się, że tak samo jak rozszerzenia związane ze śledzeniem promieni (VK_KHR_ray_tracing) zostaną one „awansowane” do rangi standardu i zaadaptowane na potrzeby wszystkich producentów GPU. Przykład DirectX pozwala sądzić, że jest już pewien konsensus pomiędzy producentami GPU i twórcami oprogramowania, i pozostały już tylko przeszkody proceduralne.

5