Ray tracing – co to jest i jak wpływa na grafikę?

Jeśli po włączeniu ray tracingu w grze licznik klatek leci z 90 na 45, a na screenach trudno znaleźć różnicę, problem zwykle leży w nieznajomości tego, co ta technologia faktycznie liczy. W takiej sytuacji łatwo przepłacić za kartę graficzną albo wyłączyć coś, co w danej grze robi robotę. Ray tracing to sposób obliczania światła, który zamiast je udawać, symuluje jego zachowanie. Poniżej wyjaśnienie, jak to działa, gdzie widać efekt i które ustawienia zjadają najwięcej wydajności.

Na czym polega ray tracing

Przez dekady gry korzystały z rasteryzacji. Trójwymiarowa scena jest w niej rzutowana na płaski ekran, a oświetlenie, cienie i odbicia dorabia się trikami: wstępnie wypieczonymi mapami światła, mapami cieni czy sześciennymi mapami otoczenia. Działa to szybko i potrafi wyglądać świetnie, ale to zawsze zestaw sprytnych oszustw.

Ray tracing (śledzenie promieni) podchodzi do sprawy odwrotnie. Dla każdego piksela sprawdza się, w co trafia promień światła, od czego się odbija i jak oświetlona jest ta powierzchnia. Wynik jest bliższy temu, co dzieje się w rzeczywistości, a nie temu, co twórcy gry zdołali zasymulować skrótami.

Jak to działa pod maską

Promienie i przecięcia z geometrią

Z kamery wysyłany jest promień przez każdy piksel obrazu. Karta sprawdza, który trójkąt w scenie promień trafia jako pierwszy. Z tego punktu wysyłane są kolejne promienie: w stronę źródeł światła, żeby ustalić, czy punkt jest w cieniu, oraz w kierunku odbicia, jeśli powierzchnia jest błyszcząca.

Scena w grze składa się z milionów trójkątów, więc sprawdzanie każdego z osobna byłoby niewykonalne. Dlatego geometria jest porządkowana w hierarchię brył otaczających (BVH). To drzewo pudełek pozwala szybko odrzucać całe obszary sceny, przez które promień na pewno nie przechodzi.

Samo przeszukiwanie takiej struktury i liczenie przecięć to zadanie dla wyspecjalizowanych jednostek w karcie. Pierwsze konsumenckie karty z dedykowanym sprzętem do tego pojawiły się w 2018 roku. Wcześniej ray tracing istniał, ale głównie w filmach i wizualizacjach, gdzie jedna klatka potrafiła się liczyć godzinami.

Promienie w praktyce wysyła się od kamery, nie od lampy. Z żarówki w pokoju wychodzą miliardy promieni, a do oka trafia ich znikomy ułamek. Śledzenie ich „od końca” pozwala liczyć tylko te, które mają wpływ na obraz.

Szum i denoising

Gra w czasie rzeczywistym ma budżet rzędu kilkunastu milisekund na klatkę. Wystarcza to na zaledwie jeden lub kilka promieni na piksel, podczas gdy do czystego obrazu potrzeba ich setek. Surowy wynik jest więc mocno ziarnisty.

Z tego powodu każda implementacja ray tracingu w grach opiera się na odszumianiu. Algorytm bierze rzadkie próbki, uśrednia je w czasie z poprzednich klatek i w przestrzeni z sąsiednich pikseli, a potem wygładza obraz. Od jakości denoisera zależy, czy odbicia wyglądają czysto, czy „pływają” i rozmywają się przy ruchu.

Stąd bierze się część różnic między grami. Dwie produkcje z formalnie tym samym efektem mogą wyglądać zupełnie inaczej, bo jedna ma dopracowane odszumianie, a druga zostawia smugi i opóźnione reakcje oświetlenia.

Warto też odróżnić zwykły ray tracing od path tracingu. Ten drugi śledzi całe ścieżki światła z wieloma odbiciami i zastępuje większość klasycznych technik. Wygląda najbardziej realistycznie, ale kosztuje tyle, że w grach pojawia się dopiero jako tryb dla najmocniejszych kart.

Co zmienia w obrazie

Odbicia i cienie

Odbicia to efekt, który widać najszybciej. Klasyczna technika odbić w przestrzeni ekranu pokazuje tylko to, co aktualnie znajduje się na ekranie. Gdy odwrócić kamerę od kałuży, odbicie budynku za plecami po prostu znika. Ray tracing odbija także obiekty spoza kadru, więc kałuże, szyby i lakier samochodów zachowują się spójnie.

