Michał Drobot Visual Technical Director Reality Pump

Slides:



Advertisements
Podobne prezentacje
Mgr inż.Marcin Borkowski Podstawy Java Część II
Advertisements

Metody ekonometryczne
Język ANSI C Funkcje Wykład: Programowanie komputerów
Metody Analizy Programów Wykład 02
Zadanie z dekompozycji
Geograficzne bazy danych
Cyfrowy model powierzchni terenu
Implementacja algorytmów na procesory kart graficznych
ALGORYTMY I STRUKTURY DANYCH
Przekształcenia afiniczne
Pracownia Gier w OpenGL
ZŁOŻONOŚĆ OBLICZENIOWA
ALGORYTMY GEOMETRYCZNE.
WYKŁAD 2. Kolorowanie wierzchołków
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Rozpoznawanie Twarzy i Systemy Biometryczne, 2005/2006
Rozpoznawanie Twarzy i Systemy Biometryczne, 2005/2006
Ekonometria wykladowca: dr Michał Karpuk
Kurs Pascala – spis treści
Algorytm Rochio’a.
Wykład 4 Rozkład próbkowy dla średniej z rozkładu normalnego
Wykład 3 Rozkład próbkowy dla średniej z rozkładu normalnego
Eliminacja powierzchni niewidocznych Wyznaczanie powierzchni widocznych Które powierzchnie, krawędzie i punkty są widoczne ze środka rzutowania (albo wzdłuż.
Geometria obrazu Wykład 9
Geometria obrazu Wykład 11
Wyższa Szkoła Informatyki I Zarządzania W Bielsku-białej
Schemat Hornera Mgr inż. Michał Szucki.
Podstawy programowania
Podstawy programowania II
Informatyka I Wykład 5 OPERATORY Priorytety i kolejność obliczeń
Programowanie strukturalne i obiektowe
Ekonometria szeregów czasowych
Podstawowe pojęcia i problemy związane z przetwarzaniem plików graficznych.
Symulacje komputerowe Detekcja kolizji brył sztywnych Fizyka w modelowaniu i symulacjach komputerowych Jacek Matulewski (
„Moment Siły Względem Punktu”
MECHANIKA NIEBA WYKŁAD r.
Grafika komputerowa Wykład 11 Analiza widoczności
Porównanie grafiki rastrowej i wektorowej
Karty graficzne Karta graficzna, często określana też mianem akcelerator grafiki, to element komputera tworzący sygnał dla monitora. Podstawowym zadaniem.
Programowanie gier komputerowych Tomasz Martyn
Grafika komputerowa Wykład 6 Podstawowe algorytmy grafiki 2D
Advanced Soft Shadows Michał Drobot Technical Art Director Reality Pump.
Light pre-pass renderer
Zaawansowane techniki renderingu
Przykładowy algorytm geometryczny (geometria płaska)
Wojciech Toman. Dotychczasowe podejście do oświetlenia Idea deferred shadingu Typowe problemy wraz z propozycjami rozwiązania Optymalizacja wydajności.
IV EKSPLORACJA DANYCH Zadania eksploracji danych: klasyfikacja
Algorytm Z-Bufora (bufora głębokości)
Wypełnianie obszaru.
Geometria obliczeniowa Wykład 13 Planowanie ruchu 1.Znajdywanie ścieżki między dwoma punktami. 2.Ruch postępowy robota wielokątnego na płasz- czyźnie.
Grafika i komunikacja człowieka z komputerem
Teksturowanie oraz algorytmy cieniowania
PHP Instrukcja warunkowa if Damian Urbańczyk. Warunek? Instrukcję warunkową wykorzystujemy wtedy, gdy chcemy sprawdzić pewien fakt, który może być prawdziwy.
Grafika rastrowa - parametry
Instrukcja obsługi aplikacji „Wizualizacja produktów CRH Klinkier”
Grafika komputerowa – Grafika wektorowa i rastrowa
Draver/GRK/cw3_result.jpg. Grafika 3D Wprowadzenie.
Grafika 2d - Podstawy. Kontakt Daniel Sadowski FTP: draver/GRK - wyklady.
 Formuła to wyrażenie algebraiczne (wzór) określające jakie operacje ma wykonać program na danych. Może ona zawierać liczby, łańcuchy znaków, funkcje,
Metody Inteligencji Obliczeniowej Adrian Horzyk Adrian Horzyk Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii.
Zagadnienia transportowe Katedra Ekonomiki i Funkcjonowania Przedsiębiorstw Transportowych.
Parametry rozkładów Metodologia badań w naukach behawioralnych II.
PODSTAWY PRACY W PROGRAMIE AUTOCAD OPISYWANIE RYSUNKÓW: ‒style tekstu; ‒wprowadzanie tekstu tekst wielowierszowy tekst jednowierszowy ‒edycja tekstu. WYMIAROWANIE.
Trochę matematyki - dywergencja Dane jest pole wektora. Otoczymy dowolny punkt P zamkniętą powierzchnią A. P w objętości otoczonej powierzchnią A pole.
Kompilacja iteracyjna Piotr Błaszyński. Szybkie programy Prawa ograniczające:  prawo Moore'a (jego granice),  prawo Gatesa,  prawo Amdahla,  prawo.
Optymalizacja programów Open-Source
Geometria obrazu Wykład 9
Co do tej pory robiliśmy:
ALGORYTMY I STRUKTURY DANYCH
Instrukcja warunkowa if
Zapis prezentacji:

Michał Drobot Visual Technical Director Reality Pump GPU Pipeline II Michał Drobot Visual Technical Director Reality Pump

Plan wykładu Optimalizacje geometrii Rasteryzacja Texture Mapping Antialiasing Flow Control Alpha Blending

Optymalizacje geometrii Backface Culling Occlusion

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

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

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

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)

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

Backface Culling A o B = |A||B|cos fi A o B > 0 => -90* < fi < 90* fi B

Backface Culling Przeprowadzany sprzętowo Przed PixelShadingiem

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

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

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

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

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

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ń

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

Rasteryzacja

Rasteryzacja

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)

Rasteryzacja Skanowanie jest przyśpieszane przez Wykorzystanie Bounding Box’ów Stosowanie ‘połowicznej przestrzeni obliczeń’ Half-space Pracowanie na blokach pixeli 2x2 / 4x4 etc…

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, 1010102, 1616, 16161616… Etc…

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

Texture mapping {v0.x, v0.y, v0.z, … , 1 , 0}

Texture mapping {v0.x, v0.y, v0.z, … , 1 , 0}

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

Texture mapping {v0.x, v0.y, v0.z, … , 0 , 0}

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

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

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

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)

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

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

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ń

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

Antialiasing Algorytm rasteryzacji musi zadecydować czy pixel należy do trójkąta Decyzja zachodzi względem ‘środka’ pixela

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

Antialiasing Supersampling

Antialiasing Supersampling

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

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

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?

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

Antialiasing Istnieją różne metody samplowania z obrazu o wyższej rozdzielczości Regular grid Oriented Grid Poisson Sampling Jittered Mixed …

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

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…

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

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

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

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)

Podsumowanie For more information contact me hello@drobot.org Slides will be available at Drobot.org

Questions ?