Piotr Gołąb | 1 maja 2018, 09:00

Jak to działa? Raytracing i techniki oświetlenia globalnego

Czy nadchodzi nowa jakość?

Rozwój grafiki komputerowej nierozerwalnie łączy się z ewolucją towarzyszącego mu sprzętu. Nvidia podczas konferencji na tegorocznym GDC pochwaliła się postępami prac nad rozwojem oprawy wizualnej. Okazało się, że nowa generacja kart graficznych Volta będzie obsługiwać technikę raytracingu. W tym materiale postaramy się przybliżyć Czytelnikom, czym jest raytracing i czy mamy szansę zobaczyć dzięki niemu niezwykłe efekty w nadchodzących grach.

Nvidia na ostatniej konferencji GDC 2018 odświeżyła w pamięci wielu osób pojęcie raytracingu, kiedy to poinformowała, że poświęci mu więcej uwagi. Warto więc wiedzieć, czym jest raytracing i czego można się spodziewać po Nvidii.

Raytracing jest techniką dynamicznego oświetlenia w grafice komputerowej. Do tej pory był wykorzystywany głównie przez profesjonalistów do tworzenia fotorealistycznej grafiki komputerowej w produkcjach filmowych i wizualizacjach architektonicznych. W grach, ze względu na bardzo duże zapotrzebowanie na moc obliczeniową, nie był dotychczas stosowany. Preferowano prostsze oświetlenie, w którym cienie, odbicia oraz światła były wyliczane statycznie.

Raytracing

Do generowania sceny 3D wykorzystuje się śledzenie dróg światła z kamery i na tej podstawie generuje płaski obraz, wyświetlany później na ekranie komputera. 

Diagram na górze pokazuje, jak tworzona jest scena z użyciem raytracingu. Jest to pełny model, w którym zastosowano algorytm rekurencyjny.

  • Promienie główne (czerwone) zawsze są prowadzone jako pierwsze z punktu, w którym obserwujemy scenę.
  • Następnie wyszukiwane są najbliższe punkty przecięcia tych promieni z obiektami w scenie.
  • Dla każdego źródła światła zdefiniowanego w scenie wyznaczana jest jasność w punkcie padania, zgodnie z określonym modelem oświetlenia (np. Warda czy Phonga; o modelach oświetlenia powiemy w dalszej części, przy czym uwzględnimy tylko te najpopularniejsze).
  • Określa się także cienie. W tym celu jest sprawdzana widoczność źródła światła w danym punkcie, tj. czy światło nie jest przesłaniane przez jakiś obiekt (w celu sprawdzenia, czy obiekt jest zacieniony, z punktów odbicia promieni głównych prowadzone są promienie zacienienia w stronę źródeł światła), i jeśli nie, dopiero wtedy obliczana jest jasność punktu dla tego źródła.

W algorytmie rekurencyjnym dochodzi jeszcze jeden warunek:

Jeśli punkt przecięcia należy do obiektu odbijającego światło lub przezroczystego, wysyłane są z tego punktu promienie wtórne. Są to, odpowiednio, promień odbity (na wykresie ciemnozielony), wyliczany na podstawie kąta padania światła i różnego rodzaju odbić, np. Fresnela, jak również na podstawie parametru IOR (ang. index of refraction), oraz promień załamany (na wykresie ciemnoniebieski), wyliczany tylko na podstawie parametru IOR. Dodatkowo dla tych punktów wyliczana jest połyskliwość, blask (na wykresie małe strzałki zielone i niebieskie; im większe rozproszenie strzałek tym większa połyskliwość).

raytracingoświetlenie lokalne

Dla szybkiego porównania przedstawiam dwie sceny. W jednej wykorzystano oświetlenie globalne i raytracing (po lewej), w drugiej wykorzystano oświetlenie lokalne (ten rodzaj oświetlenia jest stosowany głównie w grach komputerowych). W razie użycia oświetlenia lokalnego nie są liczone odbicia promieni światła od otoczenia

Raytracing jest bardzo kosztowny obliczeniowo. Liczba promieni, które są obliczane, zależy od rozdzielczości wyświetlanego obrazu. Jeszcze bardziej jednak na stopień skomplikowania obliczeń wpływa złożoność sceny, tj. liczba obiektów oraz ich budowa.

Oczywiście, raytracing ma wady. Ponieważ operuje na pojedynczych promieniach, ma problemy z poprawnym modelowaniem rozproszenia światła (dyfrakcji), jak i rozszczepienia, np. na pryzmacie. Nie uzyskamy też efektów zjawisk falowych, takich jak aberracja fotochromatyczna. Na potrzeby tych efektów stworzono dodatkowe techniki, które współdziałają z technikami śledzenia promieni i uzupełniają brakujące efekty. Do tych rozwiązań należą: metoda energetyczna  (ang. radiosity), w której wykorzystuje się mapy wypromieniowania (ang. irradiance map – patrz opis poniżej), śledzenie ścieżek (ang. path tracing), metoda map fotonowych (ang. photon map) i tzw. forward raytracing, który jest odwrotnością algorytmu raytracingu.