Cienie wyglądają przy tym naturalniej. Ostrość krawędzi zależy od odległości od obiektu: tuż przy nodze krzesła cień jest wyraźny, dalej coraz bardziej miękki. Mapy cieni potrafią to udawać, ale kosztem artefaktów, schodków i znikających cieni małych obiektów.

Dochodzą przezroczystości i szkło. Promień może przejść przez okno, załamać się i dopiero potem trafić w powierzchnię, więc szyba jednocześnie odbija i przepuszcza światło, czego rasteryzacja prawie nie robi poprawnie.

Różnica jest największa w scenach z wieloma błyszczącymi powierzchniami: mokre ulice nocą, wnętrza z lustrami, miasta pełne szkła. W pogodnym lesie z matowymi teksturami efekt bywa niemal niewidoczny.

Globalne oświetlenie

Najciekawsze zmiany dotyczą światła pośredniego. W prawdziwym świecie czerwona ściana lekko barwi stojący obok biały przedmiot, a promień słońca wpadający przez okno rozjaśnia cały pokój, odbijając się od podłogi. To właśnie globalne oświetlenie.

Wcześniej scenę oświetlano statycznie, z wypieczonymi mapami światła. Dopóki wszystko stało w miejscu, wyglądało dobrze. Gdy jednak w grze zmieniała się pora dnia albo ruszała się lampa, oświetlenie albo się nie aktualizowało, albo wymagało drogich obejść.

Przy ray tracingu światło reaguje na zmiany na bieżąco. Otwarte drzwi wpuszczają jasność do ciemnego korytarza, a latarka odbija się od ścian i delikatnie rozświetla okolicę. Pomaga to również twórcom, bo nie muszą ręcznie ustawiać dziesiątek sztucznych świateł wypełniających.

Do tej grupy należy też okluzja otoczenia, czyli przyciemnianie zakamarków i styków obiektów. Z ray tracingiem wygląda to przekonująco, a nie jak ciemna obwódka przy krawędziach.

Ile to kosztuje wydajnościowo

Nie wszystkie efekty obciążają kartę tak samo. Włączenie ray tracingu bywa kosztem od kilkunastu do kilkudziesięciu procent klatek, w zależności od gry i liczby aktywnych efektów. Najwięcej pochłaniają globalne oświetlenie i odbicia, a najmniej zwykle cienie.

Przy ustawianiu opcji zwykle sprawdza się taka kolejność:

  • Odbicia i globalne oświetlenie dają największą różnicę w obrazie, więc w pierwszej kolejności warto zostawić właśnie je.
  • Cienie z ray tracingu przynoszą mniejszy zysk wizualny, a często obniżają wydajność, więc nadają się do wyłączenia jako pierwsze.
  • Jakość lub liczba promieni na piksel zwykle ma sens na poziomie średnim. Wyższe ustawienia kosztują dużo, a poprawiają głównie szczegóły widoczne dopiero na zbliżeniach.
  • Rozdzielczość najlepiej obniżać przez skalowanie, a nie przez rezygnację z efektów.

Sprzęt i skalowanie obrazu

Ray tracing bez technik upscalingu w praktyce nie istnieje. DLSS, FSR czy XeSS renderują grę w niższej rozdzielczości i rekonstruują obraz do docelowej. Zmniejsza to liczbę pikseli, a tym samym promieni do policzenia. Całość zwykle daje się zagrać płynnie przy rozsądnym spadku jakości.

Obsługa sprzętowa jest dziś standardem w nowych kartach graficznych od trzech głównych producentów, a także w obecnych konsolach. Konsole mają jednak skromniejszą moc, więc ray tracing jest tam zwykle ograniczony do pojedynczych efektów albo trybów kosztem klatek.

Przy wyborze karty do ray tracingu liczy się nie tylko surowa moc, ale i ilość pamięci. Włączone efekty zwiększają zapotrzebowanie na VRAM, więc karta, która „ma moc”, ale brakuje jej pamięci, zacznie się dławić w wysokich rozdzielczościach.

Czy warto go włączać

Zależy od gry i od tego, ile klatek jest do stracenia. W tytułach z dopracowaną implementacją i dynamicznym oświetleniem różnica jest wyraźna i trudno wrócić do klasycznego trybu. W grach sieciowych, gdzie liczy się płynność i niski czas reakcji, ray tracing zazwyczaj ląduje na liście wyłączonych opcji.

Dobry test jest prosty: porównać tę samą scenę z włączonym i wyłączonym efektem w miejscu z dużą ilością odbić. Jeśli na tle strat w płynności różnica nadal jest wyraźna, można zostawić. Jeśli trzeba jej szukać, lepiej oddać te klatki płynności.