Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Michał Drobot Visual Technical Director Reality Pump

Podobne prezentacje


Prezentacja na temat: "Michał Drobot Visual Technical Director Reality Pump"— Zapis prezentacji:

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 ?


Pobierz ppt "Michał Drobot Visual Technical Director Reality Pump"

Podobne prezentacje


Reklamy Google