Synteza i obróbka obrazu Rendering obrazu 3D Rendering Proces tworzenia dwuwymiarowego obrazu (np. na ekranie) na podstawie trójwymiarowego opisu nazywa się renderingiem. Na podstawie informacji wejściowych: geometrii sceny 3D (opisu obiektów i ich położenia na scenie), położenia i charakteru źródeł światła, położenia i kierunku patrzenia kamery (obserwatora) Podczas renderingu tworzony jest dwuwymiarowy obraz zdjęcie sceny.
Etapy renderingu Podstawowe etapy renderingu: przekształcenia (transformacje) sceny ustawienie źródeł światła rzutowanie na płaszczyznę widoku usuwanie niewidocznych powierzchni rasteryzacja obliczenie barwy każdego piksela obrazu cieniowanie nakładanie tekstur efekty specjalne Rendering etap wstępny Renderowanie całego świata 3D nie jest potrzebne. Interesuje nas tylko to, co będzie widać na zdjęciu. Dlatego przed etapem rasteryzacji (oświetlanie, cieniowanie, itp.) wykonuje się: wyznaczanie widoku ustawiamy świat tak, jak widzi go obserwator, obcięcie widoku wyrzucamy to co nie zmieści się w kadrze wyznaczanie powierzchni widocznych - wyrzucamy to co jest zasłonięte lub z tyłu,
Przekształcenia sceny Układ współrzędnych obiektu (lokalny, local space) prywatny układ wsp. danego obiektu. Układ wsp. świata (sceny, world space) opisuje scenę, na której rozmieszczane są poszczególne obiekty. Układ wsp. widoku (obserwatora, view space) - związany z widzem oglądającym scenę. Przekształcenia sceny: local world dla każdego obiektu (world tr.), world view dla całej sceny (view tr.) Przekształcenia sceny Współrzędne lokalne, świata i widoku
Przekształcenia geometryczne 2D Elementarne przekształcenia geometryczne modelu na płaszczyźnie (2D): translacja (przesunięcie) skalowanie obrót (rotacja) Opis punktu w układzie współrzędnych kartezjańskich: punkt (x,y) wektor P = [x y] zaczepiony w początku układu współrzędnych Translacja (przesunięcie) Translacja (translation) punktu (x,y) do punktu (x,y ): x = x + d x y = y + d y P = P + T x' x d = + y' y d x y
Skalowanie obiektu Skalowanie (scaling): x = s x x y = s y y x' sx = y' x s y y P = S P Skalowanie: jednorodne (s x = s y ) niejednorodne (s x s y ) Obrót obiektu Obrót (rotation) o kąt θ: x = x cos θ y sin θ y = x sin θ + y cos θ x' cosθ = y' sinθ sinθ x cosθ y P = R P
Składanie przekształceń Omówione przekształcenia mogą być dowolnie składane ze sobą. Przykład: obrót obiektu wokół punktu P 1 =(x 1,y 1 ): przesunięcie P 1 do (,) obrót o kąt θ przesunięcie (,) z powrotem do P 1 P 1 = T(x 1,y 1 ) R(θ) T(-x 1,-y 1 ) P 1 Składanie przekształceń Przykład 2: przesunięcie P 1 do (,) skalowanie obrót przesunięcie (,) do P 2 Składanie przekształceń nie jest przemienne!
Macierzowa reprezentacja przekształceń Przekształcenia: translacja: P = P + T skalowanie: P = S P obrót: P = R P Chcemy zapisać wszystkie operacje w postaci mnożeń macierzy łatwiej składać przekształcenia ze sobą. Używa się współrzędnych jednorodnych. Macierzowa reprezentacja przekształceń 2D przesunięcie: skalowanie: obrót: = 1 1 1 1 1 y x d d y x y x = 1 1 1 y x s s y x y x = 1 1 cos sin sin cos 1 y x y x θ θ θ θ
Przekształcenia afiniczne Przekształcenia afiniczne: zachowują równoległość linii (linie, które były równoległe do siebie, pozostają równoległe po przekształceniu); nie muszą zachowywać odległości i kątów Wszystkie omówione przekształcenia: translacja, skalowanie, obrót są afiniczne. Przekształcenia, które nie są afiniczne, nazywa się czasami przekształceniami deformującymi. Przekształcenia w trzech wymiarach Przekształcenia obiektów w trzech wymiarach opisywane są przez macierze przekształceń o wymiarach 4 x 4. Przekształcenia: translacja o (d x,d y,d z ) skalowanie o (s x,s y,s z ) obrót wokół osi x, y, z pochylenie na płaszczyźnie xy, xz, yz
Składanie przekształceń 3D Mnożenie macierzy przekształceń. Przykład: 1. Stan początkowy 2. Przesunięcie P 1 do (,,) 3. Obrót P 1 P 2 wokół osi y 4. Obrót P 1 P 2 wokół osi x 5. Obrót P 1 P 3 wokół osi z 1 2+3 4 5 Macierze przekształceń 3D Translacja Skalowanie Obrót: oś x oś y oś z 1 1 1 1 z y x T T T 1 z y x s s s 1 cos sin sin cos 1 θ θ θ θ 1 cos sin 1 sin cos θ θ θ θ 1 1 cos sin sin cos θ θ θ θ
Rzutowanie Rzutowanie (projection) - transformacja obiektów 3D w obiekty 2D; tworzenie płaskiego obrazu (zdjęcia) sceny 3D. Dwa zasadnicze rodzaje rzutów: rzut równoległy rzut perspektywiczny (ortographic projection), (perspective projection) Rzut równoległy Rzut równoległy nie zachowuje perspektywy, zachowuje kształt i rozmiar obiektów. Rodzaje rzutu równoległego (i przykłady): prostokątny ortogonalne: przedni, górny, boczny aksonometryczne: izometryczny ukośny Metoda stosowana raczej w projektowaniu CAD. Przy renderingu rzut równoległy jest prostszy, wystarczy pominąć współrzędne z.
Rzut równoległy Trzy rzuty prostokątne: Rzut ukośny: Rzut izometryczny kierunek rzutowania tworzy jednakowe kąty ze wszystkimi osiami Rzut izometryczny Rzut stosowany często w starszych grach komputerowych.
Rzut perspektywiczny Rzut perspektywiczny odwzorowuje sposób widzenia człowieka (skrót perspektywiczny). Wielkość rzutu zmniejsza się przy wzroście odległości między środkiem rzutowania a obiektem. Zniekształcane są kształty i wymiary obiektów. Rodzaje: jednopunktowy dwupunktowy trzypunktowy Bryła widzenia Bryła widzenia ograniczona jest: liniami od obserwatora do krawędzi widoku, przednią płaszczyzną obcinania, tylną płaszczyzną obcinania Elementy leżące poza bryłą widzenia są na późniejszym etapie obcinane (clipping).
Normalizacja współrzędnych widoku Po dokonaniu rzutowania perspektywicznego, współrzędne punktów są często konwertowane do układu znormalizowanego, tak że punkty wewnątrz bryły widzenia przyjmują wartości: współrzędne x, y z zakresu [-1, 1] współrzędna z (głębokość) z zakresu [, 1] z = : przednia płaszczyzna obcinania (najbliżej obserwatora), z = 1: tylna płaszczyzna obcinania (najdalej od obserwatora) Obcinanie widoku Obcinanie (clipping) usuwa elementy obiektów leżące poza bryłą widzenia. Rozpatrywane są kolejne trójkąty siatki. Trójkąt leży w całości wewnątrz bryły widzenia jest przepuszczany. Trójkąt leży w całości poza bryłą jest odrzucany. Trójkąt leży częściowo wewnątrz bryły jest dzielony na dwa, pozostaje tylko część zawarta wewnątrz bryły.
Wyznaczanie powierzchni widocznych Przy renderingu, trójkąt będący bliżej obserwatora musi zakryć trójkąt będący dalej (głębiej) w obrazie. Ponadto trójkąty mogą się przecinać i zasłaniać częściowo. Należy zastosować algorytm wyznaczania powierzchni widocznych. W kartach graficznych najczęściej stosuje się dwa etapy wyznaczania: wstępnie usunięcie tylnych powierzchni, podczas rasteryzacji wyznaczenie zasłoniętych powierzchni za pomocą bufora głębokości (z-buffer). Usuwanie tylnych ścian Można uprościć szukanie powierzchni widocznych poprzez eliminację wielokątów tylnych, które na pewno nie są widziane przez obserwatora. Ściany tylne wektory normalne skierowane od obserwatora są eliminowane Ściany przednie wektory normalne skierowane do obserwatora są zachowywane Operacja ta nazywa się backface culling.
Rasteryzacja Mamy teraz zbiór pustych trójkątów leżących na płaszczyźnie widoku. Rasteryzacja zajmuje się pokolorowaniem obrazu, czyli wyznaczeniem barwy każdego piksela. Przeprowadzane są takie operacje jak: cieniowanie teksturowanie wyznaczanie zasłaniania (bufor głębokości) wyznaczanie cieni przezroczystość (alpha blending) wszelkie inne efekty specjalne Rasteryzacja Spłaszczony po rzutowaniu obraz siatek wielokątowych obiektów Barwa każdego piksela ustalona na podstawie barwy zapisanje w werteksach oraz wpływu padającego światła
Rasteryzacja Mamy teraz płaski obraz 2D, ale dla każdego werteksa mamy informacje dotyczące sceny 3D: położenie (x, y, z) barwa (dla różnych typów światła) współrzędne tekstury (u, v) współrzędne wektora normalnego Wektor normalny (normalvector) jednostkowy wektor prostopadły do płaszczyzny. Wektor normalny wierzchołka uśredniony z wektorów normalnych sąsiednich trójkątów. Wektory normalne Wektory normalne trójkąta i werteksu
Cieniowanie Cieniowanie (shading) ustalanie barwy powierzchni obiektu na podstawie: kąta między kierunkiem padającego promienia światła a wektorem normalnym, odległości od źródła światła, właściwości powierzchni. Cieniowanie Analogia do rysunków ołówkowych
Źródła światła Wygląd końcowego obrazu będzie zależał od rodzaju i położenia źródeł światła. Dwa podstawowe typy źródła światła: światło otoczenia (ambient) - rozproszone, bezkierunkowe źródło światła (np. słoneczne) bezpośrednie (direct) źródło opisane przez: pozycję, kierunek, barwę Zwykle stosuje się kombinację źródła światła otoczenia oraz jednego lub więcej źródeł światła bezpośredniego. Źródła światła bezpośredniego Podstawowe typy źródeł światła bezpośredniego: punktowe (point) promienie rozchodzą się równomiernie we wszystkich kierunkach z jednego punktu kierunkowe (directional) źródło punktowe umieszczone dostatecznie daleko od oświetlanych obiektów, tak że promienie są równoległe reflektor (spotlight) promienie ze źródła punktowego są ograniczone przez stożek obszar (area) promienie ze źródła kierunkowego wysyłane z małego obszaru
Źródła światła bezpośredniego Punktowe Kierunkowe Reflektor Źródła światła (c.d.) Źródła światła są określone przez: typ pozycję (dla źródeł punktowych) kierunek (dla źródeł kierunkowych) barwę moc (zasięg) charakterystykę kierunkową (reflektory) Zjawiska związane ze światłem: zanikanie światła z odległością (np. odwrotnie kwadratowe) odbicia światła (rozpraszające, kierunkowe)
Materiały Materiał pokrywa powierzchnię siatki i określa jak światło wpływa na wygląd obiektu. Najczęściej charakter materiału opisywany jest w werteksach za pomocą barwy zdefiniowanej osobno dla każdego typu światła: barwa przy świetle otoczenia (ambient) barwa rozproszonego światła kierunkowego (diffuse) barwa odblasku światła kierunkowego (specular) definiuje powierzchnie gładkie ew. barwa światła emitowanego ew. stopień przezroczystości Przykłady obliczania barwy obiektu Barwa padającego światła ambient diffuse specular emmision Barwa zdefiniowana w werteksie Wynik dla danego światła Wynik łączny
Obliczanie barwy przykład praktyczny Zakładamy, że punkt powierzchni obiektu odbija: 5% światła czerwonego, 1% światła zielonego i 75% światła niebieskiego. W werteksie zapisujemy barwę światła rozproszonego (diffuse) jako (.5, 1.,.75). Niech padające światło kierunkowe ma 8% intensywności światła białego: (.8,.8,.8) Wynikowa barwa RGB werteksu jest iloczynem wektorowym obu wektorów: (.5, 1.,.75) (.8,.8,.8) = (.4,.8,.6) Prawo cosinusów Lamberta Cieniowanie wykorzystuje prawo Lamberta: intensywność odbitego światła jest wprost proporcjonalne do cosinusa kąta między kątem padania światła a wektorem normalnym do powierzchni odbijającej: f r r ( θ ) = max( cos θ,) = max( L n, ) L wektor jednostkowy padającego światła n wektor normalny
Wpływ kąta padającego światła Intensywność barwy obliczonej w poprzednim kroku dla światła kierunkowego jest modyfikowana (zmniejszana) w zależności od kąta padającego światła. Np. obliczona barwa: (.4,.8,.6) Kąt padania: 3 stopni cos(3) =.866 Zmodyfikowana barwa: (.35,.69,.52) Cieniowanie płaskie Cieniowanie płaskie (flat shading). Dla każdego wielokąta siatki, jego barwa jest obliczana tylko raz i używana do cieniowania całego wielokąta. Kolor wielokąta jest obliczany na podstawie: kąta między wektorem normalnym wielokąta a kierunkiem promienia światła, barwy powierzchni intensywności i barwy światła Widoczne są nieciągłości między wielokątami.
Cieniowanie Gourauda Cieniowanie Gourauda polega na interpolowaniu barwy. Eliminuje nieciągłości jasności sąsiednich wielokątów. Na podstawie wektorów normalnych dla każdego werteksu, obliczana jest barwa wierzchołków siatki. Interpolacja barwy: między wierzchołkami wzdłuż krawędzi między krawędziami wzdłuż rzędu pikseli (scanline) Cieniowanie Gourauda Cieniowanie płaskie Cieniowanie Gourauda Wadą algorytmu Gourauda są zniekształcenia w przypadku odblasków na powierzchni obiektu.
Odblaski zwierciadlane (specular) Odblask powstaje gdy światło kierunkowe odbija się od powierzchni obiektu i trafia do punktu obserwacji (do oka obserwatora ). Cieniowanie Phonga Cieniowanie Phonga daje lepsze rezultaty w porównaniu z cieniowaniem Gourauda pod względem odwzorowania odblasków na powierzchni obiektu (zwłaszcza przy animacji). Znacznie większa złożoność konieczność obliczania wektora normalnego dla każdego piksela.
Cieniowanie Phonga Cieniowanie z interpolacją wektora normalnego. Interpoluje wektor normalny, nie barwę. Interpolacja wektora normalnego wzdłuż krawędzi Interpolacja wektora normalnego między krawędziami Cieniowanie z użyciem interpolowanego wektora Porównanie metod cieniowania brak Flat Gouraud Phong
Odwzorowanie szczegółów powierzchni Zastosowanie modeli cieniowania do siatki wielokątowej pozwala uzyskać tylko gładkie, jednolite powierzchnie. Najprostszy sposób odwzorowania szczegółów: za pomocą drobnych wielokątów. Jest to metoda bardzo nieefektywna. Najczęściej stosuje się pokrywanie powierzchni wielokątów obrazami bitowymi - teksturami. Tekstury Przykład - scena bez teksturowania (tylko cieniowanie) oraz z nałożeniem tekstur
Tekstury Tekstura jako bitmapa oraz nałożona na siatkę wielokątową obiektu Odwzorowanie tekstury Odwzorowanie tekstury ang. texture mapping Odniesienie współrzędnych tekstury (2D) do współrzędnych siatki wielokątowej (3D). Tekstura (texture) dwuwymiarowa mapa bitowa zawierająca pewien obraz. Teksel (texel) każdy piksel tekstury. Mapa tekstury jest określona we własnym układzie współrzędnych (u, v). Konieczność przeznaczenia dużego obszaru pamięci na przechowywanie tekstur.
Odwzorowanie tekstury Współrzędne tekstury: oznaczane jako (u, v) unormowane do zakresu [; 1] dla werteksa siatki podajemy współrzędne tekstury współrzędna z zakresu (; 1) pobierana z wnętrza tekstury współrzędna większa niż 1 tekstura jest powielana Zwykle jedną teksturę nakłada się na grupę wielokątów. Odwzorowanie tekstury Jak to działa: mamy współrzędne piksela znajdujemy współrzędne w układzie obiektu dla punktu, który ma być narysowany znajdujemy współrzędne teksela tekstury nałożonej na rysowany wielokąt próbkujemy kolor tekstury we wskazanym miejscu łączymy z wynikiem cieniowania kolorujemy piksel
Odwzorowanie tekstury Przykład: MIP mapping Jeżeli tekstura jest za mała jest ona powiększana ( pikseloza ). Jeżeli jest za duża konieczność zmniejszenia, utrata szczegółów, aliasing. MIP mapping przechowywanych jest kilka (np. 8) wersji tekstury o różnych rozmiarach (rozdzielczościach). Rozmiar tekstury jest dobierany w zależności od tego jak dużą powierzchnię ma pokryć tekstura. Tekstury MIP mogą być przygotowane przez twórców lub generowane automatycznie.
MIP mapping Przykłady tekstur w różnych rozdzielczościach Tekstura powiększona (bez MIP) Filtrowanie tekstur Wyliczamy współrzędne teksela. Jaki pobieramy kolor dla piksela? Bezpośrednie pobranie koloru teksela nearest-point sampling jest najszybsze, ale powoduje artefakty, widoczne są pojedyncze piksele. Filtrowanie tekstury kolor piksela jest obliczany metodą uśrednienia koloru kilku sąsiednich tekseli. Powoduje to wygładzenie tekstury.
Filtrowanie tekstur Point sampling Filtracja dwuliniowa Filtrowanie tekstur Przykład: brak filtrowania tekstur (point sampling) oraz tekstury filtrowane
Filtrowanie tekstur Filtrowanie dwuliniowe (bilinear filtering) wyznaczanie wartości każdego piksela przez uśrednienie wartości czterech (lub więcej) sąsiednich tekseli. Filtrowanie trójliniowe (trilinear filtering) uśrednianie tekseli z dwóch tekstur (MIP-maps) o różnych rozdzielczościach Filtrowanie anizotropowe (anisotropic filtering) jak trójliniowe, ale uśrednia teksele z obszaru zależnego od kąta nachylenia wielokąta i jego odległości Filtracja anizotropowa Anizotropowy zależny od kierunku. F. anizotropowa bierze pod uwagę kąt, pod którym widz patrzy na teksturowaną powierzchnię (różne skalowanie tekstury w kierunku u i v). Potrzebne są dodatkowe poziomy mip-mappingu. Znaczne zwiększenie złożoności więcej obliczeń, większe zużycie zasobów. F. trójliniowa F. anizotropowa
Filtracja anizotropowa Tekstura o wysokiej rozdzielczości jest skalowana niejednorodnie, np. 2:1 i 1:2 Rząd filtracji liczba kolejnych przeskalowań (np. 16 maksymalne zmniejszenie 16 razy) Skalowanie odbywa się w trakcie rasteryzacji Duża złożoność, np. rząd filtracji 16 liczba uśrednianych tekseli: 4 2 16 = 128 Filtrowanie tekstur Przykłady filtrowania tekstur: dwuliniowe trójliniowe anizotropowe
Tekstury a cieniowanie Oblicza się cieniowanie tak, jakby nie było tekstury. Nakłada się teksturę. Barwa piksela jest iloczynem barwy teksela i barwy obliczonej podczas cieniowania. Aby nie zabarwiać tekstury, barwa światła rozproszonego powinna być biała (1, 1, 1) wtedy uzyskamy zróżnicowanie intensywności tekstury pod wpływem padającego światła. Można ustawić inną barwę w werteksie wtedy zabarwimy teksturę. Tekstury jako tło (pre-rendered background) W niektórych grach komputerowych jedynie obiekty na pierwszym tle są obiektami 3D, renderowanymi w czasie rzeczywistym. Tło (scenografia) jest mapą bitową, uzyskaną poprzez rendering na etapie produkcji gry. Upraszcza to rendering w czasie grania kosztem mniej realistycznej grafiki.
Skybox Skybox jest techniką stosowaną w grach komputerowych. Gracz i jego otoczenie poruszają się wewnątrz sześcianu, którego ściany są pokryte teksturą, np. obrazem nieba. Odwzorowanie nierówności powierzchni Tekstury są zawsze gładkie. Nałożenie na obiekt tekstury przedstawiającej np. mur z cegły nie da realistycznego efektu. Kierunek oświetlenia przy tworzeniu tekstury jest inny niż w końcowej scenie. Mapowanie nierówności (bump mapping) technika pozwalająca uzyskać wrażenie nierówności powierzchni poprzez symulację przesunięcia wybranych pikseli na osi z do przodu lub do tyłu przy pomocy mapy przesunięcia (mapy nierówności), zwykle zawartej w czwartym kanale tektstury.
Odwzorowanie nierówności powierzchni Mapa nierówności tekstury: dodatkowa tekstura, jednokanałowa. Wartość piksela mapy odpowiada wypukłości piksela tekstury. Bez mapowania Mapa nierówności Wynik Bump mapping Dwie najczęstsze realizacje BM: prostsza (emboss BM) sumuje się teksturę z jej kopią, przesuniętą wg mapy nierówności i przyciemnioną; metoda stosowana np. w prostszych w grach; bardziej złożona, ale dokładniejsza modyfikuje się wektory normalne w każdym z punktów, wg mapy nierówności, po czym oblicza się wpływ światła; metoda stosowana przy cieniowaniu Phonga oraz w algorytmach typu raytracing.
Bump maping przykład Torus bez odwzorowania powierzchni i z wykorzystaniem techniki bump mapping Normal mapping Normal mapping, nazywane też Dot3 bump mapping, to odmiana metody mapowania nierówności powierzchni: wektory normalne nie są modyfikowane, lecz zastępowane wektorami zapisanymi w mapie nierówności, mapa nierówności nie jest monochromatyczna, lecz zawiera informacje dla trzech kanałów RGB Bardziej dokładne odwzorowanie powierzchni; wymaga stosowania cieniowania Phonga.
Normal mapping Za pomocą metody normal mapping można uzyskać dokładniejszy wygląd obiektu za pomocą mniej złożonej siatki wielokątowej. Displacement mapping Displacementmapping odwzorowanie przemieszczeń zamiast imitować nierówności, metoda tworzy prawdziwe nierówności: siatka trójkątów dzielona jest na mniejsze trójkąty siatka jest deformowana zgodnie z mapą przemieszczeń, na zdeformowaną siatkę nakładana jest tekstura, która układa się na wygiętej powierzchni. Musi być zastosowane na etapie przekształceń siatki, przed rasteryzacją!
Parallax mapping Parallax mapping - jeden z najnowszych algorytmów odwzorowania nierówności. Służy głównie do odwzorowania obiektów typu otwór po pocisku. Polega na nałożeniu na teksturę jej kopii, przekształconej przez funkcję zależną od informacji zapisanej w mapie wysokości i od kierunku obserwacji. Inne nazwy: Photonic Mapping, Offset Mapping, Virtual Displacement Mapping Odbicia pomiędzy obiektami Dla zwiększenia realizmu modeluje się odbicie innych obiektów na powierzchni innego obiektu. Przykład: odbicie pokoju na powierzchni lustra lub szklanej kuli. Konieczność uwzględnienia deformacji. Dwa podejścia: matematyczne wyznaczanie odbitych obiektów i ich renderowanie, tworzenie dynamicznej tekstury obrazującej odbicia i nakładanie jej na powierzchnię odbijającą
Proste odbicia lustrzane Efekt odbicia w lustrze: renderowana jest scena bez odbić, tworzona jest maska, wyznaczająca piksele należąca do powierzchni lustra, obliczane są pozycje odbitych obiektów tylko dla pikseli nie przykrytych maską renderowane jest odbicie odbicie w lustrze lustro obiekt Environment mapping Bardziej złożony algorytm nosi nazwę reflection mapping (mapowanie odbić) lub environment mapping (mapowanie środowiska). Mapowane środowisko traktowane jest jako dynamiczna tekstura, która jest obliczana w czasie rzeczywistym, a następnie nakładana na powierzchnię odbijającą. Tekstury są tworzone dokonując renderingu z punktu widzenia obiektu zwierciadlanego.
Environment mapping Dwie zasadnicze metody mapowania środowiska: mapowanie sferyczne (spherical EM) tekstura jest zdejmowana z kuli, która znajduje się nieskończenie daleko od obiektu, w którym się ona odbija ( rybie oko ) mapowanie kubiczne (cubic EM) obiekt znajduje się wewnątrz sześcianu, którego ściany zawierają tekstury będące odbiciem środowiska Zaawansowane techniki mapowania EMBM Environment-Mapped Bump Mapping Nałożenie na siebie: tekstury, mapy nierówności (bump map) mapy środowiska (environment map) Przykładowe efekty: odbicia w zafalowanej wodzie odbicia na powierzchni rozgrzanego asfaltu jezdni
Zasłanianie obiektów Różne obiekty mogą się zasłaniać nawzajem. Chcemy narysować te fragmenty, które są widoczne (są najbliżej obserwatora). Mamy informację o współrzędnej z wierzchołków siatki wielokątowej. Moglibyśmy wyznaczyć trójkąt, który jest bliżej obserwatora i narysować go. Ale co zrobić gdy trójkąty przecinają się ze sobą? Algorytm malarza Algorytm malarza (painter s algorithm) - naiwne podejście do problemu zasłaniania. Wszystkie obiekty są sortowane wg. położenia na osi z. Obiekty są malowane w kolejności od położonych najgłębiej do położonych najbliżej Algorytm nie radzi sobie z przecinającymi się płaszczyznami.
Algorytm bufora głębokości (z-buffer) Potrzebne dwa obszary pamięci o takim samym rozmiarze: pamięć obrazu F wartość barwy bufor z wartość z dla każdego piksela F Schemat działania: inicjalizacja bufora z (maksymalna głębokość) przeglądanie kolejnych trójkątów, piksele wiersz po wierszu jeżeli współrzędna z punktu jest większa od zapisanej w buforze, bufor jest uaktualniany nową wartością, a piksel jest wpisywany do pamięci obrazu. Algorytm bufora głębokości Ilustracja działania metody
Algorytm bufora głębokości Przykład obrazu i bufora głębokości. Implementacja bufora z w kartach graficznych: sprzętowa, bufor 24-bitowy lub 32-bitowy (przy 16 bitach występują zniekształcenia). Bufory głębokości z-buffer i w-buffer Bufor z (z-buffer) bazuje na unormowanych współrzędnych z. Rozkład tych współrzędnych jest nieliniowy większość przypada na początkowy zakres. Może te powodować błędy w planach bliskich (przenikanie się obiektów). Bufor w (w-buffer) eliminuje te błędy kosztem większej złożoności obliczeniowej. Wykorzystuje współrzędne w obliczane podczas przekształcenia (rzutowania) perspektywicznego.
Cienie obiektów Cienie dodają realizmu i pozwalają ustalić położenie obiektów. Shadow mapping Algorytm mapowania cieni (shadow mapping, texture shadows): wyznaczenie mapy cieni - dokonuje się renderingu (bez wyznaczania koloru) z punktu widzenia źródła światła, zapisuje się wynik w mapie cieni; rendering bez uwzględnienia cieni; projekcja mapy cieni na obraz; rendering w miejscach, w których nie ma cieni uwzględnienie świateł Należy odróżniać shadow mapping od cieniowania (shading).
Shadow mapping Wyznaczenie mapy cieni: uproszczony rendering z punktu widzenia źródeł światła tylko wyznaczenie głębokości (z), pominięcie informacji o barwie rzutowanie: ortogonalne dla światła kierunkowego, perspektywiczne dla św. punktowego mapa cieni obraz jednokanałowy, zwykle zapisywany w pamięci tekstur Shadow mapping Pierwszy rendering tylko światło otoczenia, cała scena w cieniu Projekcja mapy cienia na płaszczyznę obrazu Dla każdego piksela przeprowadza się depth test czy ten piksel jest w cieniu Rendering z uwzględnieniem świateł tylko dla pikseli, dla których depth test się powiedzie oświetlone piksele Pozostałe piksele zostają w cieniu Uwaga: jeżeli mamy wiele źródeł światła, mapa cieni musi być wyznaczona dla każdego z nich.
Shadow mapping Obraz bez cieni Wyznaczenie mapy cieni Projekcja mapy cieni Obraz z cieniami Shadow volume Shadow volume (stencil shadows): wyznaczenie bryły cienia - za pomocą linii łączących źródło światła z werteksami wielokątów, piksele wewnątrz bryły będą w cieniu; dla każdego źródła światła tworzona jest maska, zapisywana w buforze maski (stencil buffer), maska ma otwory w miejscach, w których nie ma cienia; przyciemnienie pikseli oznaczonych maską.
Shadow volume Dla każdego źródła światła: wyznaczenie wielokątów siatki skierowanych w stronę źródła światła, połączenie ich w sylwetkę (silhouette), wyznaczenie bryły cienia dla całej sylwetki, ew. obcięcie bryły cienia z przodu / z tyłu, wyznaczenie pikseli leżących wewnątrz bryły cienia, oznaczenie tych pikseli w buforze maski (stencil buffer). Shadow volume Nakładanie cieni: rendering bez uwzględnienia światła kierunkowego (tylko światło otoczenia, cała scena w cieniu); wyznaczenie maski cieni dla wszystkich źródeł światła i wszystkich obiektów; rendering z uwzględnieniem światła kierunkowego tylko dla pikseli nie przykrytych maską.
Shadow volume Przykład: http://developer.nvidia.com/object/robust_shadow_volumes.html Porównanie metod tworzenia cieni Shadow mapping: mniejsza złożoność, możliwość rozmycia krawędzi cieni, ograniczona dokładność (do piksela) zwłaszcza dla długich cieni. Shadow volume: znacznie bardziej złożona (szczególnie dla dużej liczby wielokątów), bardziej dokładna (mniejsze zniekształcenia), daje cienie o ostrych krawędziach. Tworzenie cieni spowalnia rasteryzację.
Przezroczystość Powierzchnie mogą być przezroczyste lub półprzezroczyste (np. szkło) mogą częściowo przepuszczać światło. Obiekty zasłaniane mogą być więc częściowo widoczne. Powierzchnie przezroczyste obiekty za nimi są widoczne z ew. lekkim załamaniem promieni światła Powierzchnie półprzezroczyste promienie światła zmieniają kierunki (załamanie), obiekty z tyłu są rozmazane Przezroczystość bez załamań Nie uwzględniane są zjawiska związane z załamaniem promieni światła. Efekt nie jest realistyczny, ale często efekt jest bardziej użyteczny niż w metodzie z załamaniami. Przezroczystość interpolowana (alpha blending) kombinacja barwy piksela obliczonej dla wielokąta zasłaniającego i zasłanianego, biorąc pod uwagę współczynnik przezroczystości, np.: K = αk 1 + (1-α)K 2 Przezroczystość filtrowana wielokąt traktowany jest jak filtr przezroczysty, który selektywnie przepuszcza różne długości fali
Przezroczystość z załamaniem Uwzględnienie załamań promieni światła jest trudniejsze różnica linii widzenia geometrycznej i optycznej. Konieczność modelowania dyspersji różny kąt załamania dla fal o różnej długości fali. Modelowanie polega na obliczaniu wektora załamania promieni światła. Efekty atmosferyczne Atmospheric effect modyfikacja oświetlenia spowodowana działaniem efektów takich jak: mgła dym ogień opary falowanie rozgrzanego powietrza deszcz zmętnienie lustra wody refleksy świetlne rozmycie ruchu
Systemy cząsteczkowe Systemy cząsteczkowe (particle system) służą do generowania efektów takich jak ogień, dym, chmury, iskry i inne trudne do uzyskania klasycznymi metodami renderingu. Definicja emitera pozycja, szybkość generowania cząsteczek, kierunek, czas życia, zmiany koloru, itp. Symulacja tworzenie kolejnych etapów rozwoju systemu Rendering rysowanie cząsteczek Systemy cząsteczkowe Każda cząsteczka posiada parametry, np. pozycja kierunek (algorytm + losowy) stan (np. rodzaj, aktywność) czas życia (po którym cząsteczka ginie) Sama cząsteczka jest albo pojedynczym pikselem, albo niewielką teksturą (sprite), nakładaną na obraz w obliczonej pozycji. Obliczanie systemów cząsteczkowych jest czasochłonne i może zwolnić renderowanie obrazu (spadek fps np. gdy pojawia się dym)
Odwzorowanie mgły Efekt mgły (fog) symuluje widoczność obiektów w naturze: bliższe obiekty są bardziej wyraźne dalsze obiekty są bardziej przysłonięte przez mgłę. Brak efektu mgły Symulacja mgły Odwzorowanie mgły Metody symulacji mgły: Fog Table (PixelFog) starsza metoda, obliczenia wykonywane są dla każdego piksela przy pomocy informacji o głębi piksela zapisanej w buforze. Jest to efekt dodatkowy, nakładany na wynik rasteryzacji. Fog Vertex efekt mgły obliczany jest dla każdego wierzchołka wielokąta, a następnie aproksymowany dla pikseli wielokąta, po czym jest on uwzględniany przy ustalaniu barwy piksela. Ta metoda jest częścią renderingu.
Oświetlenie wolumetryczne Volumetric lighting Algorytm umożliwiający uzyskanie efektu promieni światła prześwitujących np. przez chmury lub przez okno. Strumień światła ze źródła jest traktowany jako przezroczysty stożek, posiadający pewną objętość. Obiekty znajdujące się wewnątrz tego stożka (dym, chmury, para wodna) mają możliwość przepuszczania światła. Okluzja otoczenia Okluzja otoczenia (ambient occlusion) - zaciemnienie obszarów w zagłębieniach, kątach oraz pod i pomiędzy powierzchniami.
Inne efekty Caustic promienie światła odbite lub załamane przez zakrzywioną powierzchnię, np. światło na wodzie. Inne efekty Subsurface scattering efekt promieni świetlnych, które wnikają do obiektu, odbijają się kilkakrotnie, po czym opuszczają obiekt. Metoda pozwala symulować wygląd np. skóry człowieka czy przedmiotów z marmuru.
Inne efekty Lens flare zjawisko odbicia światła w systemie soczewek. Motion blur rozmycie obiektów szybko poruszających się Głębia ostrości (depth of field) rozmycie obiektów znajdujących się poza pierwszym planem Antialiasing Przy rasteryzacji na krawędziach wielokątów siatki powstają efekty aliasingu, widoczne w postaci ząbkowanych linii. Antialiasing- procedura redukująca te zniekształcenia, zwykle realizowana sprzętowo
Supersampling Supersampling najprostsza metoda antialiasingu. Polega na wykonaniu renderingu w n razy większej rozdzielczości (n= 2, 4, 8). Przeskalowanie w dół do docelowej rozdzielczości powoduje rozmycie krawędzi. Wada: znaczne wydłużenie renderingu (wyznaczanie barwy dla każdego piksela obrazu w zwiększonej rozdzielczości). Multisampling (MSAA) Zoptymalizowana metoda: każdy piksel dzielony na n subpikseli, dla każdego subpiksela wyznaczamy: pokrycie (coverage) przez wielokąt, zasłonięcie (occlusion) przez inne w., barwa wyznaczana jest dla całego piksela i zapisywana dla wszystkich subpikseli pokrytych przez w. i nie zasłoniętych, wynikowa barwa piksela uśrednienie barw wszystkich subpikseli za pomocą filtru.
Multisampling (MSAA) Przykład: bez AA MSAA źródło: http://mynameismjp.wordpress.com/212/1/24/msaa-overview/ Multisampling (MSAA) Powiększony przykład dla MSAA różnego stopnia źródło: http://mynameismjp.wordpress.com/212/1/24/msaa-overview/
Podsumowanie Jakie informacje potrzebne do renderingu są zapisywane w werteksie siatki: współrzędne werteksu w układzie obiektu współrzędne wektora normalnego werteksu współrzędne powiązanej tekstury barwa materiału: światło otoczenia (ambient) światło rozproszone odblask zwierciadlany światło emitowane (rzadko) przezroczystość (rzadko) Podsumowanie Ustawienia gry wydłużające czas renderingu (a więc zmniejszające fps): duża rozdzielczość obrazu, filtracja tekstur (zwłaszcza anizotropowa), stopień filtracji, antialiasing, jego stopień (2, 4, 8), odległość rysowania (distance draw), rysowanie cieni, mgła, efekty cząsteczkowe dym, ogień, efekty specjalne np. subsurface scattering, odbicia zwierciadlane.
Bibliografia Microsoft: Dokumentacja DirectX 9.c Frank D. Luna: Introduction to 3D Game Programming with DirectX 9.c A Shader Approach. Wordware Publishing, 26 Wendy Jones: Beginning DirectX. Premier Press, 24 Jeremy Birn: Cyfrowe oświetlenie i rendering. Helion 27 J. Foley, A. van Dam, S. Feiner, J. Hughes, R. Phillips: Wprowadzenie do grafiki komputerowej. WNT, 21 K. Ghazi: The Gamer's Graphics & Display Settings Guide. http://www.tweakguides.com/graphics_1.html Wikipedia: http://en.wikipedia.org/wiki/category:3d_computer_graphics Internet Materiały wyłącznie do użytku wewnętrznego dla studentów przedmiotu Synteza dźwięku i obrazu, prowadzonego przez Katedrę Systemów Multimedialnych Politechniki Gdańskiej. Wykorzystywanie do innych celów oraz publikowanie i rozpowszechnianie zabronione. This presentation is intended for internal use only, for students of Multimedia Systems Department, Gdansk University of Technology, attending the Sound and image synthesis course. Other uses, including publication and distribution, are strictly prohibited.