artykuły

Variable Rate Shading – zgrubne cieniowanie w DirectX i nowych konsolach

31
16 kwietnia 2020, 14:01 Mateusz Brzostek

Wygładzanie krawędzi i multipróbkowanie

Próbki pokrycia służą do odtworzenia kształtu obiektu, który ma zostać wyświetlony. Jeśli chcemy odtworzyć kształt przedmiotu dokładniej, trzeba wziąć pod uwagę więcej próbek pokrycia. Na tym polegają najskuteczniejsze techniki wygładzania krawędzi: geometria sceny jest obliczana w większej liczbie miejsc, niż liczba pikseli w docelowym obrazie.

Najstarsza technika wygładzania krawędzi – supersampling (SSAA)– polegała na sprawdzaniu i pokrycia, i koloru w kilku punktach, z których wyniki składały się na jeden piksel obrazu. Na przykład SSAA ×4 wymaga obliczenia pokrycia i koloru cztery razy dla każdego piksela obrazu, który chcemy uzyskać. To nieznacznie różni się od renderowania w dwukrotnie wyższej rozdzielczości. Tę technikę możecie pamiętać np. z Wiedźmina 2, gdzie nazywała się Ubersampling.

Przez długie lata standardem w grach pecetowych była technika MSAA, w której kolor obliczany jest w jednym miejscu, a pokrycie – w kilku. MSAA ×4 sprawdza geometrię w 4 miejscach, a kolor – w jednym.

Ilustracja poglądowa – w praktyce wykorzystuje się bardziej nieregularnie rozłożone próbki, umieszczone w miejscach odpowiadających rozwiązaniom problemu ośmiu hetmanów.

Pikselowi obrazu nadaje się kolor proporcjonalnie do policzonego w jednym miejscu koloru i liczbie próbek pokrycia, które „trafiły” w obiekt o tym kolorze. W tym przypadku wszystkie próbki koloru dały ten sam wynik. W zależności od liczby próbek pokrycia, które „trafiły” w zielony trójkąt wynikowe piksele są mniej lub bardziej zielone. Na przykład pierwszy od lewej piksel jest w 1/4 pokryty kolorem trójkąta, a ten odpowiadający górnemu wierzchołkowi – w 3/4:

Wygładzanie krawędzi MSAA ×2, ×8 czy ×16 ma tyle samo próbek koloru, ale więcej próbek pokrycia.

We współczesnych grach popularne są postprodukcyjne techniki wygładzania krawędzi, które nie wykorzystują żadnych dodatkowych informacji o geometrii – operują na obrazie już „spłaszczonym” i poddanym rasteryzacji. Niektóre (MLAA, SMAA) próbują „domyślić” się, gdzie dokładnie przebiegają krawędzie. Inne polegają na próbkowaniu w różnych miejscach w kolejnych klatkach, i wykorzystywaniu informacji z poprzednich klatek.

Techniki wygładzania krawędzi można sklasyfikować w ten sposób:

 na jeden piksel przypada:
 próbki pokryciapróbki kolorupróbki pochodzą z
natywna rozdzielczość
bez wygładzania krawędzi
1 1
SSAA (supersampling) 2 lub więcej tyle samo, co próbek pokrycia różnych miejsc
MSAA 2 lub więcej 1 różnych miejsc
FXAA, MLAA, SMAA 1 1
TAA 2 lub więcej 1 lub więcej różnych klatek
przeplot szachownicowy
(checkerboard rendering)
1 1 różnych klatek
skalowanie rozdzielczości mniej niż 1 mniej niż 1
Nvidia DLSS
(rekonstrukcja przez SI)
mniej niż 1 mniej niż 1
VRS
zgrubne cieniowanie
1 mniej niż 1 różnych miejsc

Jedna aktualna próbka pokrycia i jedna próbka koloru na jeden piksel ekranu to pewien punkt odniesienia w jakości obrazu. Jeśli próbek jest mniej, jakość jest zwykle gorsza. Jeśli jest ich więcej, jakość jest zwykle lepsza. Jeśli próbki pochodzą z różnych klatek – tak jak w TAA albo przeplocie szachownicowym z rekonstrukcją temporalną – to nieruchomy obraz może być tak dobry, jak to wynika z liczby próbek składających się na jeden piksel, ale ruchomy obraz jest niższej jakości i obarczony artefaktami.

Skalowanie rozdzielczości oraz Nvidia DLSS służą do powiększania obrazu i pobierają z najnowszej klatki obrazu mniej informacji, niż renderowanie w natywnej rozdzielczości – żeby rywalizować jakością z natywną rozdzielczością lub ją przewyższyć muszą zostać połączone z jakimś rodzajem rekonstrukcji temporalnej, który daje te dodatkowe informacje.  

Znając informacje, jakimi dysponują poszczególne techniki, można spróbować domyślić się, jaka jest ich skuteczność. Najlepsze odwzorowanie geometrii, w tym odwzorowanie subpikselowych detali (czyli takich, które są mniejsze, niż odstęp między środkami pikseli) zapewniają tylko te techniki, które mają dodatkowe informacje o geometrii. Z obrazu już poddanego rasteryzacji nie da się odzyskać subpikselowych detali: potrzebne są informacje pozyskane z obecnej klatki (dodatkowe próbki pokrycia) albo przeniesione z poprzednich klatek, w których zostały pozyskane w innym miejscu. W technikach temporalnych (TAA, przeplot szachownicowy) sprawdza się pokrycie i kolor pikseli mniej razy w jednej klatce niż w SSAA, ale w każdej kolejnej klatce w innym miejscu. Informacje z poprzednich klatek są podawane dalej. W ten sposób jeśli jakiś obiekt był widoczny w poprzedniej klatce, to w obecnej jest o nim więcej informacji, niż wynika z liczby próbek na klatkę.

TAA×2

Jedna z możliwych implementacji TAA ×2: próbki pokrycia odpowiadają tym z techniki MSAA ×2, ale jedna pochodzi z obecnej klatki, a jedna z poprzedniej.

Przeplot szachownicowy TX×2

Podstawowa implementacja przeplotu szachownicowego: próbki koloru i pokrycia są obliczane tylko dla co drugiego piksela. Połowa pikseli jest wyświetlana za pomocą informacji z obecnej klatki, a połowa – z poprzedniej.

2