Jakich technik oświetlenia użyła Nvidia w demie RTX

RTX

Najnowsze demo technologiczne Nvidii rzuca bardzo dużo światła na przyszłość grafiki komputerowej i na to, co inżynierowie firmy chcą wprowadzić w swoich najnowszych kartach graficznych. Skupiono się głównie na wiernym odtworzeniu cieniowania i odbić na różnych powierzchniach oraz oświetleniu globalnym. Poniżej opiszemy techniki oświetlenia globalnego oraz modele oświetlenia i powierzchni odbijających światło.

Najpierw zajmiemy się oświetleniem globalnym, które określa oświetlenie w scenie

Do tej pory najczęściej używanymi technikami oświetlenia globalnego były dwie metody. Metoda energetyczna (ang. radiosity), która wykorzystuje do obliczeń mapy irradiancji, i mapa fotonów (ang. photon map), która do obliczeń wykorzystuje najmniejsze cząstki światła, czyli fotony. Obie te techniki mogą występować pojedynczo i wyświetlać naszą oświetloną scenę. Obraz będzie jednak wyglądał najlepiej dopiero wtedy, gdy silnik renderujący uwzględni oba te rozwiązania.

Obydwie metody bardzo dobrze się uzupełniają. Metoda energetyczna uwzględnia wyłącznie oświetlenie rozproszone. Nie uwzględnia natomiast efektów świetlnych takich, jak rozbłyski i załamania światła. Te z kolei zapewnia technika mapowania fotonów. Dlatego warto je połączyć.

Technika energetyczna

Radiancja

Technika energetyczna (ang. radiosity), czyli irradiancja, jest funkcją definiującą dowolny punkt (piksel) w scenie 3D i reprezentuje sumę światła dochodzącego w tym punkcie ze wszystkich kierunków. Generalnie irradiancja jest inna w każdym punkcie sceny. Możemy więc założyć, że irradiancja (wypromieniowanie) to zbiór punktów w scenie 3D. Kiedy więc chcemy wyliczyć irradiancję w danym punkcie podczas obliczania oświetlania globalnego, nasz silnik renderujący przeszukuje mapę punktów irradiancji, porównuje ją z sąsiadującymi punktami i sprawdza, czy są one podobne pod względem położenia i kierunku. Na tej podstawie wyliczane są miejsca, z których algorytm renderujący może uzyskać dokładne informacje o tym, co znajduje się w scenie i w jakiej jest relacji z resztą otoczenia. Na podstawie tych miejsc tworzona jest mapa irradiancji.

Sprawdź aktualne ceny kart graficznych – może to dobra okazja do zakupu?

Trzeba wiedzieć, że taka mapa wyliczana jest na samym początku w bardzo niskiej rozdzielczości; często jest to jedna czwarta oryginalnej rozdzielczości, przy czym nie jest to wartość jednakowa dla poszczególnych obiektów w scenie. W scenie są miejsca, które wymagają bardziej precyzyjnych obliczeń, np. kiedy obiekty są bardzo blisko siebie lub miejsce wymaga bardzo dokładnego wyliczenia cieniowania. Z drugiej strony mamy niezbyt wymagające fragmenty sceny 3D, np. duże równo oświetlone powierzchnie.

W przykładowej scenie jest to powierzchnia blatu. Jest oświetlona jednorodnie i nie wymaga skomplikowanych obliczeń. Tak więc mapa irradiancji może być budowana adaptacyjnie. Odbywa się to przez renderowanie sceny kilkukrotnie (każdy taki rendering nazywa się przejściem i zwiększa liczbę szczegółów w finalnej scenie). Oczywiście, można określić, ile takich renderingów (przejść) ma nastąpić. Komu więc nie zależy na idealnej definicji obszaru, ten może ograniczyć  liczbę przejść do minimum.

Jak dokładnie przebiega obliczanie mapy irradiancji, pokazuje diagram powyżej. 

