1 Michał Drobot Visual Technical Director Reality PumpGPU Pipeline II Michał Drobot Visual Technical Director Reality Pump
2 Plan wykładu Optimalizacje geometrii Rasteryzacja Texture MappingAntialiasing Flow Control Alpha Blending
3 Optymalizacje geometriiBackface Culling Occlusion
4 Backface Culling Sprawdzamy kierunek względem, którego ustawiony jest trójkąt Kierunek przeglądania trójkąta ma znaczenie Wyliczanie wektora normalnego trójkąta Iloczyn wektorowy dwóch wektorów reprezentujących krawędzie trójkąta
5 Backface Culling Iloczyn wektorowy A x B = CC – wektor prostopadły do płaszczyzny wyznaczonej przez A i B Układ „prawej dłoni” C A B
6 Backface Culling 2 wektory Iloczyn skalarnyV1 = (b1 – a1 , b2 – a2 , b3 – a3) V2 = (c1 – a1 , c2 – a2 , c3 – a3) Iloczyn skalarny V1 = (x1, x2, x3) V2 = (y1 , y2, y3) V1xV2 = (x2*y3 - x3*y2, x3*y1 - x1*y3, x1*y2 - x2*y1) Z X a Y c b
7 Backface Culling Kierunek ruchu wskazówek zegara (clockwise)V1 = (5, 5, 0) V2 = (11, 0, 0) N = V1 x V2 Anti-clockwise N’ = V2 x V1 X Z N (5,5,0) N v1 Y (0,0,0) v2 N’ (11,0,0)
8 Backface Culling Sprawdzamy czy normalna jest w kierunku kameryJeśli tak to renderujemy Nie ma sensu renderować trójkątów ‘tyłem’ do kamery Test dokonujemy przez iloczyn skalarny Z X Y
9 Backface Culling A o B = |A||B|cos fiA o B > 0 => -90* < fi < 90* fi B
10 Backface Culling Przeprowadzany sprzętowo Przed PixelShadingiem
11 Occlusion Culling Rodzina algorytmów klasyfikacji powierzchni widocznych Na różnych etapach renderingu odrzuca powierzchnie z potoku renderowania Opierają się na metodach Przestrzeni świata Przestrzeni obraz
12 Occlusion Culling Frustum CullingPrzycinanie obiektów do bryły widzialności Frustum tworzone jako ostrosłup ścięty, wg parametrów kamery w przestrzeni świata Stosuje się modele aproksymacyjne Bouding Box Bounding Volume Dla każdego vertexa BB/BV sprawdzamy czy znajduje się w frustum Jeśli nie to odrzucamy obiekt z kolejki renderowania
13 Occlusion Culling Oclussion CullingMa za zadanie określenie obiektów, które z punktu widzenia kamery, są zasłaniane przez inne obiekty Skomplikowane ze względu na ruchomość kamery, bądź obiektów
14 Occlusion Culling Raytracing HOM – Hierarchical Occlusion Maps Hi-ZIstnieje wiele metod pozwalających przyśpieszyć sprawdzanie Hierarchiczny podział przestrzeni Zamykanie obiektów w drzewach : OCT, BSP , KD etc. Divide and Conquer Algorytm Warnock’a Raytracing HOM – Hierarchical Occlusion Maps Hi-Z
15 Occlusion Culling Test occluderówW świecie ustawia się niewidzialne obiekty przesłaniające (clipping box) W momencie tworzenia kolejki do renderowania, obiekty są wycinane przez frustum utworzone przez obiekt przesłaniający Efektywnie wycina się obiekty przesłonięte przez occluder Stosowane w skomplikowanych sceneriach o naturalnych przeszkodach widoczności Miasta – occluder = budynek Teren – occluder = skały, wzgórza doliny
16 Occlusion Culling Potentially Visible Sets Portal RenderingDodatkowo wykorzystuje się metody PVS Potentially Visible Sets Portal Rendering Podział mapy na określone, przystające do siebie sektory W danej kolejce renderowania brany pod uwagę jest Dany sektor Przystający do niego sektor w kierunku patrzenia kamery W danym sektorze przeprowadzamy standardowe frustum culling W sektorze przystającym przeprowadzamy frustum culling przy użyciu nowego frustum utworzonego z przejścia (portalu) pomiędzy sektorami (np. tunel, drzwi…) Efektywnie wycinamy jedynie ‘widok’ następnego sektora przez portal Często stosowane w renderingu zamkniętych pomieszczeń
17 Rasteryzacja Rasteryzacja występuje na etapie triangle traversalWykonywana przy użyciu algorytmu Scanline / Scan Conversion Liczne optymalizacje sprzętowe Znajomość algorytmów przydatna w rasteryzacji software’owej
18 Rasteryzacja
19 Rasteryzacja
20 Rasteryzacja Dla każdego pixelaSprawdzamy czy znajduje się wewnątrz trójkąta Test obliczamy poprzez sprawdzenie czy pixel znajduję się algebraicznie w przecięciu płaszczyzn wyznaczonych przez krawędzie trójkąta Zapisujemy do tablic (color buffer, textura, z-buffer…) interpolowane dane z vertexów Interpolowane dane zapisywane do tablic i przekazywane do pixel shaderów (interpolatory)
21 Rasteryzacja Skanowanie jest przyśpieszane przezWykorzystanie Bounding Box’ów Stosowanie ‘połowicznej przestrzeni obliczeń’ Half-space Pracowanie na blokach pixeli 2x2 / 4x4 etc…
22 Texture mapping Wielowymiarowe obrazy nakładane na poligonyTextury składają się z „texeli” Dopiero później mapowane są na „pixele” Zwykle obrazy 2D Cube, Volumetric Są jedynie różnymi rodzajami pakowania i adresowania obrazów Przechowywane w wielu formatach i metodach kompresji w zależności od zastosowania DXT1, DXT5 – GPU mogą pracować na formatach skompresowanych 8888, , 1616, … Etc…
23 Texture mapping Geometria (vertex) posiada kilka atrybutówPozycja Wektor normalny Kolor Koordynaty textur Koordynaty textur dla każdego vertex’a (u,v) zwykle z zakresu [0;1] (0,0) – górny lewy róg
24 Texture mapping {v0.x, v0.y, v0.z, … , 1 , 0}
25 Texture mapping {v0.x, v0.y, v0.z, … , 1 , 0}
26 Texture mapping Istnieje wiele opcji konfiguracji sampleraTryb samplowania Point Linear … Tryb adresowania UV Clamp – przycina wartość (u,v) do [0;1] Wrap – frac(u,v) – zawija texture
27 Texture mapping {v0.x, v0.y, v0.z, … , 0 , 0}
28 Texture mapping Texele zwykle nie mapują się 1:1 z pixelamiJeśli pixel jest większy od texela Należy przerowadzić minifikacje textury (pomniejszenie) Jeśli pixel jest mniejszy od texela Należy przeprowadzić magnifikacje textury (powiększenie) Filtrowania przeprowadzamy metodami Nearest Neighbour – najbliższego sąsiada Bilinear – liniową w dwóch wymiarach – średnia ważona najbliższych texeli ze względu na odległość od punktu samplowania
29 Texture mapping Texele zwykle nie mapują się 1:1 z pixelamiJeśli pixel jest większy od texela Należy przerowadzić minifikacje textury (pomniejszenie) Jeśli pixel jest mniejszy od texela Należy przeprowadzić magnifikacje textury (powiększenie) Filtrowania przeprowadzamy metodami Nearest Neighbour – najbliższego sąsiada Bilinear – liniową w dwóch wymiarach – średnia ważona najbliższych texeli ze względu na odległość od punktu samplowania
30 Texture mapping Mip-mappingPrzy skrajnych minifikacjach na jeden pixel przypada wiele texeli Ilość wymaganych do uśrednienia wartości jest zbyt duża dla zachowania wydajności Przygotowuje się uprzednio wyliczone mip-mapy – uśrednione wersje danej textury w mniejszych rozdzielczościach Mogą być generowane automatycznie przez API Przyśpieszają mapowanie obiektów oddalonych od kamery Mniejsze textury (mip mapy) Mniej texeli – szybsze filtrowanie i cache’owanie Posiadają wymiary : 2^n, 2^n-1, 2^n-2 … 2^1 , 2^0 W zależności od stopnia minifikacji wybierana najbliższa mip-mapa Pamięciowo zajmują dodatkowo 1/3 pamięci danej textury
31 Texture mapping Mip-mappingZ racji swoich wymiarów filtrowanie przy pomocy mip-map jest izotropowe Uniformiczne w każdym kierunku Jeśli płaszczyzna jest pochyła względem kamery należy przeprowadzić mocniejsze filtrowanie tylko w jednym kierunku Mip-mapping wybierze rozmiar mipmapy pasujący do najbliższego pomniejszenia Pixele prostopadłe do kierunku pochylenia płaszczyzny będą niepotrzebnie filtrowane (rozmyte)
32 Texture mapping Tri-linear filteringDokonuje filtrowania bilinearnego w dwóch najbliższych mipmapach Następnie interpoluje uzyskane wartości względem odległości między mipmapami Poprawia jakość mipmappingu Nie wpływa na izotropowość filtrowania
33 Texture Mapping Anizotropic filteringFiltrowanie anizotropowe oblicza kształt mapowanej powierzchni Względem kształtu dokonuje odpowiednichń bi-/tri- linearnych Kształt jest wyliczany przez dodatkowe sample dookoła samplowanego miejsca Liczba dodatkowych sampli zależy od odległości oraz kąty patrzenia na płaszczyznę względem kamery
34 Texture Mapping Anizotropic filteringKoszt wynosi x razy sample przewidziane dla typu podrzędnego samplowania Bilinear – 4 sample Trilinear – 2 * 4 sample Anizotropic - Trilinear AFx4 – 4 * 2 * 4 = 32 sample Zapewnia optymalną jakość mapowania powierzchni „pod kątem” do kamery Duży narzut obliczeniowy oraz pamięciowy ze względu na olbrzymią dodatkową ilość samplowań
35 Antialiasing Rasteryzacja zamienia dane wektorowe z przestrzeni ciągłej na dyskretną – pixele Dochodzi do problemu mapowania danych na pixel Efektem są błędy aliasingu Poszarpane krawędzie Brak ostrości textur
36 Antialiasing Algorytm rasteryzacji musi zadecydować czy pixel należy do trójkąta Decyzja zachodzi względem ‘środka’ pixela
37 Antialiasing Najprostszą metodą rozwiązania problemu jest overs/super – sampling Renderowanie obrazu w większej rozdzielczości (2xH , 2xV , 2x , 4x…) Przy odczycie obrazu pomniejszanie go i uśrednianie Duży narzut pamięciowy, przepustowości oraz obliczeń X razy większy bufor koloru i Z
38 Antialiasing Supersampling
39 Antialiasing Supersampling
40 Antialiasing Supersampling Anitaliasowane krawędzieBrak przeskoku pixeli Możliwe poprawienie jakości textur Kosztowne Zwykle powoduje lekkie rozmycie Textury mogą być filtrowane osobno poprzez filtrowanie anizotropowe AF
41 Antialiasing MSAA Multi Sample Anti AliasingDowolna metoda SSAA, która wykorzystuje nierówne bufowry Zwykle bufory koloru są mają klonowane kolory Średnia nie różni się od braku SSAA Z bufor posiada wartość SSAA Efektywnie trójkąty nie mają poszarpanych krawędzi Tyle samo pamięci Mniejszy narzut obliczeniowy oraz transferu
42 Antialiasing Wszystkie wymienione metody wiążą się z licznymi ograniczeniami wydajności jak i przepustowości Zależy od konstrukcji renderera Jeśli dane nie będące na krawędzi maja po uśrednieniu ten sam wynik, po co w ogóle wykonywać obliczenia?
43 Antialiasing EdgeAA Opiera się na 2 etapachWykrycie krawędzi obiektów na ekranie Przeprowadzenie obliczeń/SSAA jedynie na wykrytych krawędziach Skomplikowane wykrywanie krawędzi Szybkie z nowymi kartami Metoda zapewniająca optimum wydajności i jakości
44 Antialiasing Istnieją różne metody samplowania z obrazu o wyższej rozdzielczości Regular grid Oriented Grid Poisson Sampling Jittered Mixed …
45 Pipeline Flow control Wykorzystanie IF..Else (loop)Static flow control Bazuje jedynie na stałych Na podstawie stałej decyduje o wyborze ścieżki wykonawczej Dynamic flow control Bazuje na zmiennych dynamicznych Na ich podstawie dokonuje wyboru ścieżki Utrudnia operacje adresowania, liczenia gradientów itp.. Ręczne liczenie adresowania dla textur
46 Pipeline Flow control Kompilator na podstawie heurystyk (ilośc instrukcji, typ, odwołania…) może zdecydować o statycznym rozwiązaniu (unroll, wykonanie obu gałęzi IF i wybranie logiczne wyniku) bądź dynamicznym (loop, branch) Możemy to wymuszać dyrektywami jeśli wiemy co robimy [branch] [flatten] [loop] [unroll] etc…
47 Pipeline Branch processor (>= SM 3.0)Umożliwia wprowadzenie architektury MIMD Operacje na fragmentach są przeprowadzane w bloczkach (np. 32x32, 8x8 , 2x2) Każdy z bloczków za pomocą Branch processora i tzw. Flow control może wykonać odmienną ścieżkę wykonawczą Jeśli którykolwiek texel z bloczku musi wybrać odmienną drogę od innych ,obliczenia są wykonywane dla wszystkich texeli i wszystkich dróg Wprowadza fizyczną obsługę dynamicznych if, else, for, while itp. Narzut obliczeniowy < 6 cykli
48 Pipeline Scan converter dzieli trójkąt na bloki 8x8Każdy blok jest dzielony dalej na quady 2x2 Mogą wśród nich wystąpić „martwe” pixele Sprawa komplikuje się przy wykorzystaniu flow control W jednym bloku mogą być pixele wymagające odmiennych ścieżek wykonawczych == wykonanie wszystkich ścieżek i wybór logiczny rezultatu
49 Pipeline Wybór ścieżki powinien być względnie oczywisty dla GPUQuady 2x2 zawierające różne ścieżki wykonawcze zostaną wykonane w całości i wybrany właściwy logicznie wynik Dążymy do lokalizacji wykonań kodu
50 Alpha Blending Efekty przeźroczystościKolor źródła jest blendowany (mieszany) z kolorem celu Wybierane są operatory oraz mnożniki : ONE, ZERO , + , - , * … Istnieje wiele metod blendowania Additive C = Src * (1,1,1,1) + Dst * (1,1,1,1) = Src + Dst Substractive C = Src * (1,1,1,1) – Dst * (1,1,1,1) = Src – Dst Multiplicative C = Src * Dst Alpha Blending (różne wersje ze względu na alpha) C = Src.rgb * Src.a + Dst * (1 – Src.a)
51 Podsumowanie For more information contact me [email protected]Slides will be available at Drobot.org
52 Questions ?