RENDERING W CZASIE RZECZYWISTYM Michał Radziszewski
Plan wykładu Interaktywne śledzenie promieni wprowadzenie Porównanie śledzenia promieni i renderingu opartego o raster Algorytmy śledzenia promieni Algorytm rekurencyjny Whitteda Śledzenie ścieżek Algorytmy dwukierunkowe Mapowanie fotonów
Plan wykładu c.d. Struktury przyspieszające Regularne siatki Drzewa kd CUDA i OpenCL Równoległe śledzenie promieni Zastosowanie wielordzeniowych CPU Zastosowanie GPU Współpraca CPU i GPU
Literatura T. Whitted, An improved illumination model for shaded display, Communications of the ACM 1980 J. T. Kajiya, The rendering equation, SIGGRAPH 1986 E. Veach, L. Guibas, Optimally Combining Sampling Techniques for Monte Carlo Rendering, SIGGRAPH 1995 H. W. Jensen, Realistic Image Synthesis Using Photon Mapping, AK Peters 2001
Literatura c.d. V. Havran, Heuristic Ray Shooting Algorithms, PhD Thesis, 2000 T. J. Purcell i inni, Ray Tracing on Programmable Graphics Hardware, SIGGRAPH 2002 S. Popov i inni, Stackless KD-Tree Traversal for High Performance GPU Ray Tracing, Eurographics 2007 D. Luebke, S. Parker, Interactive Ray Tracing with CUDA, NVISION 2008
Interaktywne śledzenie promieni wprowadzenie Rasterization is fast but need cleverness to support complex visual effects Ray tracing supports complex visual effects but need cleverness to be fast Ray tracing is the technology of the future and it always will be!
Interaktywne śledzenie promieni wprowadzenie
Interaktywne śledzenie promieni wprowadzenie Śledzenie promieni pozwala w prosty i przejrzysty sposób symulować dowolne zjawiska optyczne z zakresu optyki geometrycznej Nie są potrzebne żadne chwyty i sztuczki stosowane przy renderingu rastrowym Sztuczki takie na ogół nie działają bezbłędnie Scena w ruchu, renderowana przy ich pomocy sprawia wrażenie poprawnie wygenerowanej Ale przy spojrzeniu na pojedyncze klatki, szczególnie w wysokiej rozdzielczości, niedociągnięcia są rażące
Interaktywne śledzenie promieni wprowadzenie Efekty, które można łatwo otrzymać przy śledzeniu promieni, a które są bardzo trudne, albo nieosiągalne w grafice rastrowej to m.in.: Obiekty połyskliwe, lustra, szkło Cienie o rozmytych krawędziach Oświetlenie pośrednie Obiekty półprzeźroczyste Rozpraszanie światła w obiektach wolumetrycznych Głębia ostrości
Interaktywne śledzenie promieni wprowadzenie
Interaktywne śledzenie promieni wprowadzenie Niestety, śledzenie promieni jest znacznie wolniejsze niż rendering rastrowy Oba podejścia mają w typowym przypadku złożoność logarytmiczną względem rozmiaru sceny (ilości prymitywów) Clog(n) Śledzenie promieni ma jednak dużo większą stały współczynnik C Powoduje to istotne trudności w uzyskaniu interaktywności (kilka-kilkanaście Hz), a tym bardziej renderingu w czasie rzeczywistym (ok. 60Hz)
Porównanie algorytmów Obecnie interaktywne śledzenie promieni wygrywa z algorytmem rastrowym pod względem możliwych do symulowania zjawisk optycznych Niestety, aby zrównoważyć braki w wydajności, sceny muszą być znacznie prostsze W ogólnym rozrachunku do renderingu w czasie rzeczywistym współcześnie lepszy jest algorytm rastrowy
Porównanie algorytmów Jednak w przyszłości prawdopodobnie się to zmieni Obecnie przy odpowiednio długim dostępnym czasie na rendering ramki śledzenie promieni zapewnia wyraźnie lepszą jakość grafiki, niż algorytm rastrowy Wraz ze wzrostem dostępnej mocy obliczeniowej kolejnych generacji komputerów czas ten staje się coraz mniejszy prawdopodobnie będzie niedługo czasem rzeczywistym
Algorytmy śledzenia promieni Algorytmy śledzenia promieni nie są nowe Pierwsza publikacja powstała w 1980r. Stosowane były jeszcze wcześniej Przez ponad 30 lat znacznie poprawiono zarówno ich możliwości jak ich wydajność Obecnie potrafią one obliczyć dowolne zjawisko oparte o optykę geometryczną Stosowane są efektywne struktury przyspieszające, w połączeniu z renderingiem równoległym
Algorytm rekurencyjny Whitteda Śledzenie promieni od kamery w kierunku sceny Rekurencyjne śledzenie promieni odbitych od powierzchni idealnie odbijających i idealnie załamujących światło Testy widoczności pomiędzy światłami punktowymi a cieniowanymi punktami na powierzchniach niepołyskliwych
Algorytm rekurencyjny Whitteda
Algorytm rekurencyjny Whitteda Symuluje tylko i wyłącznie odbicia idealne Cienie nie mają miękkich krawędzi dostępne są wyłącznie światła punktowe W przypadku powierzchni odbijających i załamujących światło występuje śledzenie drzewa promieni Jeżeli takich obiektów na scenie jest dużo, to drzewo to jest mocno rozgałęzione bardzo słaba wydajność algorytmu
Śledzenie ścieżek Równanie całkowe opisujące bilans energetyczny sceny w funkcji źródeł światła, danych geometrycznych i materiałów Rozwiązanie za pomocą śledzenia ścieżek (kolejnych promieni) światła od kamery do źródeł Ścieżki zastępują drzewa Odbicia w losowych kierunkach Algorytm statystyczny, estymowana wartość oczekiwana oświetlenia przybliża wynik całkowania
Śledzenie ścieżek
Śledzenie ścieżek Umożliwia rendering dowolnego zjawiska opartego o optykę geometryczną Problemem jest słaba wydajność Obrazki są mocno zaszumione Aby usunąć szum, trzeba prześledzić bardzo wiele ścieżek, co może zająć nawet wiele godzin Szczególnie problematyczne są powierzchnie połyskliwe blisko źródeł światła i światła częściowo zasłonięte przez obiekty na scenie
Śledzenie ścieżek
Algorytmy dwukierunkowe Śledzenie promieni od kamery i od źródeł światła Algorytm znacznie bardziej odporny na tzw. Trudne przypadki niż zwykłe śledzenie ścieżek, w kierunku od kamery do źródeł światła W wersji podstawowej techniki te są wciąż zbyt powolne, aby mogły być stosowane w czasie rzeczywistym
Algorytmy dwukierunkowe
Algorytmy dwukierunkowe
Mapowanie fotonów Rendering dwuprzebiegowy W pierwszym przebiegu budowa tzw. mapy fotonów Śledzenie promieni od źródeł światła w kierunku sceny, uwzględnienie wielokrotnych odbić Zapamiętanie danych w punktach ich przecięć z obiektami W drugim przebiegu rendering z wykorzystaniem mapy fotonów zamiast źródeł światła
Mapowanie fotonów
Mapowanie fotonów Obecnie, po zastosowaniu różnorodnych optymalizacji, jedna z najlepszych technik tego typu Często implementowane na GPU, najlepiej do tego celu nadaje się CUDA albo OpenCL Może być stosowane w czasie rzeczywistym, zarówno w wersjach na wielordzeniowe CPU jak i GPU, jednak sceny muszą być odpowiednio proste
Struktury przyspieszające Najdroższą operacją we wszystkich algorytmach śledzenia promieni jest znajdowanie przecięć promieni z geometrią sceny Dobry algorytm śledzenia promieni ogranicza ilość promieni niezbędną do osiągnięcia zadanej jakości grafiki Ale tylko to niewiele pomoże jeżeli samo szukanie przecięcia promieni jest nieefektywne Konieczność stosowania specjalizowanych struktur przyspieszających
Struktury przyspieszające Takie zorganizowanie przechowywanych danych sceny, aby pojedynczymi krokami odrzucać z dalszych obliczeń duże ilości geometrii znajdującej się daleko od śledzonego promienia Możliwość osiągnięcia średniej złożoności logarytmicznej względem ilości prymitywów, zamiast złożoności liniowej prostego sprawdzenia wszystkich figur
Regularne siatki Podział całej sceny na jednakowe prostopadłościenne bloki Każdy blok ma wskaźniki na figury, które częściowo albo całkowicie się w nim zawierają Szukanie najbliższego punktu przecięcia sprowadza się do przeglądnięcia figur z bloków znajdujących się na drodze promienia Przeglądanie bloków jest wykonywane w kolejności zgodnej z kierunkiem promienia
Regularne siatki Siatki takie są bardzo proste i szybkie w budowie Przeglądanie jest efektywne tylko wtedy, gdy rozmieszczenie figur jest w przybliżeniu jednorodne na całej scenie Pojedyncze, szczegółowo modelowane obiekty, znajdujące się na względnie dużej scenie, wraz z innymi obiektami o znacznie większych prymitywach, w całości trafiają do pojedynczych bloków, psując wydajność
Drzewa kd Ograniczenie całej sceny prostopadłościanem Rekurencyjny podział sceny na dwie połowy, w poprzek najdłuższej osi prostopadłościanu Figury, które znalazły się na płaszczyźnie podziału trafiają do obu połówek Podział jest przerywany, jeżeli w scenie jest mniej figur, niż z góry zadana wartość (zwykle kilka), albo gdy ilość podziałów przekroczy pewien próg
Drzewa kd
Drzewa kd Przeszukiwanie drzewa polega na przeglądaniu węzłów w poszukiwaniu najbliższego punktu przecięcia Przegląd zaczyna sie od korzenia, a do węzłów potomnych wchodzi się tylko, gdy promień je przecina Jeżeli promień przecina oba węzły potomne, to najpierw należy przeszukać pierwszy węzeł na drodze promienia
Drzewa kd W przeciwieństwie do regularnych siatek, drzewa automatycznie dostosowują się do niejednorodności w rozkładzie geometrii na scenie Poprzez odrzucanie wysoko poziomowych węzłów można w jednym kroku pominąć o wiele większą ilość geometrii, niż pozwalałaby na to regularna siatka Przeszukiwanie drzew jest szybsze, niż przeszukiwanie siatek, ale ich konstrukcja jest wolniejsza
CUDA i OpenCL Są to środowiska do programowania kart graficznych w języku zbliżonym do C/C++ OpenCL (Open Computing Language) jest otwartym standardem, dostępnym na kartach zarówno Nvidii jak i ATI/AMD CUDA (Compute Unified Device Architecture) dostępna jest tylko na kartach Nvidia od serii 8xxx wzwyż
CUDA i OpenCL Dostosowane są one do rozwiązań sprzętowych we współczesnych kartach graficznych Lepsze do obliczeń ogólnego przeznaczenia niż GLSL i HLSL Model przetwarzania równoległego oparty o jądra (ang. kernels) Wątki i grupy wątków Architektura SIMD Pamięć lokalna i globalna
Równoległe śledzenie promieni Podobnie jak rendering rastrowy, śledzenie promieni można wykonywać równolegle Jest to konieczne, aby osiągnąć interaktywność Równolegle można liczyć fragmenty obrazu, pojedyncze ścieżki, a nawet śledzić indywidualne promienie Nieco trudniejsza jest równoległa budowa mapy fotonów, ale też jest możliwa do realizacji
Równoległe śledzenie promieni Równoległe śledzenie promieni można realizować przy pomocy wielordzeniowych CPU, maszyn wieloprocesorowych albo kart graficznych Rendering jednej klatki na wielu maszynach połączonych w sieć jest nieopłacalny Nie ma zgody co do stwierdzenia, czy do śledzenia promieni lepiej nadaje się CPU czy GPU Oba rozwiązania mają swoje zalety i wady
Zastosowanie wielordzeniowych CPU CPU pozwala wykonać w efektywny sposób dowolny algorytm Jeżeli algorytm zawiera względnie dużo obliczeń arytmetycznych, a stosunkowo niewiele rozgałęzień warunkowych i odczytów danych z różnych obszarów pamięci, to GPU jest efektywniejsze w realizacji takiego algorytmu Głównym kosztem śledzenia promieni jest przeszukiwanie drzew, co sugerowałoby zastosowanie CPU
Zastosowanie wielordzeniowych CPU
Zastosowanie GPU Przy odpowiedniej modyfikacji algorytmów, śledzenie promieni można efektywnie wykonywać na GPU Dotyczy to głównie grupowania promieni o podobnych kierunkach w wiązki, i śledzenie wiązek promieni Niestety psuje to własności statystyczne algorytmów, z punktu widzenia statystyki najlepiej jest promienie jak najbardziej rozpraszać Można też zastosować rendering rastrowy, efektywnie skracając o 1 długość wszystkich ścieżek
Zastosowanie GPU
Współpraca CPU i GPU CPU i GPU są optymalizowane pod kątem różnych algorytmów Być może lepsze byłoby zastosowanie optymalnego procesora do konkretnego zadania Podział śledzenia promieni na algorytm podstawowy, generujący strumień próbek wyjściowych, w przestrzeni ekranu i konwersje tych próbek na obraz w formacie 24bit RGB Pierwsze zadanie CPU, drugie GPU Problematyczne równoważenie obciążeń
Dziękuję za uwagę