Ponieważ działanie tej metody zależy od tego, co widać na ekranie, pierwsze śledzone są promienie główne (czarne), wyprowadzane z naszej kamery na scenę. To one określają punkty, z których będziemy próbkować mapę irradiancji (wypromieniowania). Kiedy punkty rozproszenia zostają wyznaczone, przechodzimy do drugiej fazy. Z tych punktów prowadzone są w stronę sceny promienie światła (czerwone), które zbierają dane o jej całkowitym oświetleniu. Liczba tych promieni może być dowolnie kontrolowana. Od tego zależy finalna jakość oświetlenia rozproszonego. Mapa irradiancji może śledzić tylko jedno odbicie promieni światła, każde następne musi już zostać wykonane przez drugi silnik renderujący (drugie odbicie to niebieska strzałka na diagramie). Tworzenie mapy irradiancji polega na następujących po sobie przejściach (renderingach), w trakcie których silnik renderujący dodaje więcej szczegółów.

Mapa irradiacji

Mapa irradiacji

Tak wyglądają mapy irradiancji w poszczególnych przejściach

Drugie odbicie jest wykonywane przy użyciu drugiego algorytmu oświetlenia globalnego, tzw. mapy fotonów (ang. photon map).

Mapa Fotonów

Technika ta jest bardzo podobna do mapy irradiancji, z tą różnicą, że w celu jej zbudowania śledzi się poszczególne cząsteczki bazowe światła (fotony), a nie promienie światła, które są emitowane przez źródła światła. Fotony te odbijają się od poszczególnych powierzchni w scenie, a punkty tych odbić są zapisywane w mapie fotonów. Dzięki temu mogą być tworzone takie efekty świetlne, jak: załamania światła, aberracja fotochromatyczna, połyskliwość materiału.

Photon map

kaustyka

Takie efekty rozszczepienia światła można osiągnąć za pomocą mapy fotonów

Śledzenie ścieżek

Trzecia z technik oświetlenia globalnego należy do najbardziej zaawansowanych, a efekty tworzone z jej zastosowaniem można nazwać fotorealistycznymi. Mowa o śledzeniu ścieżek (ang. path tracing). To rozwinięcie raytracingu, niekiedy wymagające jeszcze większej mocy obliczeniowej. 

Path tracing diagram

W tej technice źródłem promieni jest obserwator, tj. kamera. Z niej prowadzone są promienie świetlne w stronę sceny. Promienie te uderzają w powierzchnię. Z punktów, w które uderza taki promień, wystrzeliwane są losowo kolejne promienie (jeden lub więcej). Od funkcji losującej i liczby pierwotnie wystrzeliwanych promieni zależy jakość finalnego obrazu. Tworzenie pojedynczej ścieżki kończy się, gdy liczba odbić promienia światła przekracza pewien limit (na obrazku liczba zielonych promieni nie przekracza liczby odbić). Wówczas wyznacza się ostateczne natężenie światła, które dociera do obserwatora: składa się na nie natężenie światła pochodzącego od obiektów emitujących, które następnie jest tłumione; tłumienie zależy od współczynnika pochłaniania światła (tutaj korzystamy z funkcji BRDF materiału) dla każdego trafionego obiektu. Kiedy połączymy śledzenie ścieżek z poprawnymi fizycznie modelami oświetlenia i powierzchni, efekt będzie fotorealistyczny. Będzie też jednak bardzo kosztowny obliczeniowo.

Z drugiej strony można wygenerować obraz przy bardzo niskich wartościach parametru odbić i bardzo małej liczbie promieni wypuszczanych na scenę. Otrzymamy wtedy bardzo przybliżony obraz tego, jak ta scena ma wyglądać, jak rozkłada się oświetlenie i gdzie będą generowane cienie. Niestety, obraz będzie wtedy bardzo mocno zaszumiony (jak na renderingu poniżej).

Path tracing

Przykładowy rendering z wykorzystaniem śledzenia ścieżek. Liczba promieni na piksel – 1

Żeby temu zapobiec, różni producenci zaczęli opracowywać własne algorytmy odszumiania. Wśród nich jest Nvidia. Jej najnowszy algorytm odszumiania, OptiX 5.0, który może wykorzystywać techniki sztucznej inteligencji, należy do najszybszych. Zastosować może go posiadacz odpowiedniej karty graficznej, opartej na jednym z układów Nvidia Volta. Jak widać na wykresie poniżej, wykorzystanie tego algorytmu potrafi przyspieszyć proces renderingu poszczególnych klatek aż 54 razy. Niestety, nadal mówimy o wyjątkowo drogiej karcie, wyposażonej w układ Volta V100.

Wykres Odszumiania OptiX 5

Wykres pokazuje, o ile szybciej scena jest generowana z użyciem odszumiania OptiX 5.0

Efekty, które można osiągnąć przy użyciu tego algorytmu, przedstawiamy poniżej. Po lewej stronie znajduje się scena wygenerowana z wykorzystaniem bardzo niskiej wartości parametru SPP (ang. sample per pixel), a po prawej – ta sama scena wygenerowana przy tej samej wartości parametru SPP, ale z zastosowaniem algorytmu odszumiania OptiX 5.0.

AI OptiX 5