GRAFIKA CZASU RZECZYWISTEGO Podstawy syntezy grafiki 3D i transformacji geometrycznych Grafika komputerowa i wizualizacja, Bioinformatyka S1, II Rok
Synteza grafiki 3D Pod pojęciem syntezy grafiki rozumiemy stworzenie grafiki na podstawie jej opisu Komputerowa synteza grafiki to procesy algorytmiczne prowadzące do uzyskania cyfrowego obrazu na podstawie opisu jego zawartości Synteza grafiki 3D bazuje na opisie przestrzennego świata, znajdujących się w nim obiektów, ich cech, środowiska, itp. Opis wycinka świata na potrzeby syntezy grafiki 3D nazywamy sceną Celem syntezy grafiki 3D jest uzyskanie obrazu 2D będącego wizualizacją sceny przy zadanych kryteriach 2
Synteza grafiki 3D Scena Algorytm graficzny Geometryczny opis rozmieszczenia obiektów, oświetlenia, kamery,... Proces często nazywa się renderowaniem Obraz 2D Wizualizacja, "zdjęcie" sceny 3D widzianej w zadany sposób 3
Renderowanie Grafika realistyczna Renderowanie off-line Grafika czasu rzeczywistego Nieograniczony czas na przygotowanie każdej klatki animacji Celem jest uzyskanie jak najlepszego obrazu Zastosowania: Film Wizualizacja produktów Sztucznie generowane obrazy Sztuka Renderowanie on-line Konieczność szybkiego wyświetlania kolejnych klatek animacji Celem jest uzyskanie satysfakcjonującego obrazu przy zachowaniu płynności animacji Stosowane są liczne uproszczenia Zastosowania: Gry komputerowe Interaktywne symulacje Wirtualna rzeczywistość 4
Grafika realistyczna Nieograniczony czas na renderowanie Aby uzyskać najlepszy efekt, można poświęcić od kilku sekund do nawet kilku dni na wyrenderowanie jednej klatki animacji Algorytmy mające za zadanie naśladować rzeczywiste zjawiska optyczne Ogromna ilość obliczeń, algorytmy takie jak np.: Raytracing Photon mapping Źródło obrazu: http://venturebeat.com 5
Grafika czasu rzeczywistego Konieczność uzyskania płynności animacji Często mniej, niż 1/60 sekundy aby wyrenderować klatkę Generowanie grafiki poprzez uproszczenia Redukcja szczegółowości Uproszczony model oświetlenia Ograniczona symulacja zjawisk wizualnych Źródło obrazu: Crysis 3, Crytek 6
Scena 3D Elementy sceny: Obiekty geometryczne Cechy obiektów (tzw. materiałów z których są zbudowane) Położenie, rodzaj, kolor, intensywność,... Cechy środowiska Położenie, kierunek widzenia, kąt widzenia,... Źródła światła Cechy powierzchni, kolor, tekstura,... Kamera Bryła, położenie, kierunek obrotu, skala,... Mgła, dym, dodatkowe efekty wizualne,... 7
Modele 3D Obiekty wirtualnego świata reprezentowane są na scenie najczęściej przez tzw. modele Modele to geometryczna reprezentacja brył obiektów Model nie jest grafiką, dopóki nie zostanie wyrenderowany on tylko opisuje obiekt Analogia do grafiki wektorowej Źródła obrazów: http://nzchristie.blogspot.com http://maxattivo.blogspot.com 8
Modele 3D Modele składają się z wierzchołków Wierzchołki tworzą wielokąty (ang. Polygons) które składają się na powierzchnię modelu 9
Modele 3D W grafice czasu rzeczywistego często stosuje się tzw. modele low-poly, czyli o małej liczbie wielokątów W ten sposób uzyskuje się znacznie większą wydajność kosztem utraty jakości (szczegółowości) High-poly Low-poly (15488 trójkątów) (968 trójkątów) 10
Modele 3D Modele tworzy się w wyspecjalizowanym oprogramowaniu do tworzenia grafiki 3D, np.: Blender (darmowy) 3ds Max Maya Google SketchUp (darmowy) 11
Modele 3D Przykładowy format, w którym zapisuje się modele: Wavefront OBJ Plik tekstowy Kolejne linijki odpowiadają m.in. pozycjom wierzchołków, wektorom normalnym, współrzędnym tekstur, ścianom 12
Kamera Jest to wirtualny koncept opisujący sposób oglądania sceny przez obserwatora, dla którego renderujemy obraz Istnieją dwa podstawowe rodzaje kamer: Rzut perspektywiczny Rzut prostokątny (ang. orthographic) 13
Kamera perspektywiczna Kamera musi być opisana w sposób matematyczny, aby możliwe było uwzględnienie jej cech w procesie renderowania Przede wszystkim musi posiadać zdefiniowane: Pozycję (punkt zaczepienia): p Kierunek widzenia: d d p 14
Kamera perspektywiczna Położenie w przestrzeni 3D jest po prostu 3-elementowym wektorem Zmiana położenia powoduje przemieszczenie naszego wirtualnego "aparatu fotograficznego" 15
Kamera perspektywiczna Kierunek w przestrzeni 3D również jest 3-elementowym wektorem Kierunek można rozumieć jako wektor leżący na półprostej łączącej punkt zaczepienia z miejscem, na które kamera ma być skierowana Kierunek zwyczajowo przechowuje się jako wektor jednostkowy ( d = 1 ) 16
Kamera perspektywiczna To jednak nie wystarczy, aby jednoznacznie określić sposób obserwacji sceny Oba poniższe przykłady zostały wyrenderowane z tego samego miejsca, w tym samym kierunku: 17
Kamera perspektywiczna Konieczne jest wprowadzenie dodatkowo wektora pionu (ang. up vector): u Najczęściej jest to (0, 1, 0) jeśli za drugą współrzędną przyjmiemy tę skierowaną ku górze świata u d p 18
Kamera perspektywiczna Dodatkowo kamerę określają: Kąt widzenia (najczęściej w stopniach) fov Jego zmiana odpowiada zmianie ogniskowej obiektywu (popularnie zwanej "zoomem" w aparacie fotograficznym) Nie jest tożsamy z przybliżeniem/oddaleniem kamery! Szeroki kąt Wąski kąt (krótka ogniskowa) (długa ogniskowa) 19
Kamera perspektywiczna Dodatkowo kamerę określają: Odległość płaszczyzn przycinania: bliskiej n i dalekiej f (ang. near/far clipping plane) Określają, od jakiej do jakiej odległości będzie renderowana scena Ma to związek z precyzją bufora głębokości Im większy zakres odległości jest renderowany, tym większa szansa powstania problemów typu z-fighting wartości powinny zostać dobrane odpowiednio do charakterystyki danej sceny f n 20
Kamera perspektywiczna Dodatkowo kamerę określają: Proporcje boków podstawy ściętego ostrosłupa (ang. frustum) Stosunek szerokości do wysokości 4:3, 16:9, 16:10,... 21
Kamera perspektywiczna Podsumowując, do jednoznacznego opisania kamery potrzebne są wartości następujących atrybutów: Cechy widoku: Położenie Kierunek Wektor pionu Cechy projekcji: Kąt widzenia Odległości płaszczyzn przycinania Proporcje 22
Przekształcenia geometryczne Przekształcenia geometryczne w przestrzeni 3D opisane są macierzami 4x4 Aby poddać współrzędne (x, y, z) danemu przekształceniu T, macierz T mnożona jest przez wektor (rozszerzony o dodatkową współrzędną w = 1), a cały wynik jest dzielony przez ostatnią współrzędną w' 23
Przekształcenia geometryczne Podstawowe transformacje geometryczne to: Translacja Rotacja Skalowanie Macierze, które je opisują: 24
Przekształcenia geometryczne Macierz modelu jest złożeniem odpowiednich translacji, rotacji i skalowań Czyli iloczynem macierzy odpowiadających takim transformacjom Ważna jest kolejność mnożenia! Służy do umieszczenia naszego modelu, opisanego lokalnymi współrzędnymi, w pożądanym miejscu wirtualnego świata Dzięki takiemu podejściu możliwe jest wielokrotne używanie dokładnie tego samego modelu, opisanego tymi samymi współrzędnymi wierzchołków 25
Przekształcenia geometryczne Macierz widoku, a więc macierz związana z transformacją kamery, jest złożeniem odpowiednich translacji i rotacji Czyli iloczynem macierzy odpowiadających takim transformacjom Macierz projekcji perspektywicznej wygląda następująco: Gdzie: f = 1 / tan(fov / 2) aspect = proporcje znear = odległość bliskiej płaszczyzny przycinania zfar = odległość dalekiej płaszczyzny przycinania 26
Przekształcenia geometryczne Podczas procesu renderowania sceny dokonywane są przejścia pomiędzy różnymi układami współrzędnych Współrzędne modelu Macierz modelu Współrzędne świata Macierz widoku Współrzędne kamery Macierz projekcji Współrzędne projekcji Kanoniczna bryła widzenia Normalizacja, przycinanie itp. Mapowanie na ekran Współrzędne ekranu 27
Renderowanie geometrii Geometria jest opisana przede wszystkim pozycjami wierzchołków Podczas procesu renderowania obiekty rysowane są za pomocą tzw. prymitywów Prymitywy to figury geometryczne odpowiadające za to, jak informacja o kolejnych pozycjach zostanie wykorzystana podczas rysowania Mogą to być np. punkty, linie, łamane, trójkąty, pasy trójkątów, czworokąty, wielokąty, itp. 28
Renderowanie geometrii Prymitywy dostarczane przez OpenGL: Źródło obrazu: http://www.opengl.org 29
Renderowanie geometrii Przykład: Mamy dane 6 wierzchołków o następujących położeniach: v1 v2 v0 v3 v4 v5 Myślimy o punktach w przestrzeni 3D, nie na płaszczyźnie 30
Renderowanie geometrii Przykład: Mamy dane 6 wierzchołków o następujących położeniach: v1 v2 v0 v3 v4 v5 Użycie prymitywu punkty (ang. points) 31
Renderowanie geometrii Przykład: Mamy dane 6 wierzchołków o następujących położeniach: v1 v2 v0 v3 v4 v5 Użycie prymitywu linie (ang. lines) 32
Renderowanie geometrii Przykład: Mamy dane 6 wierzchołków o następujących położeniach: v1 v2 v0 v3 v4 v5 Użycie prymitywu łamana (ang. line strip) 33
Renderowanie geometrii Przykład: Mamy dane 6 wierzchołków o następujących położeniach: v1 v2 v0 v3 v4 v5 Użycie prymitywu łamana zamknięta (ang. line loop) 34
Renderowanie geometrii Przykład: Mamy dane 6 wierzchołków o następujących położeniach: v1 v2 v0 v3 v4 v5 Użycie prymitywu łamana zamknięta (ang. line loop) 35
Renderowanie geometrii Przykład: Mamy dane 6 wierzchołków o następujących położeniach: v2 v1 v0 v3 v4 v5 Użycie prymitywu wachlarz (ang. triangle fan) 36
Renderowanie geometrii Przykład: Mamy dane 6 wierzchołków o następujących położeniach: v2 v1 v0 v3 v4 v5 Użycie prymitywu pas trójkątów (ang. triangle strip) 37
Renderowanie geometrii Przykład: Mamy dane 6 wierzchołków o następujących położeniach: v2 v1 v0 v3 v4 v5 Dwa ostatnie wierzchołki nie są wykorzystane - aby powstał kolejny quad, potrzebne byłyby dwa następne! Użycie prymitywu czworokąty (ang. quads) 38
Renderowanie geometrii Przykład: Mamy dane 6 wierzchołków o następujących położeniach: v2 v1 v0 v3 v4 v5 Ten czworokąt jest niepoprawny ( zdegenerowany ) nie jest wypukły! Użycie prymitywu pas czworokątów (ang. quad strip) 39
Renderowanie geometrii Przykład: Mamy dane 6 wierzchołków o następujących położeniach: v2 v1 v3 v0 v4 v5 Ten wielokąt jest niepoprawny ( zdegenerowany ) nie jest wypukły! Użycie prymitywu wielokąt (ang. polygon) 40
GRAFIKA CZASU RZECZYWISTEGO Podstawy syntezy grafiki 3D i omówienie potoku renderowania Grafika komputerowa i wizualizacja, Bioinformatyka S1, II Rok
Literatura Grafika komputerowa Peter Shirley, Stephen Robert Marschner. "Fundamentals of Computer Graphics". AK Peters, 2009. Grafika czasu rzeczywistego Tomas Akenine-Moller, Eric Haines, Naty Hoffman. "Real-Time Rendering, Third Edition". AK Peters, 2008. Mike McShaffry, David Graham. "Game Coding Complete, Fourth Edition". Course Technology, 2012. "OpenGL Blue Book", czyli dokumentacja OpenGL. http://www.opengl.org/sdk/docs/ "OpenGL Red Book", czyli wprowadzenie do OpenGL. http://www.glprogramming.com/red/