Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałBogumiła Fabiański Został zmieniony 10 lat temu
1
Michał Drobot Visual Technical Director Reality Pump
GPU Pipeline II Michał Drobot Visual Technical Director Reality Pump
2
Plan wykładu Optimalizacje geometrii Rasteryzacja Texture Mapping
Antialiasing Flow Control Alpha Blending
3
Optymalizacje geometrii
Backface 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 = C
C – 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 skalarny
V1 = (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 kamery
Jeś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 fi
A 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 Culling
Przycinanie 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 Culling
Ma 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-Z
Istnieje 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ów
W ś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 Rendering
Dodatkowo 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 traversal
Wykonywana 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 pixela
Sprawdzamy 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 przez
Wykorzystanie 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 poligony
Textury 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ów
Pozycja 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 samplera
Tryb 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 pixelami
Jeś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 pixelami
Jeś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-mapping
Przy 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-mapping
Z 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 filtering
Dokonuje 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 filtering
Filtrowanie 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 filtering
Koszt 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ędzie
Brak 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 Aliasing
Dowolna 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 etapach
Wykrycie 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 8x8
Każ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 GPU
Quady 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ści
Kolor ź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 hello@drobot.org
Slides will be available at Drobot.org
52
Questions ?
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.